Monorepo Dependency Checker
Analyze monorepo dependency graphs for version conflicts, circular imports, unnecessary coupling, and package boundary violations. Works with Nx, Turborepo, Lerna, pnpm workspaces, and npm workspaces.
Usage
"Check my monorepo for dependency issues"
"Find circular dependencies between packages"
"Audit version consistency across workspaces"
"Analyze package boundaries in my monorepo"
How It Works
1. Workspace Discovery
# Detect monorepo tool
cat nx.json 2>/dev/null && echo "Nx workspace"
cat turbo.json 2>/dev/null && echo "Turborepo"
cat lerna.json 2>/dev/null && echo "Lerna"
cat pnpm-workspace.yaml 2>/dev/null && echo "pnpm workspace"
# List all packages
find . -name "package.json" -not -path "*/node_modules/*" -maxdepth 3
2. Dependency Graph
Build the internal dependency graph:
- Which packages depend on which
- Direct vs transitive dependencies
- Shared dependencies across packages
- External dependency versions
3. Issue Detection
Circular dependencies:
- Package A → B → C → A (cycle)
- Impact: build ordering issues, bundle size, testing complexity
- Fix: extract shared code into new package or restructure
Version conflicts:
- Different versions of same external dep across packages
- Peer dependency mismatches
- Lockfile inconsistencies
Unnecessary coupling:
- Packages importing from other packages' internals
- Shared state between packages that should be independent
- Test utilities leaking into production bundles
Boundary violations:
- UI packages importing from backend packages
- Feature packages depending on other features (should go through shared)
- Missing package.json exports field
4. Architecture Recommendations
- Layered architecture: shared → domain → feature → app
- Proper barrel exports (index.ts) in each package
- Build order optimization
- Affected/changed package detection for CI
- Package extraction candidates (frequently co-changed files)
Output
## Monorepo Dependency Analysis
**Tool:** Turborepo | **Packages:** 12 | **Workspace:** pnpm
### Dependency Graph
app-web → ui, api-client, config, types app-mobile → ui, api-client, config, types api-server → database, config, types, utils ui → types, config api-client → types database → types, config
### 🔴 Circular Dependencies (1)
- utils → database → utils
utils/logger imports database/connection for query logging
→ Extract logging config to `config` package
### 🟡 Version Conflicts (3)
| Package | Versions | Location |
|---------|----------|----------|
| react | 18.2, 18.3 | app-web vs ui |
| zod | 3.22, 3.23 | api-server vs types |
| typescript | 5.3, 5.4, 5.5 | various |
### 📊 Package Health
| Package | Internal Deps | External Deps | Build Order | Issues |
|---------|--------------|---------------|-------------|--------|
| types | 0 | 1 | 1 | ✅ |
| config | 1 | 3 | 2 | ✅ |
| utils | 2 | 5 | 3 | 🔴 circular |
| ui | 2 | 12 | 4 | 🟡 version |
| database | 2 | 4 | 3 | 🔴 circular |
### ✅ Good Practices
- Clean layered architecture (types → config → domain → app)
- Proper exports field in all package.json files
- Shared tsconfig.base.json with package-level extends
- Turborepo pipeline configured for incremental builds