Rush is Microsoft's answer to monorepo hell. If you've ever tried managing 200+ packages in one repo with npm workspaces, you know the pain - phantom dependencies, inconsistent installs, builds that work on your machine but break in CI. Microsoft built Rush because their massive repos were driving developers insane.
Current version is solid with PNPM, though I ran into some nasty CI crashes with Rush 5.131.x that took me a week to debug - turned out to be a config file caching issue, not the code I thought was broken. Microsoft uses it for OneDrive, SharePoint, and other massive products with hundreds of packages, but they also have unlimited DevOps budgets.
Core Architecture
Rush fixes three massive monorepo headaches:
Dependency Hell: PNPM prevents the nightmare where packages accidentally import dependencies they didn't declare. No more "works on my machine" because someone forgot to add express to package.json but it was available through a transitive dependency. PNPM hard-links everything so each package only sees what it actually declares. Fair warning - this will break half your existing npm scripts that assume flat node_modules. I spent 2 days fixing our test runner because it couldn't find jest configs in the wrong directory structure.
Build Coordination: Rush doesn't replace your build tools - it runs them in the right order. It figures out which packages changed, builds dependencies first, and parallelizes everything that can run simultaneously. Our builds went from like 40-something minutes to maybe 10-15 minutes for typical changes, but full rebuilds still take forever and incremental builds can be flaky if you change shared utilities.
Policy Enforcement: Rush stops developers from breaking stuff accidentally. It enforces consistent dependency versions (no more "why does package A use React 17 but package B uses React 18?"), requires changelogs for releases, and validates your entire dependency graph.
Real-World Adoption
Microsoft eats its own dog food - they use Rush for their biggest products:
- OneDrive: 300+ packages for web client and sync apps
- SharePoint: Web framework with hundreds of interdependent packages
- Office 365: Admin tools and web applications
- Windows Store: Commerce platform spanning multiple teams
Though honestly, Microsoft can afford to have dedicated build engineers tweaking this stuff full-time.
These aren't toy examples - we're talking 100-500+ packages each with thousands of dependencies. The rushstack repo itself has over 200 packages and builds fine. If it works for Microsoft's largest properties, it'll probably work for your 50-package monorepo.
Technical Foundation
You need Node.js LTS - stick to Node 18 LTS. I've had better luck with it than Node 20, which gave me some annoying symlink headaches, though that might just be our specific setup being picky. Installation takes 30 seconds:
npm install -g @microsoft/rush
Windows users: good luck, you'll hit PATH length limits with the deep node_modules nesting. Windows 10 has a 260-character limit that PNPM's symlinks will blow past. Enable long paths in group policy or prepare for "ENOENT" errors that make no sense.
The "integrates seamlessly" part is bullshit though. Expect to spend a weekend rewriting your CI scripts, package.json files, and build processes. Rush config lives in JSON files that you'll curse at for the first month until you understand the dependency graph syntax. Budget 3 days for initial setup, not the "few hours" they claim in the docs. I spent 6 hours just getting PNPM to not break our Jest configs.
Rush plays nice with old projects but you'll probably want to modernize your build setup anyway. The config files are declarative JSON that goes in version control - at least you can review changes to your build system instead of wondering why CI suddenly broke.
Anyway, here's how it stacks up against other monorepo tools.