
Monorepo Management
- 361 installs
- 305 repo stars
- Updated March 4, 2026
- aj-geddes/useful-ai-prompts
monorepo-management is a Claude Code skill that configures Lerna, Turborepo, and Nx workspaces with dependency versioning and cross-package testing for developers who run multi-package JavaScript or TypeScript codebases.
About
A developer tool for AI integration and automation. This is a developer tool for building and integrating AI-powered features.
- AI
- Developer tool
Monorepo Management by the numbers
- 361 all-time installs (skills.sh)
- Ranked #2,099 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill monorepo-managementAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 361 |
|---|---|
| repo stars | ★ 305 |
| Last updated | March 4, 2026 |
| Repository | aj-geddes/useful-ai-prompts ↗ |
How do you set up a JavaScript monorepo?
For integrating A developer tool for AI integration and automation
Who is it for?
Backend and full-stack developers standardizing builds across multiple interdependent npm packages in one repository.
Skip if: Single-package repositories or teams that only need a polyrepo with no shared workspace tooling.
When should I use this skill?
A developer asks to add Lerna, Turborepo, or Nx, configure npm workspaces, or fix cross-package dependency and CI build issues.
What you get
Root workspace package.json, packages/apps directory layout, Lerna or Turborepo config, workspace dependency rules, and CI/CD monorepo reference patterns.
- workspace package.json
- monorepo directory layout
- CI/CD monorepo patterns
By the numbers
- Includes 7 reference guides for monorepo structure, tooling, and CI/CD
- Documents Lerna, Turborepo, and Nx alongside npm workspaces
Files
Monorepo Management
Table of Contents
Overview
Establish scalable monorepo structures that support multiple interdependent packages while maintaining build efficiency, dependency management, and deployment coordination.
When to Use
- Multi-package projects
- Shared libraries across services
- Microservices architecture
- Plugin-based systems
- Multi-app platforms (web + mobile)
- Workspace dependency management
- Scaled team development
Quick Start
Minimal working example:
{
"name": "monorepo-root",
"version": "1.0.0",
"private": true,
"workspaces": ["packages/*", "apps/*"],
"devDependencies": {
"lerna": "^7.0.0",
"turbo": "^1.10.0"
},
"scripts": {
"lint": "npm run lint -r",
"test": "npm run test -r",
"build": "npm run build -r",
"clean": "npm run clean -r"
}
}Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| Npm Workspaces Configuration | Npm Workspaces Configuration, Lerna Configuration, Turborepo Configuration, Nx Workspace Configuration |
| Monorepo Directory Structure | Monorepo Directory Structure |
| Workspace Dependencies | Workspace Dependencies |
| Lerna Commands | Lerna Commands |
| Turborepo Commands | Turborepo Commands |
| CI/CD for Monorepo | CI/CD for Monorepo |
| Version Management Across Packages | Version Management Across Packages |
Best Practices
✅ DO
- Use workspace protocols for dependencies
- Implement shared tsconfig for consistency
- Cache build outputs in CI/CD
- Filter packages in CI to avoid unnecessary builds
- Hoist common dependencies
- Document workspace structure
- Use consistent versioning strategy
- Implement pre-commit hooks across workspace
- Test cross-package dependencies
- Version packages independently when appropriate
❌ DON'T
- Create circular dependencies
- Use hardcoded versions for workspace packages
- Build all packages when only one changed
- Forget to update lock files
- Ignore workspace boundaries
- Create tightly coupled packages
- Skip dependency management
- Use different tooling per package
CI/CD for Monorepo
CI/CD for Monorepo
# .github/workflows/monorepo-ci.yml
name: Monorepo CI
on: [push, pull_request]
jobs:
affected:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-node@v3
with:
node-version: "18"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Get changed packages
id: changed
run: |
npx lerna changed --json > changed.json
echo "packages=$(cat changed.json | jq -r '.[].name')" >> $GITHUB_OUTPUT
- name: Build changed
run: npx turbo run build --filter='${{ steps.changed.outputs.packages }}'
- name: Test changed
run: npx turbo run test --filter='${{ steps.changed.outputs.packages }}'
- name: Lint changed
run: npx turbo run lint --filter='${{ steps.changed.outputs.packages }}'Lerna Commands
Lerna Commands
# Bootstrap packages and install dependencies
lerna bootstrap
# Install dependencies and hoist common ones
lerna bootstrap --hoist
# Create a new version
lerna version --conventional-commits
# Publish all changed packages
lerna publish from-git
# Run command across all packages
lerna exec -- npm run build
# Run command in parallel
lerna exec --parallel -- npm run test
# List all packages
lerna list
# Show graph of dependencies
lerna graph
# Run script across specific packages
lerna run build --scope="@myorg/core" --include-dependentsMonorepo Directory Structure
Monorepo Directory Structure
monorepo/
├── packages/
│ ├── core/
│ │ ├── src/
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── utils/
│ │ ├── src/
│ │ ├── package.json
│ │ └── tsconfig.json
│ └── shared/
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── apps/
│ ├── web/
│ │ ├── pages/
│ │ ├── package.json
│ │ └── next.config.js
│ ├── api/
│ │ ├── src/
│ │ ├── package.json
│ │ └── tsconfig.json
│ └── mobile/
│ ├── src/
│ ├── package.json
│ └── app.json
├── tools/
│ ├── scripts/
│ └── generators/
├── lerna.json
├── turbo.json
├── nx.json
├── package.json
├── tsconfig.json
└── .github/workflows/Npm Workspaces Configuration
Npm Workspaces Configuration
{
"name": "monorepo-root",
"version": "1.0.0",
"private": true,
"workspaces": ["packages/*", "apps/*"],
"devDependencies": {
"lerna": "^7.0.0",
"turbo": "^1.10.0"
},
"scripts": {
"lint": "npm run lint -r",
"test": "npm run test -r",
"build": "npm run build -r",
"clean": "npm run clean -r"
}
}Lerna Configuration
{
"name": "monorepo-with-lerna",
"version": "1.0.0",
"private": true,
"packages": ["packages/*", "apps/*"],
"command": {
"bootstrap": {
"hoist": true,
"ignore": "@myorg/infra"
},
"publish": {
"conventionalCommits": true,
"createRelease": "github",
"message": "chore(release): publish"
}
}
}Turborepo Configuration
{
"turbo": {
"globalDependencies": ["tsconfig.json"],
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**"],
"cache": true
},
"test": {
"dependsOn": ["^build"],
"cache": true,
"outputs": ["coverage/**"]
},
"lint": {
"outputs": []
},
"dev": {
"cache": false,
"persistent": true
}
}
}
}Nx Workspace Configuration
{
"version": 2,
"projectNameAndRootFormat": "as-provided",
"plugins": ["@nx/next/plugin", "@nx/react/plugin", "@nx/node/plugin"],
"targetDefaults": {
"build": {
"cache": true,
"inputs": ["production", "^production"]
},
"test": {
"cache": true,
"inputs": ["default", "^production"]
}
}
}Turborepo Commands
Turborepo Commands
# Build all packages with dependency order
turbo run build
# Build with specific filters
turbo run build --filter=web --filter=api
# Build excluding certain packages
turbo run build --filter='!./apps/mobile'
# Run tests with caching
turbo run test --cache-dir=.turbo
# Run in development mode (no cache)
turbo run dev --parallel
# Show execution graph
turbo run build --graph
# Profile build times
turbo run build --profile=profile.jsonVersion Management Across Packages
Version Management Across Packages
#!/bin/bash
# sync-versions.sh
# Use lerna to keep versions in sync
lerna version --exact --force-publish
# Or manually sync package.json versions
MONOREPO_VERSION=$(jq -r '.version' package.json)
for package in packages/*/package.json; do
jq --arg version "$MONOREPO_VERSION" '.version = $version' "$package" > "$package.tmp"
mv "$package.tmp" "$package"
done
echo "✅ All packages synced to version $MONOREPO_VERSION"Workspace Dependencies
Workspace Dependencies
{
"name": "@myorg/web-app",
"version": "1.0.0",
"dependencies": {
"@myorg/core": "workspace:*",
"@myorg/shared-ui": "workspace:^",
"@myorg/utils": "workspace:~"
},
"devDependencies": {
"@myorg/test-utils": "workspace:*"
}
}#!/bin/bash
# validate-pipeline.sh - Validate CI/CD pipeline configuration
# Usage: ./validate-pipeline.sh <pipeline_file>
set -euo pipefail
PIPELINE_FILE="${{1:?Usage: $0 <pipeline_file>}}"
echo "Validating pipeline: $PIPELINE_FILE"
# TODO: Add pipeline validation
# - Check YAML/Groovy syntax
# - Verify stage dependencies
# - Check for required stages (build, test, deploy)
# - Validate environment variable references
# - Check for security best practices
echo "Pipeline validation complete."
# CI/CD Pipeline Starter Template
# TODO: Customize for your CI/CD platform (GitHub Actions, GitLab CI, Jenkins, etc.)
name: CI/CD Pipeline
# TODO: Configure triggers
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# TODO: Add build steps
test:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
# TODO: Add test steps
deploy:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/main'
steps:
# TODO: Add deployment steps
- run: echo "Deploy to production"
Related skills
How it compares
Pick monorepo-management when you need workspace tooling setup guidance rather than a single-app framework scaffold.
FAQ
Which monorepo tools does monorepo-management cover?
monorepo-management covers npm workspaces, Lerna, Turborepo, and Nx. The skill ships seven reference guides for directory structure, workspace dependencies, tool-specific commands, CI/CD filtering, and cross-package version management.
When should developers use monorepo-management?
monorepo-management fits multi-package projects with shared libraries, microservices, plugin systems, or web-plus-mobile apps in one repo. Activate it when setting up workspaces, dependency graphs, or standardized build scripts across packages.