Run them from the repository root. Tests need bun run services:up first.
| bun run docker:dev | Postgres, Mailpit, the API, web app and site, all in Docker. See Quick start |
| bun run docker:down | Stop all of it |
| Command |
What it does |
bun dev |
API, web app and site, reloading as you edit |
bun run dev:api, dev:web, dev:site |
One app only |
bun run dev:mobile |
Expo, in its own terminal, for Expo Go |
bun run dev:mobile:build |
The same, for a build of your own. See Mobile builds |
bun run mobile:build --profile <name> |
Build the mobile app with EAS |
bun run mobile:submit --profile production |
Send a build to the stores |
bun run check |
Typecheck, lint, format check, then every test. Run before you commit |
bun run typecheck, lint, format:check, test |
The parts of check, one at a time |
bun run acceptance |
The browser journeys against the production images, with stand-ins. --teams for teams |
bun run acceptance:mobile |
The mobile app’s flows with Maestro, on the iOS simulator. --android for Android |
bun run --cwd apps/api test test/<file> |
One test file. See Test your features |
bun run format |
Fix formatting |
bun run build |
Production builds of the web app and site, and the mobile app’s bundles |
bun run services:up |
Start Postgres, Redis and Mailpit in Docker |
bun run services:down |
Stop them, keeping the data |
bun run services:reset |
Delete the local database and start empty. Run db:migrate after |
| Command |
What it does |
bun run db:generate |
Write a migration after changing the schema of your ORM. Commit it |
bun run db:migrate |
Apply pending migrations, with the ORM in DATABASE_ORM |
bun run db:studio |
Browse the data in Drizzle Studio |
bun run test:prisma |
Every API test, with the API on Prisma. CI runs it after check |
bun run test:typeorm |
Every API test, with the API on TypeORM. CI runs it too |
Never edit a migration that has been committed.
| Command |
What it does |
bun run billing:sync |
Create or update your plans in Stripe or Polar. After changing plans, and once live |
bun run billing:listen |
Stripe only: forward its webhooks locally and print the signing secret. Needs the Stripe CLI |
bun run email:preview |
Preview email templates at http://localhost:3100 |
bun run worker |
Run the job worker without the API |
| Command |
What it does |
bun run production:up |
Build and run the production images locally |
bun run production:down |
Stop them, keeping the data |
bun run deploy:init [aws] |
Create .env.railway, or .env.aws, with a new AUTH_SECRET |
bun run deploy:plan |
Show what would change on Railway. Changes nothing |
bun run deploy:apply |
Check .env.railway, then apply those changes, after asking |
bun run deploy:plan:aws |
Show what would change on AWS. Changes nothing |
bun run deploy:apply:aws |
Build, push and apply on AWS, after asking. See AWS |
bun run deploy:destroy:aws |
Delete your production on AWS, after asking |
bun run deploy:check --before <railway|aws> |
Check the settings file against the API’s rules. Changes nothing |
bun run deploy:check <web address> [--site <address>] [--email <yours>] |
Check a deployment from outside. --email sends a sign-in link |
bun run railway … |
Railway’s CLI, in the tested version |
What deploy:check looks at is on Check a deployment.