Monorepo
A single version-controlled repository that holds multiple related projects — apps, packages, services — managed with shared tooling.
· Reviewed by senior engineers
A monorepo is a single git repository containing many projects that would traditionally live in separate repos: a web app, a mobile app, a design system, a few internal libraries, a handful of services. Tools like Turborepo, Nx, pnpm workspaces and Bazel make the pattern practical at any scale.
The wins are atomic changes and shared tooling. Renaming a function in the design system and updating every consumer happens in one pull request. Lint, type-check and test configurations are defined once. New engineers clone one repo and run one install. Refactors that would terrify across ten repos become routine.
The costs are CI time, repo size and team-level access control. A naive monorepo runs every test on every change and quickly becomes painful; the fix is task graphs and remote caching, which add operational complexity. Permissions become coarser — everyone with repo access can read every project — which matters for some organisations.
We use monorepos for almost every client engagement with more than two deployables. The atomic-change story alone pays for the setup cost within weeks, and the tooling has matured to the point where the pain points of five years ago are largely gone.
Examples
- Turborepo
- Nx
- pnpm workspaces
- Bazel
