on this page

Quick Start

Quick Start

Deploy your first Cell to a live URL in under five minutes.


1. Install ribo

ribo is the CLI for tissue.systems. It's a single self-contained binary, with no runtime required. All builds (with checksums, and previous releases) are on the download page.

curl -fsSL https://tissue.systems/install.sh | sh

That picks the build for your machine, checks it against the signed release manifest, and installs it to /usr/local/bin. Set RIBO_INSTALL_DIR to put it somewhere else. The script is short and does nothing you can't do by hand — read it first if you'd rather not pipe it to a shell, or follow the per-platform steps below.

macOS (Apple Silicon)

curl -L https://tissue.systems/download/latest/ribo-macos-arm64 -o ribo
chmod +x ribo && sudo mv ribo /usr/local/bin/ribo

macOS (Intel)

curl -L https://tissue.systems/download/latest/ribo-macos-x86_64 -o ribo
chmod +x ribo && sudo mv ribo /usr/local/bin/ribo

Linux (x86-64)

curl -L https://tissue.systems/download/latest/ribo-linux-x86_64 -o ribo
chmod +x ribo && sudo mv ribo /usr/local/bin/ribo

(Debian/Ubuntu users can grab the .deb from the download page instead. On Windows, run the Linux binary inside WSL.)

Confirm the install:

ribo --help

Optional: check the signature. Every release carries a SHA256SUMS manifest signed with the key in allowed_signers — the same key that signs what runs on our servers, held on a laptop rather than on the machines that build the binaries.

curl -LO https://tissue.systems/download/latest/SHA256SUMS
curl -LO https://tissue.systems/download/latest/SHA256SUMS.sig
curl -LO https://tissue.systems/download/allowed_signers

ssh-keygen -Y verify -f allowed_signers -I release@tissue.systems \
  -n tissue-release -s SHA256SUMS.sig < SHA256SUMS
# → Good "tissue-release" signature for release@tissue.systems

shasum -a 256 --ignore-missing -c SHA256SUMS
# → ribo-macos-arm64: OK

Run this from the directory you downloaded ribo into, under its published name — shasum looks up each file by the name in the manifest, and --ignore-missing skips the platforms you did not download. Keep your copy of allowed_signers; a key fetched alongside the download it vouches for proves less than one you already had.

Staying current. ribo checks for a new release once a day and prints a line when one exists. To update:

ribo upgrade

It runs the same verification as the steps above before replacing the binary in place, so a download that doesn't match the signed manifest leaves your existing ribo untouched. ribo upgrade --check reports what's available without installing it. Set RIBO_NO_UPDATE_CHECK=1 to turn the daily check off; it is already off when CI is set, and when output is not a terminal. The check is one unauthenticated GET asking which release is current, and the only thing it says about you is its own User-Agent: ribo/<version> (<platform>). We count those to see which releases are still in use. If you installed the .deb, ribo upgrade will tell you to use your package manager rather than writing over a packaged file.


2. Sign in

ribo login

Opens a browser to complete sign-in. Once authorized, ribo stores the token locally. You only need to do this once.

You sign in as a user; what you deploy belongs to an account, the one created when you signed up unless you switch. Accounts, users and roles has the distinction.

To sign out:

ribo logout

3. Write a Cell

Create a directory and add two files.

mkdir hello && cd hello

cell.js

export default {
  async fetch(request) {
    return new Response("Hello from Tissue!", {
      headers: { "content-type": "text/plain" },
    });
  },
};

ribo.toml

[cell]
name = "hello"
js   = "./cell.js"

4. Deploy

ribo deploy
account   Demo (acct_33ed412f7bca84b0) [unpinned]
server    https://api.tissue.systems
deployed  hello
address   33ed412f7x2kp
kind      js
url       https://hello.strand-9c.tissue.dev

Open the url: your Cell is live. (The address is the Cell's permanent 13-character identifier. url always matches the server line — a Cell is reachable only from the management server that holds it.)


5. Update and redeploy

Edit cell.js, then run ribo deploy again. The same URL continues to work and the updated code is live immediately.


6. List and delete

ribo list                # all your deployed Cells
ribo delete hello        # remove a Cell permanently

Next steps