octorepo scaffolds a Node/TypeScript monorepo with as many frontends and backends as you need, plus typed API clients between them, shared packages, Docker Compose and CI. Add more apps later without touching your own code.
Every backend publishes an OpenAPI spec. Every frontend gets a typed client for each backend listed in its uses.
Choose your tool. octorepo writes turbo.json or nx.json, the pnpm workspace and the task pipelines.
Postgres, Redis and every app in one docker-compose.yml. Each app ships with its own Dockerfile.
Shared types and zod schemas, tsconfig bases and React UI components, linked into every app.
GitHub Actions workflows. On Nx, CI builds only what's affected compared with origin/main.
Every package has build, dev, lint, typecheck and test. Biome handles lint and format.
Run octorepo add app from the root of a generated repo. It regenerates only the files octorepo owns: the root package.json merge, workspace file, tool config, compose file, clients and src/generated/**.
It never rewrites your own code. It refuses to overwrite existing directories, and your values win over its defaults.
# a new backend $ octorepo add app backend billing nest # a new frontend that talks to two backends $ octorepo add app frontend admin react-vite \ --uses api,billing # or describe the whole stack as JSON $ octorepo create my-repo --config stack.json --yes --json
Requires Node 22 or later and pnpm.
Run it in a terminal without flags and octorepo asks you for the stack, one question at a time.