Tissue vs Cloudflare

The two platforms are built the same way: a small JavaScript function in a V8 isolate, on a URL, close to whoever asked. They charge for it very differently, and the free plans stop for different reasons.

Cloudflare runs the largest network of this kind and has run it the longest. If you need to be in three hundred cities, or you are already behind them for DNS, that is where to be, and nothing below changes it.

What sends people here is the shape of the meter. Their free plan stops at 100,000 requests a day and allows each request 10 milliseconds of CPU; their paid plan counts requests, CPU-milliseconds, rows read, rows written and storage operations on separate lines. Tissue counts CPU-milliseconds and stored gigabytes. Requests and rows are not counted.

What each one is

Two sentences each, before any numbers.

Cloudflare
A network company whose serverless platform runs small JavaScript functions in V8 isolates at the edge of it, with an object store, a SQL database and a key-value store alongside. Each is a separate product on its own meter, sitting in front of a network most of the internet already passes through.
Tissue
One Cell — a JavaScript or WebAssembly function answering on a URL — with a SQL database, object storage, scheduled runs, sign-in and secrets attached to it by name in ribo.toml. ribo deploy puts the code, the static files and every attachment live in one step.

Side by side

Every figure below came off the other company’s own pages, on one day, and is dated underneath.

CloudflareTissue
Free plan100,000 requests a day, and 10 milliseconds of CPU per request.2,000,000 CPU-milliseconds a month. Requests are not counted.
Entry paid plan$5 a month.Strand, $5 a month.
Requests10 million included a month, then $0.30 per additional million.Not metered, on any plan.
CPU30 million CPU-milliseconds included a month, then $0.02 per additional million.50 million included on Strand, then $0.015 per additional million.
SQL database$0.001 per million rows read, $1.00 per million rows written.c3. Rows are not counted. 1 GiB free, 5 GiB on Strand.
Object storage$4.50 per million write operations, $0.36 per million read operations.g7. Operations are not counted. 5 GiB free, 20 GiB on Strand.
Vector searchA separate vector database product, on its own meter.Inside c3, on the same meter as the rest of the database: an F32_BLOB column, cosine or L2 distance, and an approximate-nearest-neighbour index.
EgressFree.Free.
Scheduled jobsCron triggers, included.pulse, a cron line in the config. 3 schedules free, 10 on Strand.
Sign-in for your usersA separate product in their zero-trust range.gate, one block in the same config file.
Serving locationsHundreds of cities.Six, four in the United States and two in Europe.

Checked 16 September 2026 against Cloudflare's own platform pricing documentation. Both of us move; if a figure here has gone stale, tell us and we will correct it.

Where Cloudflare is the better choice

This section is not decorative.

The network. Six serving locations against theirs in hundreds of cities is not a close contest, and if your readers are in Jakarta it is the only contest.

Everything in front of the application: attack absorption, bot handling, caching rules, a firewall, image resizing, and the DNS business underneath all of it. We do none of that.

Depth. They have shipped this for years — durable coordination, queues, inference, containers. If your design needs one of those, it exists there and does not exist here.

And the meter cuts both ways. A CPU-heavy job — rendering, compression, a slow loop — is cheap when requests are the unit and expensive when milliseconds are. If that is your workload, count them before you move.

Where tissue is the better choice

Nothing to design around. There is no daily request ceiling, so a good week is not an outage, and the allowance is monthly rather than per request.

One bill. Their price list has separate lines for requests, CPU, rows read, rows written, storage operations and stored bytes. Ours has two.

Rows and operations are free. A page that reads forty rows to render costs the same as a page that reads one, which means you can write the query the clear way.

One config file and one command. The database, the bucket, the cron line and the sign-in policy are declared beside the code, not created in a dashboard and then referred to by an identifier you paste in.

What moving looks like

A small application with a database and somewhere to put uploads. The handler is already a fetch export, so what changes is the config file and the names on env.

[cell]
name = "api"
js   = "./cell.js"

[[bindings]]
type     = "c3"
binding  = "DB"
database = "orders"

[[bindings]]
type    = "g7"
binding = "UPLOADS"
bucket  = "order-uploads"
$ ribo deploy
uploading   cell.js
attaching   c3 · g7

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

The database and the bucket are created on that first deploy if they are not there yet. ribo deploy is the whole pipeline: there is no build step to configure and no second place to put the static files.

Spore is $0, takes no card, and allows commercial use. If tissue turns out to be the wrong shape for what you are building, you will know inside an afternoon.

Start free 5 Cells, a SQL database, file storage and cron.

The other comparisons