One repo, many projects, clear rules
A monorepo only stays pleasant if everyone follows the same structure and conventions. This builder generates the guide that makes that happen: a labeled directory tree, the config for your chosen tool, how shared packages are referenced, your versioning strategy, and a CI/CD outline. Commit it at the repo root and new contributors know where everything goes.
How it works
You name the organization and package scope (like @acme), then list your apps and shared packages. The tool renders a directory tree with apps/* for deployable applications and packages/* for internal libraries, and shows how an app depends on a package using the workspace protocol ("@acme/ui": "workspace:*") so apps always use the local source.
It then emits tool-specific configuration for your choice — a turbo.json task pipeline, an Nx note, a Lerna note, or a pnpm-workspace.yaml. The versioning section explains the trade-off between fixed and independent releases, and the CI/CD outline describes the install-frozen-lockfile, lint, test, build, and deploy steps a pipeline should run.
Tips and example
- Keep the apps/packages split strict. If an “app” is being imported by another app, it is really a package — move it.
- Use the workspace protocol everywhere internally so a change to a shared package is reflected instantly, with no publish step in development.
- Run affected-only tasks in CI (
turbo runwith caching, ornx affected) so a one-line change does not rebuild the entire repo. - Pin shared tool versions — Node in
.nvmrc, the package manager inpackage.jsonengines — so every machine and CI runner behaves identically.