ribo CLI Reference
ribo is the command-line tool for tissue.systems. The name comes from the ribosome — the molecular machine inside every living cell that reads genetic instructions and assembles proteins from them. In the same way, ribo reads your ribo.toml and assembles a running Cell from your code.
Complete reference for every ribo command.
ribo login
Authenticate with tissue.systems. Opens a browser for the OAuth flow, then stores a token locally.
ribo login
Token is saved at:
- macOS:
~/Library/Application Support/ribo/token.json - Linux:
~/.config/ribo/token.json
Flags
| Flag | Description |
|---|---|
--server <url> |
Auth server URL (default: https://tissue.systems) |
--key <token> |
Skip the browser — save a pre-issued API key directly |
# Standard browser login
ribo login
# Save a key directly (CI, scripts)
ribo login --key eyJhbGciOiJIUzI1NiJ9...
ribo logout
Remove the stored token.
ribo logout
ribo deploy
Deploy a Cell from a ribo.toml configuration file. If a build command is defined, it runs first.
ribo deploy [--config <path>] [--server <url>]
Flags
| Flag | Default | Description |
|---|---|---|
--config <path> |
./ribo.toml |
Path to the config file |
--server <url> |
https://api.dev.tissue.systems |
Management API URL |
Output
deployed my-cell
address ab1cd2
kind js
url https://word-ab1c.dev.tissue.systems
c3 DB→my-database
files ASSETS→ab1cd2-assets (18 files)
pulse 0 * * * *
url— the Cell's permanent public URLaddress— a short stable ID derived from your user ID and cell name; never changes between deploysc3— c3 bindings (binding name → database name)files— FILES bindings (binding name → bucket name, file count)pulse— comma-separated cron schedules (only shown if[[pulse]]is declared)
Examples
ribo deploy
ribo deploy --config ./prod/ribo.toml
ribo deploy --server http://localhost:8082
ribo list
List all your deployed Cells.
ribo list [--server <url>]
ab1cd2 my-cell 3.1kb 2026-05-25T12:00:00 https://word-ab1c.dev.tissue.systems
ef5gh6 another-cell 1.2kb 2026-05-24T09:30:00 https://other-ef56.dev.tissue.systems
Columns: address, name, code size, last deployed, public URL.
ribo delete
Remove a deployed Cell permanently. The URL stops working immediately.
ribo delete <name-or-address> [--server <url>]
ribo delete my-cell
ribo delete ab1cd2
ribo addr
Print the stable address for a cell name without deploying. The address is deterministic — derived from your user ID and the cell name.
ribo addr <name>
ribo addr my-cell
# → ab1cd2
Useful for building URLs before deploying, or verifying which address a name maps to.
ribo db
Manage c3 SQLite databases. See c3 Overview for usage in Cells.
ribo db create
ribo db create <name> [--server <url>]
Create a new database. Names must be lowercase alphanumeric with hyphens.
ribo db create myapp
ribo db create analytics
ribo db list
ribo db list [--server <url>]
List all your databases.
myapp
analytics
ribo db drop
ribo db drop <name> [--server <url>]
Delete a database and all its data. Irreversible.
ribo db exec
ribo db exec <name> ["<sql>"] [--file <path>] [--server <url>]
Run a SQL statement or load a .sql file. Output is JSON for inline queries. Use --file for multi-statement migrations — it uses execute_batch internally, so it handles any number of statements efficiently in a single request.
Flags
| Flag | Description |
|---|---|
--file <path>, -f <path> | Path to a .sql file. Executes all statements in the file. Use this for schema migrations and bulk data loads. |
ribo db exec myapp "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, email TEXT UNIQUE)"
ribo db exec myapp "INSERT INTO users (email) VALUES ('hello@example.com')"
ribo db exec myapp "SELECT * FROM users"
# → [{"id":1,"email":"hello@example.com"}]
ribo db exec myapp "SELECT COUNT(*) as total FROM users"
ribo db exec myapp "PRAGMA table_info(users)"
# Load a schema or seed file (any number of statements)
ribo db exec myapp --file schema.sql
ribo db exec myapp --file ./migrations/001_init.sql
ribo bucket
Manage g7 object storage buckets. See g7 Overview and Managing Buckets for details.
ribo bucket create
ribo bucket create <name> [--server <url>]
Create a new bucket. Names must be lowercase alphanumeric with hyphens. Idempotent — creating an existing bucket is not an error.
ribo bucket create avatars
ribo bucket create raw-uploads
ribo bucket list
ribo bucket list [--server <url>]
List all your buckets.
avatars
raw-uploads
processed-images
ribo bucket ls
ribo bucket ls <name> [--server <url>]
List the objects (files) stored in a bucket.
ribo bucket ls my-files
images/avatar.png 42318
images/banner.jpg 198432
reports/2026-05.pdf 81920
Columns: key, size in bytes.
ribo bucket drop
ribo bucket drop <name> [--server <url>]
Delete a bucket and all its objects. Irreversible.
ribo bucket drop old-uploads
Global behaviour
Default server: All commands default to https://api.dev.tissue.systems. Override with --server for local development.
Authentication: ribo deploy, ribo list, ribo delete, ribo db *, and ribo bucket * require a valid token. Run ribo login first.
Cell addresses: An address is base36(sha256(userId + ":" + name)[0..4]), zero-padded to 5 or 6 characters. The same name always maps to the same address for a given user.
Slugs: Each Cell gets a human-readable public slug (e.g. crane-a4f2) on first deploy. The slug is stable across redeploys. The public URL is https://<slug>.dev.tissue.systems.