[tissue](/) · [comparisons](/vs/) · tissue vs val town

# Tissue vs Val Town

Both will run a small piece of JavaScript on a URL within a minute of you deciding to. One keeps it in a browser tab; the other keeps it in your repository.

Val Town is the shortest distance between an idea and a running URL. You write it in the browser, it runs, you send someone the link. For a script, nothing here beats that.

People come across when the script turns into a project: a custom domain on the $5 plan rather than the $21 one, the code in git, a SQL database and object storage as bindings, and a deploy that runs from CI. If what you have is still a script, stay where you are.

## What each one is

Two sentences each, before any numbers.

- **Val Town** — A browser where you write small JavaScript programs — vals — that run on a URL, on a schedule, or on an email. A SQLite database and a blob store are built in, other people's vals are there to read and fork, and there is no local setup at all.
- **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.

|   | Val Town | Tissue |
| --- | --- | --- |
| Free plan | $0. Unlimited public vals, 100,000 runs a day, one minute of wall clock per run, cron no finer than 15 minutes, 3 days of logs, no custom domains. | $0, no card. 5 Cells, 2,000,000 CPU-milliseconds a month, 3 pulse schedules down to one minute, no custom domains either. |
| Entry paid plan | Pro, $21 a month billed yearly: 2,000 private vals, 10 custom domains, 1,000,000 runs a day, ten minutes of wall clock per run, one-minute cron, 10 days of logs, $10 of AI credit a month. | Strand, $5 a month: 25 Cells, 5 custom domains, 50,000,000 CPU-milliseconds, 10 schedules, 3 seats. |
| What is metered | Runs per day, and wall clock per run. | CPU-milliseconds a month, and gigabytes stored. |
| Where the code lives | In the browser, with a local sync if you want one. | In your repository. `ribo deploy` runs from your machine or from CI. |
| Whether it is public | Public unless you pay: private vals start on Pro, 2,000 of them. | Private. Nothing you deploy is listed, shared or forkable. |
| Database | SQLite, built in. | c3, SQL over SQLite, attached by name in the config. 1 GiB free, 5 GiB on Strand. |
| File storage | A blob store, built in. | g7, 5 GiB free, 20 GiB on Strand, with presigned uploads straight from the browser. |
| Scheduled jobs | Cron, no finer than 15 minutes on the free plan, one minute on Pro. | pulse, one minute on every plan, including the free one. |
| Sign-in for your users | Your own code. | gate, one block in the config: an email domain, or a list of addresses. |

Checked 16 September 2026 against Val Town's own pricing page. Both of us move; if a figure here has gone stale, [tell us](mailto:hello@tissue.systems?subject=vs/val-town) and we will correct it.

## Where Val Town is the better choice

This section is not decorative.

There is nothing to install and nothing to deploy. You open a tab, type, and the URL works. For a webhook you need this afternoon, that is the entire product and it is very good at it.

Forking. Somebody else's val is a starting point you can run before you have finished reading it, which is a genuinely different way to learn a platform.

The AI credit on the paid plan writes and edits vals in place, which fits the size of thing the platform is for.

And a hundred thousand runs a day on the free plan is a generous shape if your script is cheap and frequent. A CPU allowance is the better deal the other way round.

## Where tissue is the better choice

It is a repository, not a tab: review, branches, CI, and a deploy command that takes a directory.

A custom domain on the $5 plan — five of them — against none on their free plan and ten on the $21 one.

The whole backend in one file. A database, a bucket, a cron line, secrets and a sign-in policy are declared in `ribo.toml` and arrive on `env`.

Cron down to one minute on the free plan, rather than fifteen.

## What moving looks like

A scheduled val becomes a Cell with a pulse block: the handler is the same function, the schedule moves into the config file, and the deploy is a command rather than a save.

```toml
[cell]
name = "digest"
js   = "./cell.js"

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

[[pulse]]
schedule = "0 7 * * *"
```

```
$ ribo deploy
uploading   cell.js
attaching   c3
scheduling  0 7 * * * (UTC)

live  https://digest.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](https://auth.tissue.systems/login?plan=spore#signup) 5 Cells, a SQL database, file storage and cron.

## The other comparisons

- [vs Vercel](/vs/vercel)
- [vs Cloudflare](/vs/cloudflare)
- [vs Supabase](/vs/supabase)
- [vs Render](/vs/render)
- [vs Fly.io](/vs/fly-io)
- [vs Squarespace](/vs/squarespace)
