Local development
Run local dependencies with Docker Compose and applications with Wrangler.
The root docker-compose.yml supplies local Postgres, MinIO and the observability
backend. Applications run through their Cloudflare development adapters; the API's
Node server runs inside a local Cloudflare Container.
Start the development topology
Prepare Node.js 22+, pnpm and Docker, then run from the repository root:
pnpm install
pnpm infra:up
cp apps/server/.env.example apps/server/.env
cp apps/trigger-worker/.env.example apps/trigger-worker/.env
cp apps/worker/.env.example apps/worker/.envReplace example secrets with local development values and configure any provider
OAuth applications you need. Keep .env files untracked. Then initialize the local
database and catalog and start the applications:
pnpm db:migrate
pnpm tools:publish-catalog
pnpm dev| Application | Local URL |
|---|---|
| API Worker + Container | http://localhost:3000 |
| Console | http://localhost:3001 |
| Marketing | http://localhost:3002 |
| Docs | http://localhost:4000 |
| Trigger Worker | http://localhost:8788 |
| Billing Worker | http://localhost:8799 |
The Container maps local database, OTLP and S3 endpoints through Docker's host gateway. Scheduled Workers use the local Hyperdrive emulator. Local Trigger reconciliation recovers durable work without production Queue credentials; workerd tests cover native Queue delivery.
Check curl http://localhost:3000/ for OK, then use the console and an
authenticated Tool call. Stop application processes and use pnpm infra:stop to
stop infrastructure while preserving local data. Keep local databases and secrets
separate from production.
For production in your own account, use Deploy to Cloudflare.