Skip to main content

Examples

Ready-to-adapt configurations for common setups. Each one goes in dev-pm.config.ts at your project root.

Minimal: two processes

The smallest useful config — an API and an admin dev server.

dev-pm.config.ts
import { defineConfig } from "dev-process-manager";

export default defineConfig({
scripts: [
{ name: "api", script: "npm run start:api" },
{ name: "admin", script: "npm run start:admin" },
],
});
dpm start all
dpm logs

Waiting for a database and a build

The API waits for Postgres to accept connections and for a shared package to be built before it starts.

dev-pm.config.ts
import { defineConfig } from "dev-process-manager";

export default defineConfig({
scripts: [
{
name: "shared",
script: "npm run build:watch --workspace=packages/shared",
},
{
name: "api",
script: "npm run start:api",
waitOn: [
"packages/shared/lib/index.d.ts", // wait until "shared" has built
"tcp:5432", // wait until Postgres is up
],
},
],
});

Using environment variables in waitOn

Environment variables from .env / .env.local are expanded inside waitOn, so ports are not hard-coded.

.env
POSTGRESQL_PORT=5432
dev-pm.config.ts
import { defineConfig } from "dev-process-manager";

export default defineConfig({
scripts: [
{
name: "api",
script: "npm run start:api",
waitOn: ["tcp:$POSTGRESQL_PORT"],
},
],
});

Groups and aliases

Organize a larger stack into groups so you can start slices of it, and add aliases for convenience.

dev-pm.config.ts
import { defineConfig } from "dev-process-manager";

export default defineConfig({
scripts: [
{
name: "api",
script: "npm run start:api",
alias: "backend",
group: "server",
waitOn: ["tcp:5432"],
},
{
name: "worker",
script: "npm run start:worker",
group: "server",
waitOn: ["tcp:5432"],
},
{
name: "admin",
script: "npm run start:admin",
group: "frontend",
},
{
name: "site",
script: "npm run start:site",
group: "frontend",
},
],
});
dpm start @frontend # start admin + site
dpm restart backend # restart api via its alias
dpm stop @server # stop api + worker
dpm status -i 2 # watch the whole stack refresh every 2s

Per-process environment variables

Give one process its own environment values.

dev-pm.config.ts
import { defineConfig } from "dev-process-manager";

export default defineConfig({
scripts: [
{
name: "api",
script: "npm run start:api",
env: {
NODE_ENV: "development",
DEBUG: "app:*",
},
},
],
});

A full monorepo stack

A more complete example bringing several of the features together.

dev-pm.config.ts
import { defineConfig } from "dev-process-manager";

export default defineConfig({
scripts: [
{
name: "db",
script: "docker compose up postgres",
group: "infra",
},
{
name: "api",
script: "npm run start:api",
alias: "backend",
group: "server",
waitOn: ["tcp:$POSTGRESQL_PORT", "packages/api-client/lib/index.d.ts"],
env: { NODE_ENV: "development" },
},
{
name: "worker",
script: "npm run start:worker",
group: "server",
waitOn: ["tcp:$POSTGRESQL_PORT"],
},
{
name: "admin",
script: "npm run start:admin",
group: "frontend",
waitOn: ["tcp:$API_PORT"],
},
{
name: "site",
script: "npm run start:site",
group: "frontend",
waitOn: ["tcp:$API_PORT"],
},
],
});
# Bring the whole environment up
dpm start all

# Or work on just the frontend against an already-running backend
dpm start @server
dpm start @frontend --follow