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 deployputs 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.
| Cloudflare | Tissue | |
|---|---|---|
| Free plan | 100,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. |
| Requests | 10 million included a month, then $0.30 per additional million. | Not metered, on any plan. |
| CPU | 30 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 search | A 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. |
| Egress | Free. | Free. |
| Scheduled jobs | Cron triggers, included. | pulse, a cron line in the config. 3 schedules free, 10 on Strand. |
| Sign-in for your users | A separate product in their zero-trust range. | gate, one block in the same config file. |
| Serving locations | Hundreds 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.