Read it, run it, fork it.
The repository is the product. Self-hosting is not a stripped-down edition of it, and there is nothing you have to pay to switch on.
The repository
Everything on this site is in there.
Web analytics, downloads, product analytics, errors, logs, feedback and releases: one service, one database, one licence.
Run it yourself
git clone https://github.com/nwalser/firstrun
cd firstrun
docker compose up -d
# http://localhost:3000 -
The whole product, under AGPL-3.0
Not a demo core with the useful half held back. The cloud runs this repository, and every surface on this site is in it.
-
Your database, your salt
Self-hosted, everything is written to a Postgres you control and the IP hash salt never leaves it. Nothing phones home, because there is no telemetry in the build.
-
One service, one Dockerfile
No queue, no warehouse, no sidecar, no object store. Migrations apply themselves on boot, so a clean clone needs nothing but a database URL.
-
No caps on the free path
Self-hosting has no event limit, no project limit and no seat count. The paid tier sells operations, not permission.
The stack
Boring on purpose.
Self-hosting fails when it needs six moving parts to stay up. This one is a service and a Postgres, and that is the entire operational surface.
Runtime
One Node service
Store
Postgres, and nothing else
Queue
None
Warehouse
None
Migrations
Applied on boot
Telemetry
Not in the build