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 | shThat 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/ribomacOS (Intel)
curl -L https://tissue.systems/download/latest/ribo-macos-x86_64 -o ribo
chmod +x ribo && sudo mv ribo /usr/local/bin/riboLinux (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 --helpOptional: 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: OKRun 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 upgradeIt 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 loginOpens 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 logout3. Write a Cell
Create a directory and add two files.
mkdir hello && cd hellocell.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 deployaccount Demo (acct_33ed412f7bca84b0) [unpinned]
server https://api.tissue.systems
deployed hello
address 33ed412f7x2kp
kind js
url https://hello.strand-9c.tissue.devOpen 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 permanentlyNext steps
- Writing Cells: routing, outbound fetch, returning JSON and HTML
- Structured Data with c3: add a persistent SQLite database to your Cell
- Object Storage with g7: store and serve files and binary objects
- Access Control: put a sign-in policy in front of a Cell that shouldn't be public
- ribo CLI Reference: every command and flag