Root commands for development, databases, and verification
Run these commands from the repository root. Root commands load the applicable environment before Turbo starts each task.
| Command | Purpose |
|---|---|
pnpm install | Install workspace dependencies |
pnpm dev:setup | Set up SQLite data and create the first administrator |
pnpm db:setup | Apply migrations and add seed data |
pnpm auth:create-admin | Create a verified system administrator |
pnpm dev | Start all apps, Drizzle Studio, and foreground Maildev |
pnpm maildev:start | Start background Maildev without the apps |
pnpm maildev:stop | Stop the repository-owned background Maildev process |
pnpm add:component | Add a Shadcn component to the shared interface package |
Stop background Maildev before you run pnpm dev. The development command owns its foreground Maildev process.
pnpm dev:setup is for a new development environment. It applies migrations, adds seed data, and runs auth:create-admin.
| Command | Purpose |
|---|---|
pnpm db:setup | Apply migrations and add seed data |
pnpm db:migrate | Apply committed migrations to the development database |
pnpm db:seed | Add seed data to an empty development database |
pnpm db:diff | Detect a schema change that has no migration |
pnpm db:reset | Recreate the development database after typed confirmation |
pnpm db:clear | Erase rows from the tables managed by the seed command |
CAUTION: pnpm db:reset erases the complete development database. Type reset only when you intend to erase its data.
CAUTION: pnpm db:clear erases the tables managed by the seed command. Verify TURSO_DATABASE_URL before you run it.
| Command | Purpose |
|---|---|
pnpm check-types | Run all package type checks |
pnpm lint | Run Oxlint without changing files |
pnpm lint:fix | Apply safe Oxlint corrections |
pnpm format | Check formatting without changing files |
pnpm format:fix | Format the workspace |
pnpm test | Run unit tests and the cacheable acceptance lifecycle |
pnpm e2e | Run or restore the complete Playwright acceptance result |
pnpm e2e:full | Ignore the E2E cache and run the complete lifecycle |
pnpm build | Build both applications with Turbopack |
pnpm verify | Run every merge gate as one cacheable Turbo graph |
pnpm verify starts Turbo once. Turbo schedules every check, build, unit test, and acceptance task
in the same graph. Playwright creates, migrates, and removes the fixed acceptance database while its
Next server runs. A repeated verification can restore every eligible result from the local or remote
cache.
Acceptance suites use one fixed SQLite file and fixed Next, Maildev, OIDC, and SAML ports. Do not run acceptance suites concurrently in one checkout. A forced stop can leave SQLite files behind; Playwright removes them before the next run.
Developers can share cache results through the Conveyal Vercel Remote Cache. Authenticate and link this checkout from the repository root:
turbo login
turbo link --scope=conveyalTurbo stores the local login and link outside tracked source files. Do not commit Turbo credentials
or .turbo/config.json.
CI exchanges its GitHub OIDC token for short-lived cache access. It does not use a Vercel personal access token or a cache-signature secret.
Direct package commands do not load root environment files. Use root commands unless a package guide requires an explicit environment.
Root commands for development, databases, and verification
Run these commands from the repository root. Root commands load the applicable environment before Turbo starts each task.
| Command | Purpose |
|---|---|
pnpm install | Install workspace dependencies |
pnpm dev:setup | Set up SQLite data and create the first administrator |
pnpm db:setup | Apply migrations and add seed data |
pnpm auth:create-admin | Create a verified system administrator |
pnpm dev | Start all apps, Drizzle Studio, and foreground Maildev |
pnpm maildev:start | Start background Maildev without the apps |
pnpm maildev:stop | Stop the repository-owned background Maildev process |
pnpm add:component | Add a Shadcn component to the shared interface package |
Stop background Maildev before you run pnpm dev. The development command owns its foreground Maildev process.
pnpm dev:setup is for a new development environment. It applies migrations, adds seed data, and runs auth:create-admin.
| Command | Purpose |
|---|---|
pnpm db:setup | Apply migrations and add seed data |
pnpm db:migrate | Apply committed migrations to the development database |
pnpm db:seed | Add seed data to an empty development database |
pnpm db:diff | Detect a schema change that has no migration |
pnpm db:reset | Recreate the development database after typed confirmation |
pnpm db:clear | Erase rows from the tables managed by the seed command |
CAUTION: pnpm db:reset erases the complete development database. Type reset only when you intend to erase its data.
CAUTION: pnpm db:clear erases the tables managed by the seed command. Verify TURSO_DATABASE_URL before you run it.
| Command | Purpose |
|---|---|
pnpm check-types | Run all package type checks |
pnpm lint | Run Oxlint without changing files |
pnpm lint:fix | Apply safe Oxlint corrections |
pnpm format | Check formatting without changing files |
pnpm format:fix | Format the workspace |
pnpm test | Run unit tests and the cacheable acceptance lifecycle |
pnpm e2e | Run or restore the complete Playwright acceptance result |
pnpm e2e:full | Ignore the E2E cache and run the complete lifecycle |
pnpm build | Build both applications with Turbopack |
pnpm verify | Run every merge gate as one cacheable Turbo graph |
pnpm verify starts Turbo once. Turbo schedules every check, build, unit test, and acceptance task
in the same graph. Playwright creates, migrates, and removes the fixed acceptance database while its
Next server runs. A repeated verification can restore every eligible result from the local or remote
cache.
Acceptance suites use one fixed SQLite file and fixed Next, Maildev, OIDC, and SAML ports. Do not run acceptance suites concurrently in one checkout. A forced stop can leave SQLite files behind; Playwright removes them before the next run.
Developers can share cache results through the Conveyal Vercel Remote Cache. Authenticate and link this checkout from the repository root:
turbo login
turbo link --scope=conveyalTurbo stores the local login and link outside tracked source files. Do not commit Turbo credentials
or .turbo/config.json.
CI exchanges its GitHub OIDC token for short-lived cache access. It does not use a Vercel personal access token or a cache-signature secret.
Direct package commands do not load root environment files. Use root commands unless a package guide requires an explicit environment.