Run it yourself. Nothing held back
The hosted plan is a convenience, not a lock. The same code that runs the hosted one is the code you can run, and there is no edition with the good parts missing.
What it needs
A Postgres database
Supabase, or a plain Postgres with the same extensions. The schema is a folder of migrations you can read before you run them.
An S3 bucket
Any S3-compatible bucket. Images and attachments are signed URLs, never public ones.
Any static file host
The app builds to a folder of files. Anything that can serve them will do.
Four commands
Point it at a Postgres and a bucket, apply the migrations, build the folder of files. There is no installer to trust and nothing that phones home.
- git clone https://github.com/namlifurkan/tuval && cd tuval
- cp .env.example .env # your Supabase URL and anon key
- npx supabase db push # the schema, as migrations you can read first
- npm install && npm run build # serve dist/ from anything
Nothing is held back
No separate edition and no feature flags. Seats, storage and the API are limited on the hosted plan because those are what cost money to serve; on an install you run yourself they are not limited at all.
Access is decided by the database
Every rule about who may read or write what is a row-level security policy, proven by a suite of access checks that runs against the real schema before any change ships. An interface that hides a button is not security; this is.
And you can leave
One file holds every page, board, issue, database, tag and link, and restores into any workspace.