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 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.
| 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 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.
[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.