The fastest way to get a local Activity.next instance running, with the least amount of setup. This uses SQLite (a single file, no database server) and the three core settings that are strictly required: the host, a secret phrase, and a database.
For production deployments, federation, media storage, email, and every other option, see the Setup Guide and the Environment Variables Guide.
- Node.js 24 (the repo pins
engines.nodeto24.x; newer majors are rejected by Yarn) - Yarn (enabled via Corepack)
git clone https://github.com/llun/activities.next.git
cd activities.next
corepack enable
yarn installOnly three settings are strictly required to boot the app: the host, a secret phrase, and a database. SQLite needs no server, so this is the least-effort choice:
ACTIVITIES_HOST=localhost:3000
ACTIVITIES_SECRET_PHASE=local-dev-secret-phrase-change-me
ACTIVITIES_DATABASE_CLIENT=better-sqlite3
ACTIVITIES_DATABASE_SQLITE_FILENAME=./dev.sqlite3The database is a single setting, but SQLite expresses it as two variables: the
client (better-sqlite3) and the file path. (Alternatively, you can collapse it
into one ACTIVITIES_DATABASE JSON variable — see the
Environment Variables Guide.)
Local sign-in over
http: addACTIVITIES_INSECURE_AUTH=trueso the instance acceptshttp://localhostsign-in. Without it, sign-in is forced tohttpsand fails with403 Invalid origin.Restrict who can register (optional but recommended): add
ACTIVITIES_ALLOW_EMAILS='["you@example.com"]'(single-quoted so the JSON array survives) so only listed emails can sign up. When it is unset (the default),ACTIVITIES_ALLOW_EMAILSfalls back to an empty list and registration is open to anyone who can reach the instance.
A practical local .env.local therefore looks like:
ACTIVITIES_HOST=localhost:3000
ACTIVITIES_SECRET_PHASE=local-dev-secret-phrase-change-me
ACTIVITIES_INSECURE_AUTH=true
ACTIVITIES_ALLOW_EMAILS='["you@example.com"]'
ACTIVITIES_DATABASE_CLIENT=better-sqlite3
ACTIVITIES_DATABASE_SQLITE_FILENAME=./dev.sqlite3Generate a real secret for anything beyond throwaway local use:
openssl rand -base64 32. In production,ACTIVITIES_SECRET_PHASEmust be at least 32 characters or the app refuses to start.
yarn migrate # creates the SQLite schema in ./dev.sqlite3
yarn dev # starts the dev server on http://localhost:3000Open http://localhost:3000/auth/signup and create your account with an email
that is in ACTIVITIES_ALLOW_EMAILS (or any email if you left it unset).
That's it — you now have a running instance.
To keep this minimal, the steps above skip everything optional. Each is disabled or runs in a degraded-but-fine mode until you configure it:
| Feature | Default without config | Where to enable |
|---|---|---|
| Media uploads | Disabled | Setup Guide → Media Storage |
| Email verification | Disabled | Setup Guide → Email |
| Background jobs | Run synchronously | Setup Guide → Queue |
| Push notifications | Disabled | Setup Guide → Push Notifications |
| Federation | Needs a public domain + HTTPS | Setup Guide → Starting the Application |
- Production / real deployment: Setup Guide
- All configuration options: Environment Variables Guide
- Database choices: SQLite Setup · PostgreSQL Setup