
Monorepo Management
- 1 installs
- 404 repo stars
- Updated August 5, 2026
- aiskillstore/marketplace
monorepo-management is a Claude Code skill for setting up and optimizing monorepos using Turborepo, Nx, and pnpm workspaces.
About
monorepo-management is a Claude Code skill for building and maintaining monorepos with Turborepo, Nx, and pnpm workspaces. A developer uses it to set up workspace structure, configure build pipelines and caching, manage shared dependencies with workspace filters, and wire CI/CD for multi-package repos. It provides concrete config examples for turbo.json, nx.json, and pnpm-workspace.yaml.
- Sets up and optimizes monorepos with Turborepo, Nx, and pnpm workspaces
- Covers turbo.json pipelines, workspace filtering, and shared package structure
- Includes CI/CD and dependency-management strategies for multi-package repos
Monorepo Management by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,173 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
monorepo-management capabilities & compatibility
- Capabilities
- monorepo setup · build optimization · dependency management · ci cd setup
- Use cases
- devops · ci cd
- Pricing
- Free
What monorepo-management says it does
Master monorepo management with Turborepo, Nx, and pnpm workspaces to build efficient, scalable multi-package repositories with optimized builds and dependency management.
Setting up CI/CD for monorepos
npx skills add https://github.com/aiskillstore/marketplace --skill monorepo-managementAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 404 |
| Last updated | August 5, 2026 |
| Repository | aiskillstore/marketplace ↗ |
What it does
Set up and optimize Turborepo, Nx, or pnpm-workspace monorepos with shared packages and CI/CD.
Who is it for?
Developers building or migrating to a monorepo who need workspace, build-cache, and CI/CD setup.
Skip if: Single-package projects that do not need workspace tooling.
When should I use this skill?
You are setting up a monorepo, optimizing its builds, or managing shared dependencies.
What you get
A configured monorepo with optimized build pipelines, shared packages, and CI/CD.
- turbo.json pipeline config
- pnpm-workspace.yaml
- nx.json config
By the numbers
- Covers 3 build systems (Turborepo, Nx, Lerna) and 3 workspace managers (pnpm, npm, Yarn)
Files
Monorepo Management
Build efficient, scalable monorepos that enable code sharing, consistent tooling, and atomic changes across multiple packages and applications.
When to Use This Skill
- Setting up new monorepo projects
- Migrating from multi-repo to monorepo
- Optimizing build and test performance
- Managing shared dependencies
- Implementing code sharing strategies
- Setting up CI/CD for monorepos
- Versioning and publishing packages
- Debugging monorepo-specific issues
Core Concepts
1. Why Monorepos?
Advantages:
- Shared code and dependencies
- Atomic commits across projects
- Consistent tooling and standards
- Easier refactoring
- Simplified dependency management
- Better code visibility
Challenges:
- Build performance at scale
- CI/CD complexity
- Access control
- Large Git repository
2. Monorepo Tools
Package Managers:
- pnpm workspaces (recommended)
- npm workspaces
- Yarn workspaces
Build Systems:
- Turborepo (recommended for most)
- Nx (feature-rich, complex)
- Lerna (older, maintenance mode)
Turborepo Setup
Initial Setup
# Create new monorepo
npx create-turbo@latest my-monorepo
cd my-monorepo
# Structure:
# apps/
# web/ - Next.js app
# docs/ - Documentation site
# packages/
# ui/ - Shared UI components
# config/ - Shared configurations
# tsconfig/ - Shared TypeScript configs
# turbo.json - Turborepo configuration
# package.json - Root package.jsonConfiguration
// turbo.json
{
"$schema": "https://turbo.build/schema.json",
"globalDependencies": ["**/.env.*local"],
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**", "!.next/cache/**"]
},
"test": {
"dependsOn": ["build"],
"outputs": ["coverage/**"]
},
"lint": {
"outputs": []
},
"dev": {
"cache": false,
"persistent": true
},
"type-check": {
"dependsOn": ["^build"],
"outputs": []
}
}
}// package.json (root)
{
"name": "my-monorepo",
"private": true,
"workspaces": [
"apps/*",
"packages/*"
],
"scripts": {
"build": "turbo run build",
"dev": "turbo run dev",
"test": "turbo run test",
"lint": "turbo run lint",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
"clean": "turbo run clean && rm -rf node_modules"
},
"devDependencies": {
"turbo": "^1.10.0",
"prettier": "^3.0.0",
"typescript": "^5.0.0"
},
"packageManager": "pnpm@8.0.0"
}Package Structure
// packages/ui/package.json
{
"name": "@repo/ui",
"version": "0.0.0",
"private": true,
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": {
"import": "./dist/index.js",
"types": "./dist/index.d.ts"
},
"./button": {
"import": "./dist/button.js",
"types": "./dist/button.d.ts"
}
},
"scripts": {
"build": "tsup src/index.ts --format esm,cjs --dts",
"dev": "tsup src/index.ts --format esm,cjs --dts --watch",
"lint": "eslint src/",
"type-check": "tsc --noEmit"
},
"devDependencies": {
"@repo/tsconfig": "workspace:*",
"tsup": "^7.0.0",
"typescript": "^5.0.0"
},
"dependencies": {
"react": "^18.2.0"
}
}pnpm Workspaces
Setup
# pnpm-workspace.yaml
packages:
- 'apps/*'
- 'packages/*'
- 'tools/*'// .npmrc
# Hoist shared dependencies
shamefully-hoist=true
# Strict peer dependencies
auto-install-peers=true
strict-peer-dependencies=true
# Performance
store-dir=~/.pnpm-storeDependency Management
# Install dependency in specific package
pnpm add react --filter @repo/ui
pnpm add -D typescript --filter @repo/ui
# Install workspace dependency
pnpm add @repo/ui --filter web
# Install in all packages
pnpm add -D eslint -w
# Update all dependencies
pnpm update -r
# Remove dependency
pnpm remove react --filter @repo/uiScripts
# Run script in specific package
pnpm --filter web dev
pnpm --filter @repo/ui build
# Run in all packages
pnpm -r build
pnpm -r test
# Run in parallel
pnpm -r --parallel dev
# Filter by pattern
pnpm --filter "@repo/*" build
pnpm --filter "...web" build # Build web and dependenciesNx Monorepo
Setup
# Create Nx monorepo
npx create-nx-workspace@latest my-org
# Generate applications
nx generate @nx/react:app my-app
nx generate @nx/next:app my-next-app
# Generate libraries
nx generate @nx/react:lib ui-components
nx generate @nx/js:lib utilsConfiguration
// nx.json
{
"extends": "nx/presets/npm.json",
"$schema": "./node_modules/nx/schemas/nx-schema.json",
"targetDefaults": {
"build": {
"dependsOn": ["^build"],
"inputs": ["production", "^production"],
"cache": true
},
"test": {
"inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"],
"cache": true
},
"lint": {
"inputs": ["default", "{workspaceRoot}/.eslintrc.json"],
"cache": true
}
},
"namedInputs": {
"default": ["{projectRoot}/**/*", "sharedGlobals"],
"production": [
"default",
"!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
"!{projectRoot}/tsconfig.spec.json"
],
"sharedGlobals": []
}
}Running Tasks
# Run task for specific project
nx build my-app
nx test ui-components
nx lint utils
# Run for affected projects
nx affected:build
nx affected:test --base=main
# Visualize dependencies
nx graph
# Run in parallel
nx run-many --target=build --all --parallel=3Shared Configurations
TypeScript Configuration
// packages/tsconfig/base.json
{
"compilerOptions": {
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"module": "ESNext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"incremental": true,
"declaration": true
},
"exclude": ["node_modules"]
}
// packages/tsconfig/react.json
{
"extends": "./base.json",
"compilerOptions": {
"jsx": "react-jsx",
"lib": ["ES2022", "DOM", "DOM.Iterable"]
}
}
// apps/web/tsconfig.json
{
"extends": "@repo/tsconfig/react.json",
"compilerOptions": {
"outDir": "dist",
"rootDir": "src"
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}ESLint Configuration
// packages/config/eslint-preset.js
module.exports = {
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react/recommended',
'plugin:react-hooks/recommended',
'prettier',
],
plugins: ['@typescript-eslint', 'react', 'react-hooks'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2022,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
settings: {
react: {
version: 'detect',
},
},
rules: {
'@typescript-eslint/no-unused-vars': 'error',
'react/react-in-jsx-scope': 'off',
},
};
// apps/web/.eslintrc.js
module.exports = {
extends: ['@repo/config/eslint-preset'],
rules: {
// App-specific rules
},
};Code Sharing Patterns
Pattern 1: Shared UI Components
// packages/ui/src/button.tsx
import * as React from 'react';
export interface ButtonProps {
variant?: 'primary' | 'secondary';
children: React.ReactNode;
onClick?: () => void;
}
export function Button({ variant = 'primary', children, onClick }: ButtonProps) {
return (
<button
className={`btn btn-${variant}`}
onClick={onClick}
>
{children}
</button>
);
}
// packages/ui/src/index.ts
export { Button, type ButtonProps } from './button';
export { Input, type InputProps } from './input';
// apps/web/src/app.tsx
import { Button } from '@repo/ui';
export function App() {
return <Button variant="primary">Click me</Button>;
}Pattern 2: Shared Utilities
// packages/utils/src/string.ts
export function capitalize(str: string): string {
return str.charAt(0).toUpperCase() + str.slice(1);
}
export function truncate(str: string, length: number): string {
return str.length > length ? str.slice(0, length) + '...' : str;
}
// packages/utils/src/index.ts
export * from './string';
export * from './array';
export * from './date';
// Usage in apps
import { capitalize, truncate } from '@repo/utils';Pattern 3: Shared Types
// packages/types/src/user.ts
export interface User {
id: string;
email: string;
name: string;
role: 'admin' | 'user';
}
export interface CreateUserInput {
email: string;
name: string;
password: string;
}
// Used in both frontend and backend
import type { User, CreateUserInput } from '@repo/types';Build Optimization
Turborepo Caching
// turbo.json
{
"pipeline": {
"build": {
// Build depends on dependencies being built first
"dependsOn": ["^build"],
// Cache these outputs
"outputs": ["dist/**", ".next/**"],
// Cache based on these inputs (default: all files)
"inputs": ["src/**/*.tsx", "src/**/*.ts", "package.json"]
},
"test": {
// Run tests in parallel, don't depend on build
"cache": true,
"outputs": ["coverage/**"]
}
}
}Remote Caching
# Turborepo Remote Cache (Vercel)
npx turbo login
npx turbo link
# Custom remote cache
# turbo.json
{
"remoteCache": {
"signature": true,
"enabled": true
}
}CI/CD for Monorepos
GitHub Actions
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # For Nx affected commands
- uses: pnpm/action-setup@v2
with:
version: 8
- uses: actions/setup-node@v3
with:
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm turbo run build
- name: Test
run: pnpm turbo run test
- name: Lint
run: pnpm turbo run lint
- name: Type check
run: pnpm turbo run type-checkDeploy Affected Only
# Deploy only changed apps
- name: Deploy affected apps
run: |
if pnpm nx affected:apps --base=origin/main --head=HEAD | grep -q "web"; then
echo "Deploying web app"
pnpm --filter web deploy
fiBest Practices
1. Consistent Versioning: Lock dependency versions across workspace 2. Shared Configs: Centralize ESLint, TypeScript, Prettier configs 3. Dependency Graph: Keep it acyclic, avoid circular dependencies 4. Cache Effectively: Configure inputs/outputs correctly 5. Type Safety: Share types between frontend/backend 6. Testing Strategy: Unit tests in packages, E2E in apps 7. Documentation: README in each package 8. Release Strategy: Use changesets for versioning
Common Pitfalls
- Circular Dependencies: A depends on B, B depends on A
- Phantom Dependencies: Using deps not in package.json
- Incorrect Cache Inputs: Missing files in Turborepo inputs
- Over-Sharing: Sharing code that should be separate
- Under-Sharing: Duplicating code across packages
- Large Monorepos: Without proper tooling, builds slow down
Publishing Packages
# Using Changesets
pnpm add -Dw @changesets/cli
pnpm changeset init
# Create changeset
pnpm changeset
# Version packages
pnpm changeset version
# Publish
pnpm changeset publish# .github/workflows/release.yml
- name: Create Release Pull Request or Publish
uses: changesets/action@v1
with:
publish: pnpm release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}Resources
- references/turborepo-guide.md: Comprehensive Turborepo documentation
- references/nx-guide.md: Nx monorepo patterns
- references/pnpm-workspaces.md: pnpm workspace features
- assets/monorepo-checklist.md: Setup checklist
- assets/migration-guide.md: Multi-repo to monorepo migration
- scripts/dependency-graph.ts: Visualize package dependencies
{
"schema_version": "2.0",
"meta": {
"generated_at": "2026-01-17T08:29:44.128Z",
"slug": "wshobson-monorepo-management",
"source_url": "https://github.com/wshobson/agents/tree/main/plugins/developer-essentials/skills/monorepo-management",
"source_ref": "main",
"model": "claude",
"analysis_version": "3.0.0",
"source_type": "community",
"content_hash": "c911aba51fbc39da1c85f935d2adf88944756df971c7f86e627097c7d494cb95",
"tree_hash": "5e779dae45cacfaa4ce7f8522f66a09b98aed0d0d145b7856e05cf7cad9f9a9a"
},
"skill": {
"name": "monorepo-management",
"description": "Master monorepo management with Turborepo, Nx, and pnpm workspaces to build efficient, scalable multi-package repositories with optimized builds and dependency management. Use when setting up monorepos, optimizing builds, or managing shared dependencies.",
"summary": "Master monorepo management with Turborepo, Nx, and pnpm workspaces to build efficient, scalable mult...",
"icon": "🧱",
"version": "1.0.0",
"author": "wshobson",
"license": "MIT",
"category": "devops",
"tags": [
"monorepo",
"turborepo",
"nx",
"pnpm",
"workspaces"
],
"supported_tools": [
"claude",
"codex",
"claude-code"
],
"risk_factors": [
"network",
"external_commands",
"filesystem",
"env_access"
]
},
"security_audit": {
"risk_level": "safe",
"is_blocked": false,
"safe_to_publish": true,
"summary": "This skill contains purely educational documentation about monorepo tools. The SKILL.md file contains only instructional text, example commands, and configuration samples. No executable code, network calls, filesystem operations, or credential access exist. All static findings are FALSE POSITIVES caused by misidentifying bash code examples and JSON schema URLs as security-relevant patterns. The skill-report.json already correctly rated this skill as 'safe' in a prior audit.",
"risk_factor_evidence": [
{
"factor": "network",
"evidence": [
{
"file": "skill-report.json",
"line_start": 6,
"line_end": 6
},
{
"file": "SKILL.md",
"line_start": 77,
"line_end": 77
}
]
},
{
"factor": "external_commands",
"evidence": [
{
"file": "SKILL.md",
"line_start": 55,
"line_end": 70
},
{
"file": "SKILL.md",
"line_start": 70,
"line_end": 74
},
{
"file": "SKILL.md",
"line_start": 74,
"line_end": 101
},
{
"file": "SKILL.md",
"line_start": 101,
"line_end": 103
},
{
"file": "SKILL.md",
"line_start": 103,
"line_end": 127
},
{
"file": "SKILL.md",
"line_start": 127,
"line_end": 131
},
{
"file": "SKILL.md",
"line_start": 131,
"line_end": 164
},
{
"file": "SKILL.md",
"line_start": 164,
"line_end": 170
},
{
"file": "SKILL.md",
"line_start": 170,
"line_end": 176
},
{
"file": "SKILL.md",
"line_start": 176,
"line_end": 178
},
{
"file": "SKILL.md",
"line_start": 178,
"line_end": 189
},
{
"file": "SKILL.md",
"line_start": 189,
"line_end": 193
},
{
"file": "SKILL.md",
"line_start": 193,
"line_end": 209
},
{
"file": "SKILL.md",
"line_start": 209,
"line_end": 213
},
{
"file": "SKILL.md",
"line_start": 213,
"line_end": 228
},
{
"file": "SKILL.md",
"line_start": 228,
"line_end": 234
},
{
"file": "SKILL.md",
"line_start": 234,
"line_end": 245
},
{
"file": "SKILL.md",
"line_start": 245,
"line_end": 249
},
{
"file": "SKILL.md",
"line_start": 249,
"line_end": 279
},
{
"file": "SKILL.md",
"line_start": 279,
"line_end": 283
},
{
"file": "SKILL.md",
"line_start": 283,
"line_end": 298
},
{
"file": "SKILL.md",
"line_start": 298,
"line_end": 304
},
{
"file": "SKILL.md",
"line_start": 304,
"line_end": 341
},
{
"file": "SKILL.md",
"line_start": 341,
"line_end": 345
},
{
"file": "SKILL.md",
"line_start": 345,
"line_end": 382
},
{
"file": "SKILL.md",
"line_start": 382,
"line_end": 388
},
{
"file": "SKILL.md",
"line_start": 388,
"line_end": 401
},
{
"file": "SKILL.md",
"line_start": 401,
"line_end": 419
},
{
"file": "SKILL.md",
"line_start": 419,
"line_end": 423
},
{
"file": "SKILL.md",
"line_start": 423,
"line_end": 440
},
{
"file": "SKILL.md",
"line_start": 440,
"line_end": 444
},
{
"file": "SKILL.md",
"line_start": 444,
"line_end": 461
},
{
"file": "SKILL.md",
"line_start": 461,
"line_end": 467
},
{
"file": "SKILL.md",
"line_start": 467,
"line_end": 488
},
{
"file": "SKILL.md",
"line_start": 488,
"line_end": 492
},
{
"file": "SKILL.md",
"line_start": 492,
"line_end": 505
},
{
"file": "SKILL.md",
"line_start": 505,
"line_end": 511
},
{
"file": "SKILL.md",
"line_start": 511,
"line_end": 553
},
{
"file": "SKILL.md",
"line_start": 553,
"line_end": 557
},
{
"file": "SKILL.md",
"line_start": 557,
"line_end": 565
},
{
"file": "SKILL.md",
"line_start": 565,
"line_end": 589
},
{
"file": "SKILL.md",
"line_start": 589,
"line_end": 602
},
{
"file": "SKILL.md",
"line_start": 602,
"line_end": 604
},
{
"file": "SKILL.md",
"line_start": 604,
"line_end": 613
}
]
},
{
"factor": "filesystem",
"evidence": [
{
"file": "SKILL.md",
"line_start": 188,
"line_end": 188
},
{
"file": "SKILL.md",
"line_start": 78,
"line_end": 78
},
{
"file": "SKILL.md",
"line_start": 188,
"line_end": 188
},
{
"file": "SKILL.md",
"line_start": 265,
"line_end": 265
},
{
"file": "SKILL.md",
"line_start": 375,
"line_end": 375
}
]
},
{
"factor": "env_access",
"evidence": [
{
"file": "SKILL.md",
"line_start": 611,
"line_end": 611
},
{
"file": "SKILL.md",
"line_start": 611,
"line_end": 611
}
]
}
],
"critical_findings": [],
"high_findings": [],
"medium_findings": [],
"low_findings": [],
"dangerous_patterns": [],
"files_scanned": 2,
"total_lines": 799,
"audit_model": "claude",
"audited_at": "2026-01-17T08:29:44.128Z"
},
"content": {
"user_title": "Build scalable monorepo workflows",
"value_statement": "Coordinating builds and dependencies across many packages is hard. This skill provides monorepo setups and practices for Turborepo, Nx, and pnpm to streamline builds and sharing.",
"seo_keywords": [
"monorepo management",
"Turborepo setup",
"Nx workspace",
"pnpm workspaces",
"CI for monorepos",
"Claude",
"Codex",
"Claude Code",
"shared configs",
"build optimization"
],
"actual_capabilities": [
"Provide Turborepo setup steps and example turbo.json pipeline configuration",
"Explain pnpm workspace layout and dependency commands",
"Outline Nx workspace creation and affected commands",
"Show shared TypeScript and ESLint configuration patterns",
"Describe CI workflows for build, test, lint, and type checks"
],
"limitations": [
"Does not run commands or modify repositories",
"Does not validate tool versions or compatibility in your repo",
"Does not generate project files beyond examples",
"Does not analyze build logs or runtime errors"
],
"use_cases": [
{
"target_user": "frontend lead",
"title": "Unify apps and packages",
"description": "Plan a shared UI and config structure for multiple web apps in one repository."
},
{
"target_user": "devops engineer",
"title": "Speed up CI",
"description": "Design caching and affected builds to reduce build and test time."
},
{
"target_user": "platform team",
"title": "Standardize tooling",
"description": "Define shared TypeScript and ESLint presets for all packages."
}
],
"prompt_templates": [
{
"title": "Monorepo starter",
"scenario": "New monorepo from scratch",
"prompt": "Create a starter plan for a pnpm workspace with apps and packages, plus a basic turbo.json pipeline."
},
{
"title": "Migration plan",
"scenario": "Move from multi repo to Nx",
"prompt": "Outline a migration plan to Nx with key steps, required config files, and risks to monitor."
},
{
"title": "Cache tuning",
"scenario": "Slow builds in Turborepo",
"prompt": "Propose cache inputs and outputs for build and test tasks to reduce run time."
},
{
"title": "CI workflow design",
"scenario": "GitHub Actions for monorepo",
"prompt": "Draft a CI workflow for lint, test, build, and type check with pnpm and Turborepo."
}
],
"output_examples": [
{
"input": "Plan a pnpm monorepo for a web app, docs site, and shared UI package.",
"output": [
"Suggested folder layout with apps and packages",
"Root scripts for build, test, and lint using Turborepo",
"Shared config package for TypeScript and ESLint",
"pnpm workspace entries for apps and packages"
]
}
],
"best_practices": [
"Centralize shared configs for TypeScript, ESLint, and Prettier",
"Define cache inputs and outputs for each build task",
"Keep the dependency graph acyclic and documented"
],
"anti_patterns": [
"Using dependencies not declared in package.json",
"Creating circular dependencies between packages",
"Caching build outputs without correct inputs"
],
"faq": [
{
"question": "Is this compatible with Turborepo and Nx?",
"answer": "Yes. It provides setup and workflows for both tools with pnpm workspaces."
},
{
"question": "What are the limits of this skill?",
"answer": "It provides guidance and examples only and does not execute commands or edit files."
},
{
"question": "Can it integrate with existing CI?",
"answer": "Yes. It outlines GitHub Actions steps that you can adapt to your pipeline."
},
{
"question": "Does it access my data or credentials?",
"answer": "No. It contains instructional content only and does not read files or secrets."
},
{
"question": "What if my builds are still slow?",
"answer": "Review cache inputs and outputs and use affected builds to limit scope."
},
{
"question": "How does it compare to generic monorepo advice?",
"answer": "It is tool specific with Turborepo, Nx, and pnpm focused examples."
}
]
},
"file_structure": [
{
"name": "SKILL.md",
"type": "file",
"path": "SKILL.md",
"lines": 623
}
]
}
Related skills
FAQ
Which monorepo tools does it cover?
Package managers (pnpm, npm, Yarn workspaces) and build systems (Turborepo recommended for most, Nx, and Lerna in maintenance mode).
Does it help with CI/CD?
Yes, it covers setting up CI/CD for monorepos alongside build and test performance optimization.