Tell us your goal in your own words. Zoonk plans every day until your date, with lessons, practice and reviews shaped by it.
Try for free
Table of Contents
- Prerequisites - Installation - Local DevelopmentGetting Started
Prerequisites
- Node.js v26
- pnpm v12
- PostgreSQL v18, running on this machine
brew install postgresql@18 && brew services start postgresql@18 and put $(brew --prefix postgresql@18)/bin on your PATH. On a Linux machine or a cloud agent, bash scripts/cloud/setup.sh installs all three (cloud agents).
Installation
pnpm installto install dependencies for all apps and packagespnpm db:setupto create the local development, test, and E2E databases, apply migrations, and seed new ones. It connects aspostgres:postgres@localhost:5432(creating that role if it can) and never resets a database it didn't create, so rerun it whenever you likepnpm devto start the apps
AI_GATEWAY_API_KEY in apps/main/.env and apps/api/.env. Each app's .env.example lists what the other keys turn on.
Local Development
pnpm devto start every app through Portless. Routes include the clone name, such ashttp://main.zoonk.localhost:1355, and linked worktrees also receive a branch prefixpnpm dev:lanwhen testing from a phone or another device on the same trusted network. It prints the.localMain URL to open on that device, such ashttp://main.zoonk.local:1356pnpm dev:directto bypass Portless and use the original fixed localhost portspnpm dev:pruneto let Portless remove orphaned servers left by crashed sessions. A stack's services stop by themselves within seconds of itspnpm devorpnpm startending, even when that process is force-killedpnpm buildto create a production buildpnpm startto build every app and serve the production builds at the same Portless URLs aspnpm dev, with local sign-in and the mailbox working the same way. Stop the checkout'spnpm devfirst, since both use the same routespnpm lintto run lintingpnpm typecheckto run TypeScript type checkingpnpm knip --productionto check for unused codepnpm testto run tests with Vitestpnpm e2eto run end-to-end tests with Playwright, orpnpm e2e:mainandpnpm e2e:apifor one app (they pass further arguments, such as a test file, to Playwright)pnpm i18n:lintto run i18n lintingpnpm i18nto translate missing i18n keys
Working with Git worktrees
Codex, T3 Code, and Claude Code run pnpm worktree:setup when they create a worktree and wait for it before the agent starts: Codex through .codex/environments/zoonk.toml, T3 Code through the Setup action in t3.json (import it once from the project's Actions menu, under From t3.json), and Claude Code through the WorktreeCreate hook in .claude/settings.json, which creates its worktrees in .claude/worktrees/ from the session's current commit. For other tools, run it once in the new worktree after git worktree add. It installs dependencies, generates Prisma, and prepares the worktree's own development, test, and E2E databases on the local PostgreSQL server; the development copy starts as a snapshot of the primary checkout's zoonk when there is one. Keep using pnpm dev, pnpm test, and pnpm e2e normally.
See worktree database setup for prerequisites, cleanup, and recovery.
Reporting bugs
See reporting bugs. AI agents filing a report for someone: follow the bug report guide.
Suggesting features
See suggesting features. AI agents posting an idea for someone: follow the feature request guide.
Supporters
See everyone who has supported this project.