one place for your site, your database, and the code in between
Tissue is serverless hosting where the site and the software behind it are one deployment. You push a folder of pages, or a JavaScript function, or both, and you attach whatever it needs: a SQL database, file storage, a nightly job, a login, a secret. Each of those is a line you add to the same config file. Then ribo deploy, and it's on a URL.
Start freeno credit card · free for 5 Cells and a database, $5 a month when you want your own domain
what you get
A Cell is one deployment: your code, your pages, and everything attached to them.
Plate I. Three Cells over one shared stream of storage. Click to enlarge.
the Cell— a folder of files, a JavaScript function, or both. It answers on a URL from the moment you deploy it.
c3, a SQL database— the bookings, the orders, the answers to a form, the price list. Rows you read and write aren't metered.
g7, file storage— images, uploads, backups, and the static half of your site. Not metered either: we charge for what you keep, not for what you do with it.
pulse, scheduled runs— five-field cron, so the 3am sync and the Monday morning report have somewhere to live.
gate, a login— a sign-in in front of the whole Cell, or just the admin half of it. The sign-in page is ours; you don't build it.
vault, secrets— the Stripe key goes in encrypted and arrives on env when the code runs. It never sits in your repo.
what people move here from
Two recent moves we helped with. The names are theirs, so we've left them out.
the site outgrew the page builder
from Squarespace
A small business site that looked fine and couldn't remember anything. They wanted a bookings table, a price list they could edit without filing a support ticket, and somewhere to put form answers that they could query later instead of searching an inbox.
The pages came over as plain files. The parts that have to remember went into a c3 database attached to the same deployment, which is one line of config. The page builder's monthly fee went away with it.
We didn't expect the next part. They aren't developers, and they haven't had to become ones. The site is a directory of files, one ribo.toml and a SQL database, which is small enough for a coding agent to keep in its head, so that's how they maintain it. They ask.
claude mcp add --transport http tissue https://tissue.systems/mcp
That one line is the whole setup. The agent reads the pages, queries the database and deploys the change, with exactly the permissions its token carries.
a small app on four invoices
from Vercel and AWS
A small app with a couple of databases behind it, spread over two providers. The pages sat on a front-end host. The managed database was in a cloud account, the object store beside it, and the scheduled job on an instance that existed for that one job.
That's four meters and two invoices that never lined up, plus a layer of glue code whose only job was holding the four together: credentials, connection pooling, retries, and a deploy pipeline that had to touch all of it in the right order.
Here it's one ribo.toml and one ribo deploy. The application code came across almost unchanged, because a Cell is a fetch handler over standard Request and Response and imports nothing from us. They deleted the glue and nothing replaced it.
how we compare to what you're paying for now
The same nine questions, asked of everyone.
tissue
Vercel
Cloudflare
Supabase
Val Town
a SQL database
one line of config — c3
a marketplace add-on, billed by the vendor
a separate product, metered by rows read and written
included — Postgres is the product
included, SQLite
file and object storage
one line — g7, and it serves your static pages too
a separate product, plus a marketplace store
a separate product, metered by operation
included
included
scheduled runs
one line — pulse, five-field cron
included, capped by plan
a trigger configured apart from the code
a database extension
included
a login in front of it
two lines — gate, and we serve the sign-in page
not a platform feature — a marketplace vendor, or $20 a month per project to password-protect it
a separate zero-trust product
included — auth is a core product
bring your own
what you're billed for
CPU time and stored bytes. Two numbers.
requests, function duration, bandwidth, seats, add-ons
requests, CPU time, and each product's own meter
a plan fee, then compute, storage, bandwidth, monthly active users
a plan fee, then usage
a request that runs 40 seconds
fine — we bill the CPU it burns, not the time it sits there
ends at the plan's wall clock
fine — they bill CPU too
edge functions have a wall clock
capped by plan
cold starts
none — its own V8 isolate, under a millisecond
yes, mitigated on a paid tier
none — isolates, same as us
yes, on edge functions
fast
getting your app back out
one command returns the source, the config, each database as a SQLite file and every object — and it still runs
your code is portable, the platform pieces aren't
your data exports, the bindings are theirs
excellent — it's Postgres, and it's open source
export your vals
free plan
$0, no credit card, 5 Cells and a database
generous, no commercial use
generous, per product
generous, pauses when idle
yes
Checked 16 September 2026 against each vendor's own pricing pages and docs. Three of these rows go against us and they're staying. Supabase is more portable than we are, and one of the others bills CPU and has no cold starts, same as we do. If we've got a row wrong, tell us and we'll fix it.
Running a function on a URL isn't a new idea. Plenty of companies sell it, and most will attach a database if you ask. The difference is what attached means.
one fileA SQL database, file storage, scheduled runs, a login and your secrets are each a line or two in ribo.toml, and they turn up on env when your code runs. There's nothing to provision first, and no credentials to copy out of one service and into another.
two metersCPU time and stored bytes. No per-request fee, no rows read or written, no storage operations, no egress, no seats. You can work a month out on a napkin.
no clock on a requestHold a WebSocket open, stream a response, or sit in an agent loop waiting on a model for as long as the work takes. Waiting costs nothing, and we don't cut it off.
no lock-inOne command hands back the source, the config, each database as a plain SQLite file and every stored object. cell.js is a fetch handler over standard Request and Response and imports nothing from us, so about forty lines of your own will hand it a SQLite handle and an S3 client instead.
the whole setup, top to bottom
Everything a storefront needs, configured: a database, uploads, static pages, a card key, a nightly job and a staff login. There's no second file.
[cell]
name = "shop"
js = "./cell.js"[[bindings]]
type = "c3"
binding = "DB"
database = "orders"[[bindings]]
type = "g7"
binding = "UPLOADS"
bucket = "shop-uploads"[[bindings]]
type = "files"
binding = "FILES"
dir = "public"[[bindings]]
type = "vault"
binding = "STRIPE_KEY"[[pulse]]
schedule = "0 3 * * *"[gate]
audience = "domain"
domains = ["yourco.com"]
[cell]— the name becomes the first label of the URL, and it never changes once the Cell exists.
c3— a SQL database called orders, created if it isn't there yet, on env.DB with exec, batch, prepare and bind.
g7— storage for uploads on env.UPLOADS. Browsers can upload straight to it over a presigned URL, so files never pass through your code.
files— everything under public/ is served at the root: the HTML, the CSS, the images. No second host, no CDN to configure.
vault— ribo vault set shop STRIPE_KEY once, before the first deploy.
pulse— runs at 03:00 UTC daily. We check the cron line when you deploy, not at three in the morning.
gate— everyone with an address at your domain gets in. Add individual addresses for the contractors.
CPU-milliseconds your code spends running, and gigabytes it stores. Nothing else is counted, on any plan. A site on your own domain name is $5 a month; below that it's free, and it stays free.
If it's pages plus a few things that have to remember (a form, a booking table, a price list), then yes. The pages come across as files, and the remembering goes into a c3 database attached to the same deployment. You lose the drag-and-drop editor. You get a site you can change with code, or by asking an agent to.
what's a CPU-millisecond?
One millisecond your code spends on the processor. Waiting doesn't count: a fetch, a query, an API that takes nine seconds to answer. None of that is CPU time and none of it is billed. A small site barely uses any, which is why the free plan can be a real one.
do I need a credit card?
Not to start. Spore is $0 with no credit card and no expiry date, and it's a real plan rather than a trial. You put a card in when you want your own domain name, or more room than Spore holds. That's the $5 Strand plan, and not before.
can an AI agent manage this for me?
Yes, and people do. The MCP server at tissue.systems/mcp gives an agent a tool per operation: deploy a Cell, query a database, read a file, set a secret. The list is filtered by what the token is allowed to do, so a read-only token never sees a delete tool.
can I get my data out?
One command hands back the source, the config, each database as a plain SQLite file and every stored object. What comes out still runs.
We run on it ourselves. This page is a Cell, and so are the docs, the dashboard and the sign-in screen.