In biology, tissue is what cells become when something binds them into one working thing. That is the product: tissue runs your JavaScript or Rust functions as Cells. Your site, your API, your cron job, each on its own URL, bound into one working thing by what they share: the same databases, the same storage, one bill.

PLATE I. the stream they share SQL · object storage a site an api a cron job the gate your function one V8 isolate c3 SQL g7 files vault secrets THE TISSUE. many cells, working as one, bound by the stream they share

Use tissue for the things you already build: a site with a signup form, an API with a database behind it, a storefront with checkout, a bot that runs every morning. Running a function on a URL is not a new idea; several companies sell it, and most will attach a database on request.

why tissue is better

The difference is what attached means. Elsewhere the database, the storage, the cron, and the login are each their own product with their own meter, sometimes their own company resold through a marketplace. A working product sits on four or five of them, glued together with code only you maintain.

Here it means one config file. A SQL database, object storage, scheduled runs, login, and secrets are each a line or two in it. On Vercel, a password in front of a deployment is a $150/month add-on; here it is two config lines.

the bill is two numbersCPU time and stored bytes. The meters that don’t exist here: per-request fees, rows read and rows written, storage operations, egress, seats. You can predict a month’s bill on a napkin.
no clock on a requesta Cell can hold a WebSocket open, stream a response, or sit in an agent loop awaiting a model for as long as the work takes; time spent waiting is free and never killed. Most serverless platforms put a wall clock on every request (ten seconds here, fifteen minutes there) and cut it off mid-work. The per-request guard here is on CPU actually burned, not on time passed.
no cold startsevery Cell runs in its own V8 isolate, which starts in under a millisecond. There is nothing to keep warm and no premium tier that fixes latency.
no lock-inan explant is living tissue cut from an organism and kept growing outside it. One command, ribo explant export, hands you a Cell’s entire existence as one archive: the deployed source, the config, each database as a plain SQLite file, every stored object. What comes out still runs. cell.js is a fetch handler over standard Request and Response — the shape Bun and Deno serve natively and Node serves behind a short adapter — and it imports nothing from us: the attachments arrive on env, so about forty lines hand your function a SQLite handle and an S3 client instead. Other platforms export your data too; what they cannot hand over is the running app, because its first line imports a module that exists on their runtime and nowhere else.
the deploy$ ribo deploy; the folder it runs in becomes a Cell: one function, one config, one URL, live a couple of seconds after you press enter.unfoldfold

ribo reads the folder it runs in: cell.js and ribo.toml, the dozen-line config that names the attachments. It uploads the function, publishes the files directory to object storage, and registers the result as a Cell: one folder, one function, one config, one URL. The first deploy mints that URL; every later deploy replaces the code behind it, live a couple of seconds after you press enter. Prefer more machine? Cells are also Rust, compiled to WebAssembly; the deploy runs the build.

a requestthe certificate, then gate if you turned it on, then your function in its own V8 isolate; in that order, on every request.unfoldfold

A request to the URL meets three things, in order. The certificate, issued and renewed for you, on your own domain too if you point DNS at us. Then gate, if you turned it on: the platform’s sign-in screen, checked before your code runs. Then your function, in its own V8 isolate, which starts in under a millisecond: no cold start, nothing to keep warm. The function sees env: every attachment named in the config is a binding on it.

export default {
  async fetch(request, env) {
    const { results } = await env.DB
      .prepare("SELECT * FROM signups ORDER BY created_at").all();
    return Response.json(results);
  }
}
the lexiconwhat comes attached (c3, g7, pulse, vesicle, synapse, gate, vault) and why every part is named from biology.unfoldfold

Biological tissue is many cells of the same kind working as one unit: muscle, nerve, skin. No single cell runs the organism: each carries its own machinery, and the organism gets its behavior from small units doing one job each. That is how this platform is built, so the vocabulary came from biology:

one function, one URLCellbiology’s smallest unit that lives on its own; deploy it and delete it without touching your other Cells.
the deploy commandribothe ribosome reads the instructions and assembles the product; ribo deploy reads your folder and assembles the Cell.
a SQL databasec3SQLite, with exec, batch, prepare, and bind; every Cell in the account can bind it by name; that sharing is the stream in the plate. Named for the three-carbon molecules metabolism passes from step to step.
object storageg7S3-compatible buckets that also serve your static files: the bucket is the static host, no CDN product to add in front. Named for glycogen, a cell’s bulk storage for later.
scheduled runspulsefive-field cron, UTC; wakes your function on schedule, no queue to operate. Named for the heartbeat that keeps the body’s time.
incoming webhooksvesiclea URL you can hand to a vendor before the handler exists; every delivery is stored, and binding it to a function starts the deliveries. Named for the sac a cell wraps around what it takes in, holding it until there is something to do with it.
sensorssynapsedevices publish over MQTT with credentials of their own; each reading arrives in your function’s sensor handler, and nothing is kept unless you keep it. Named for the junction that carries a signal from one cell to the next.
logingatetwo config lines; the platform serves the sign-in page and checks it before your code runs. Named for the membrane’s gated channels, the only way in.
secretsvaultset at the command line, delivered to your function as a binding; nothing lands in your repo or in a served file. Named for the strongbox, not the organelle (real cells do have vaults, and biologists still argue about what they’re for).
realtimeWebSockets and server-sent events, from the same fetch handler. No biological name: it isn’t a part, it’s how the function behaves.
your teaminvite people into the account from the dashboards; each signs in with their own password and their own two-factor. Priced by the runtime, not by the seat; adding a colleague doesn’t change the bill.

After the deploy it’s a browser: the dashboards show your Cells, databases, files, and the bill. Or hand even the deploy to your editor’s agent: point Claude, Cursor, or any MCP client at tissue.systems/mcp and it deploys, reads logs, and redeploys with a token scoped to what you allow.

what customers have builtfive from the accounts we host, small to large: a link shortener, a static site, a calendar feed, a file drop, a storefront.unfoldfold
a link shortenerthe smallest Cell in service: one route looks up the slug in a c3 table and redirects; another takes new links and counts the clicks. One folder, one function, one database.
a static sitethe same site it ran on Squarespace, pages served as plain files from g7, plus the one dynamic piece: an email signup form that writes into a c3 table the owner queries before each mailing. They moved for the cost; the whole site fits in the free tier.
a calendar feedthe Cell serves a live .ics feed built from a c3 table, so any calendar app can subscribe to it; a gate-protected route adds and edits the events. A shared calendar that is just a URL.
a file dropthe browser uploads straight to g7 over a presigned URL, so the file never passes through the function; share links live in c3 and expire, pulse sweeps the lapsed objects nightly, and the owner’s page sits behind gate. Still one Cell.
a storefrontone customer’s whole shop: the site Cell serves the catalog from c3 and product images from g7, a checkout Cell opens Stripe sessions with the key in vault, a webhook Cell writes payment events into the orders database, the admin screen sits behind gate, and pulse reconciles the day’s orders overnight. Four Cells, three databases, one bill.

The platform is its own first customer: this page is a Cell, and so are the docs, the dashboards, and the sign-in screen.

sign up · free tier, no card.