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 free no 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.

 tissueVercelCloudflareSupabaseVal Town
a SQL databaseone line of config — c3a marketplace add-on, billed by the vendora separate product, metered by rows read and writtenincluded — Postgres is the productincluded, SQLite
file and object storageone line — g7, and it serves your static pages tooa separate product, plus a marketplace storea separate product, metered by operationincludedincluded
scheduled runsone line — pulse, five-field cronincluded, capped by plana trigger configured apart from the codea database extensionincluded
a login in front of ittwo lines — gate, and we serve the sign-in pagenot a platform feature — a marketplace vendor, or $20 a month per project to password-protect ita separate zero-trust productincluded — auth is a core productbring your own
what you're billed forCPU time and stored bytes. Two numbers.requests, function duration, bandwidth, seats, add-onsrequests, CPU time, and each product's own metera plan fee, then compute, storage, bandwidth, monthly active usersa plan fee, then usage
a request that runs 40 secondsfine — we bill the CPU it burns, not the time it sits thereends at the plan's wall clockfine — they bill CPU tooedge functions have a wall clockcapped by plan
cold startsnone — its own V8 isolate, under a millisecondyes, mitigated on a paid tiernone — isolates, same as usyes, on edge functionsfast
getting your app back outone command returns the source, the config, each database as a SQLite file and every object — and it still runsyour code is portable, the platform pieces aren'tyour data exports, the bindings are theirsexcellent — it's Postgres, and it's open sourceexport your vals
free plan$0, no credit card, 5 Cells and a databasegenerous, no commercial usegenerous, per productgenerous, pauses when idleyes

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.

Start free no credit card · move one page and see

why tissue is better

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.

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.
$ ribo deploy
uploading   cell.js
publishing  ./public
attaching   c3 · g7 · vault · pulse · gate

live  https://shop.quartz-4b.tissue.dev

two meters, three plans

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.

Spore

$0 forever, no credit card

  • 5 Cells
  • 1 GiB SQL · 5 GiB files
  • 2M CPU-ms / month
  • 3 scheduled jobs
  • a tissue.dev address
Start free

where most sites land

Strand

$5 / month

  • 25 Cells · your own domain
  • 5 GiB SQL · 20 GiB files
  • 50M CPU-ms / month
  • 10 scheduled jobs
  • email support
Start on Strand

Colony

$25 / month

  • 100 Cells · 25 domains
  • 25 GiB SQL · 100 GiB files
  • 1,000M CPU-ms / month
  • 25 scheduled jobs
  • priority support
Start on Colony
no per-request feeno rows read or writtenno storage operations no egress chargeno per-service minimumno seats

The full table, what happens past the included amount, and the Sovereign licence.

questions

can I move a Squarespace or Wix site here?

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.

Start free

Plate I. Three Cells over one shared stream of storage.