Polyrepo to Monorepo Migration:
A Step-by-Step Playbook for 2026
The 8-step migration playbook, tool-specific notes, real migration stories from Proton and Cash App, and common failure modes. Year-stamped for 2026 tooling.
The 8-Step Playbook
Real Migration Stories
Proton (web stack)
Saturday cutover. 1-2 weeks to stabilise.
Proton's web engineering team moved their polyrepo web codebase to a monorepo in a single weekend. Bounded scope (web only), JS/TypeScript stack, and thorough preparation made the weekend cutover possible.
proton.me/blog →Cash App / Block
~450 JVM services. Multi-quarter. ~2 years to full win.
Block consolidated approximately 450 JVM services (Java/Kotlin) into a Bazel-based monorepo. The cutover was multi-quarter. The full productivity win took approximately two years. This is the honest benchmark for large-scale JVM monorepo migration.
engineering.block.xyz →Common Failure Modes
Lost git history
Fix: Use git subtree or git filter-repo. Test history preservation on one repo before running at scale.
Broken CI for 2+ weeks post-cutover
Fix: Build and validate the unified CI pipeline on peripheral repos before cutting over core repos.
Unowned services in the merge
Fix: The inventory step (step 02) must include an owner for every repo. No owner = don't migrate it yet.
Circular dependencies discovered mid-migration
Fix: Run nx graph or similar dep analysis before starting. Circular deps block the monorepo's affected algorithm.
Tool chosen after migration started
Fix: Tool choice comes first (step 01). Changing tools mid-migration is a full restart.