Installation
Run the API, the database and the web app on your machine.
Requirements
- Node.js 22 or newer and pnpm 11
- Go 1.27
- PostgreSQL 18. The migrations call
uuidv7(), which older versions do not have. - A Resend API key, because sign-up sends a verification email
Install
pnpm install
cp apps/server/.env.example apps/server/.envFill in apps/server/.env before the first start:
APP_SECRET: at least 32 characters, for exampleopenssl rand -base64 32DB_DSN: the connection string of your PostgreSQL 18 databaseRESEND_API_KEYandFROM_ADDRESS: the sender of the sign-in emails
Configuration lists every setting.
Create the tables
pnpm migrate:upWith MIGRATE_ON_BOOT=true the API applies pending migrations when it starts,
so this step is optional in development. Authula keeps its own tables in the
authula schema and creates them on boot.
Start
pnpm dev:server # the API on http://localhost:8080
pnpm dev:app # the vault web app on http://localhost:5173
pnpm dev:web # the marketing site on http://localhost:5174
pnpm dev # everything in parallelhttp://localhost:8080/api/health answers {"data":{"status":"ok","version":"dev"}} when the API
and its database are up.
One origin, no CORS
The Vite dev server proxies /api to the API, so the browser only ever talks
to http://localhost:5173. Start the API first; if it is not on port 8080,
set VITE_API_PROXY_TARGET when starting the app.
First account
Open http://localhost:5173/sign-up, create an account and confirm the email.
The first visit to the vault asks for a master password of at least 12
characters. It is separate from the sign-in password and cannot be recovered:
nobody, the server included, can reset it.
To get an administrator instead, set SUPER_USER=email:password and
SEED_ON_BOOT=true. The API then creates that account with the super_user
role on boot, which is the only role allowed to write categories.