Development setup
Run the monorepo from a checkout to build, customize, and contribute.
This is the path for working on Wiki. If you only want to run it, use the self-hosting guide instead.
Prerequisites
- Node.js LTS
- pnpm 10 — pinned via
packageManager; runcorepack enableto pick it up automatically - Docker — for the local PostgreSQL database
- Bun — runs the
serverandtuidev scripts
Install and start the database
Install dependencies
pnpm installThis also installs the lefthook git hooks that lint and format staged files on commit.
Configure the apps
Copy the example env files and fill in values:
cp apps/server/.env.example apps/server/.env
cp apps/web/.env.example apps/web/.envSee the configuration reference for what each variable does.
Apply the schema
pnpm db:pushPushes the Drizzle schema directly to your local database — the fast path for development.
Run the apps
pnpm devStarts everything: web on :3001, server on :3000, collab on :1234. Open http://localhost:3001 and register — onboarding creates your first organization.
Running a single app
pnpm dev:web # web only
pnpm dev:server # server only
pnpm dev:collab # collab service only
pnpm dev:tui # terminal installer / ops UIChecks
Run these before opening a pull request — CI runs the same set:
pnpm test # Vitest, via Turborepo
pnpm check-types # TypeScript across every package
pnpm check # oxlint + oxfmtDatabase scripts
| Script | Description |
|---|---|
pnpm db:push | Push the schema directly (dev shortcut) |
pnpm db:generate | Generate SQL migrations from schema changes |
pnpm db:migrate | Apply pending migrations |
pnpm db:studio | Open Drizzle Studio |
pnpm db:stop | Stop the Postgres container |
pnpm db:down | Remove the Postgres container |
db:push is for development only. Production installs apply versioned SQL migrations
automatically. See Updates.