turborepo-monorepo
giuseppe-trisciuoglio/developer-kit
Comprehensive Turborepo monorepo management for TypeScript/JavaScript projects with workspace setup, task configuration, and CI/CD optimization.
What is turborepo-monorepo?
Provides guidance for creating and managing Turborepo workspaces, configuring task pipelines, integrating Next.js/NestJS, setting up testing with Vitest/Jest, and implementing remote caching. Use when initializing monorepos, optimizing build performance, configuring CI/CD workflows, or debugging task dependencies.
- Create and initialize Turborepo workspaces with turbo.json configuration
- Configure task dependencies, outputs, and caching strategies for build pipelines
- Integrate Next.js and NestJS applications within monorepo structure
- Set up testing pipelines with Vitest/Jest and manage test outputs
- Implement remote caching with Vercel Remote Cache for team/CI optimization
- Debug task execution order, cache misses, and dependency issues
How to install turborepo-monorepo
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill turborepo-monorepo- pnpm (or npm/yarn) package manager
- Node.js 16+
- Existing TypeScript/JavaScript project or new workspace
How to use turborepo-monorepo
- 1.Create a new workspace with `pnpm create turbo@latest` or add turbo to existing project with `pnpm add -D -w turbo`
- 2.Create turbo.json in root with pipeline tasks defining dependsOn, outputs, and cache settings
- 3.Add workspace scripts to root package.json (build, dev, lint, test, clean)
- 4.Configure framework-specific settings: Next.js outputs `.next/**`, NestJS outputs `dist/**`
- 5.Set up testing configuration in turbo.json with test task dependencies and coverage outputs
- 6.Validate task graph with `turbo run build --dry-run` before committing
- 7.Configure CI/CD (GitHub Actions) with affected package filtering `--filter=[HEAD^]`
- 8.Enable remote caching with `npx turbo login` and `npx turbo link` for team collaboration
Use cases
- Initialize a new Turborepo workspace with multiple framework apps (Next.js, NestJS)
- Configure turbo.json tasks with proper dependency ordering and cache outputs
- Set up GitHub Actions CI/CD with affected package filtering and cache validation
- Implement Vitest testing pipeline with coverage outputs and watch mode
- Migrate existing monorepo to Turborepo with optimized task configuration
- Full-stack developers managing TypeScript/JavaScript monorepos
- DevOps engineers setting up CI/CD pipelines for monorepo projects
- Teams using Next.js and NestJS in a shared workspace
- Developers optimizing build times and cache hit ratios
turborepo-monorepo FAQ
dependsOn specifies which tasks must complete first (task ordering), while outputs defines which files/folders to cache for that task. For example, build might have dependsOn: ["^build"] and outputs: ["dist/**"].
Use the filter syntax with HEAD comparison: `turbo run test --filter=[HEAD^]`. This runs tests only for packages changed since the last commit.
Check globalDependencies and inputs configuration. Cache invalidates if files affecting the task change. Exclude non-essential files like README.md with `inputs: ["$TURBO_DEFAULT$", "!*.md"]`.
Yes. Set `cache: false` and `persistent: true` for long-running tasks like dev servers to prevent caching issues and allow continuous rebuilds.
Run `npx turbo login` to authenticate with Vercel, then `npx turbo link` to connect your repository. Remote cache is then shared across team members and CI/CD pipelines.
Full instructions (SKILL.md)
Source of truth, from giuseppe-trisciuoglio/developer-kit.
name: turborepo-monorepo description: Provides comprehensive Turborepo monorepo management guidance for TypeScript/JavaScript projects. Use when creating Turborepo workspaces, configuring turbo.json tasks, setting up Next.js/NestJS apps, managing test pipelines (Vitest/Jest), configuring CI/CD, implementing remote caching, or optimizing build performance in monorepos allowed-tools: Read, Write, Edit, Bash, Glob, Grep
Turborepo Monorepo
Overview
Provides guidance for Turborepo monorepo management: workspace creation, turbo.json task configuration, Next.js/NestJS integration, testing pipelines (Vitest/Jest), CI/CD setup, and build performance optimization.
When to Use
- Create or initialize Turborepo workspaces
- Configure
turbo.jsontasks with dependencies and outputs - Set up Next.js/NestJS apps in monorepo structure
- Configure Vitest/Jest test pipelines
- Build CI/CD workflows (GitHub Actions, GitLab CI)
- Implement remote caching with Vercel Remote Cache
- Optimize build times and cache hit ratios
- Debug task dependency or cache issues
- Migrate from other monorepo tools to Turborepo
Instructions
Workspace Creation
-
Create a new workspace:
pnpm create turbo@latest my-workspace cd my-workspace -
Initialize in existing project:
pnpm add -D -w turbo -
Create turbo.json in root (minimal config):
{ "$schema": "https://turborepo.dev/schema.json", "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**", ".next/**"] }, "lint": { "outputs": [] }, "test": { "dependsOn": ["build"], "outputs": ["coverage/**"] } } } -
Add scripts to root package.json:
{ "scripts": { "build": "turbo run build", "dev": "turbo run dev", "lint": "turbo run lint", "test": "turbo run test", "clean": "turbo run clean" } } -
Validate task graph before CI:
turbo run build --dry-run --filter=... # Verify task execution order
Task Configuration
-
Configure tasks in
turbo.json:{ "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }, "test": { "dependsOn": ["build"], "outputs": ["coverage/**"] }, "lint": { "outputs": [] } } } -
Run tasks:
turbo run build # All packages turbo run lint test build # Multiple tasks turbo run build --filter=web # Specific package -
Parallel type checking (use transit nodes to avoid cache issues):
{ "pipeline": { "transit": { "dependsOn": ["^transit"] }, "typecheck": { "dependsOn": ["transit"] } } } -
Validate before committing:
turbo run build --dry-run # Check task order and affected packages
Framework Integration
Next.js: outputs ".next/**" and env ["NEXT_PUBLIC_*"] - See references/nextjs-config.md
NestJS: outputs "dist/**", dev tasks with cache: false, persistent: true - See references/nestjs-config.md
Testing Setup
-
Vitest configuration:
{ "pipeline": { "test": { "outputs": [], "inputs": ["$TURBO_DEFAULT$", "vitest.config.ts"] }, "test:watch": { "cache": false, "persistent": true } } } -
Run affected tests:
turbo run test --filter=[HEAD^]See references/testing-config.md for complete testing setup.
Package Configurations
- Create package-specific turbo.json:
See references/package-configs.md for detailed package configuration patterns.{ "extends": ["//"], "tasks": { "build": { "outputs": ["$TURBO_EXTENDS$", ".next/**"] } } }
CI/CD Setup
-
GitHub Actions with validation checkpoints:
- name: Install dependencies run: pnpm install - name: Validate affected packages (dry-run) run: pnpm turbo run build --filter=[HEAD^] --dry-run # VALIDATE: Review output to confirm only expected packages will build - name: Run tests run: pnpm run test --filter=[HEAD^] - name: Build affected packages run: pnpm run build --filter=[HEAD^] - name: Verify cache hits run: pnpm turbo run build --filter=[HEAD^] --dry-run | grep "Cache" # VALIDATE: Confirm cache hits for unchanged packages -
Remote cache setup:
# Login to Vercel npx turbo login # Link repository npx turbo linkSee references/ci-cd.md for complete CI/CD setup examples.
Task Properties Reference
| Property | Description | Example |
|---|---|---|
dependsOn | Tasks that must complete first | ["^build"] - dependencies first |
outputs | Files/folders to cache | ["dist/**"] |
inputs | Files for cache hash | ["src/**/*.ts"] |
env | Environment variables affecting hash | ["DATABASE_URL"] |
cache | Enable/disable caching | true or false |
persistent | Long-running task | true for dev servers |
outputLogs | Log verbosity | "full", "new-only", "errors-only" |
Dependency Patterns
^task- Run task in dependencies first (topological order)task- Run task in same package firstpackage#task- Run specific package's task
Filter Syntax
| Filter | Description |
|---|---|
web | Only web package |
web... | web + all dependencies |
...web | web + all dependents |
...web... | web + deps + dependents |
[HEAD^] | Packages changed since last commit |
./apps/* | All packages in apps/ |
Best Practices
Performance Optimization
- Use specific outputs - Only cache what's needed
- Fine-tune inputs - Exclude files that don't affect output
- Transit nodes - Enable parallel type checking
- Remote cache - Share cache across team/CI
- Package configurations - Customize per-package behavior
Caching Strategy
{
"pipeline": {
"build": {
"outputs": ["dist/**"],
"inputs": ["$TURBO_DEFAULT$", "!README.md", "!**/*.md"]
}
}
}
Task Organization
- Independent tasks - No
dependsOn: lint, format, spellcheck - Build tasks -
dependsOn: ["^build"]: build, compile - Test tasks -
dependsOn: ["build"]: test, e2e - Dev tasks -
cache: false, persistent: true: dev, watch
Common Issues
Tasks not running in order
Problem: Tasks execute in wrong order
Solution: Check dependsOn configuration
{
"build": {
"dependsOn": ["^build"]
}
}
Cache misses on unchanged files
Problem: Cache invalidating unexpectedly
Solution: Review globalDependencies and inputs
{
"globalDependencies": ["tsconfig.json"],
"pipeline": {
"build": {
"inputs": ["$TURBO_DEFAULT$", "!*.md"]
}
}
}
Type errors after cache hit
Problem: TypeScript errors not caught due to cache
Solution: Use transit nodes for type checking
{
"transit": { "dependsOn": ["^transit"] },
"typecheck": { "dependsOn": ["transit"] }
}
Examples
Example 1: Create New Workspace
Input: "Create a Turborepo with Next.js and NestJS"
pnpm create turbo@latest my-workspace
cd my-workspace
# Add Next.js app
pnpm add next react react-dom -F apps/web
# Add NestJS API
pnpm add @nestjs/core @nestjs/common -F apps/api
Example 2: Configure Testing Pipeline
Input: "Set up Vitest for all packages"
{
"pipeline": {
"test": {
"dependsOn": ["build"],
"outputs": ["coverage/**"],
"inputs": ["$TURBO_DEFAULT$", "vitest.config.ts"]
},
"test:watch": {
"cache": false,
"persistent": true
}
}
}
Example 3: Run Affected Tests in CI
Input: "Only test changed packages in CI"
pnpm run test --filter=[HEAD^]
Example 4: Debug Cache Issues
Input: "Why is my cache missing?"
# Dry run to see what would be executed
turbo run build --dry-run --filter=web
# Show hash inputs
turbo run build --force --filter=web
Constraints and Warnings
- Node.js 18+ is required for Turborepo
- Package manager field required in root
package.json - Outputs must be specified for caching to work
- Persistent tasks cannot have dependents
- Windows: WSL or Git Bash recommended
- Remote cache requires Vercel account or self-hosted solution
- Large monorepos may need increased
concurrencysettings
Reference Files
For detailed guidance on specific topics, consult:
| Topic | Reference File |
|---|---|
| turbo.json template | references/turbo.json |
| Next.js integration | references/nextjs-config.md |
| NestJS integration | references/nestjs-config.md |
| Vitest/Jest/Playwright | references/testing-config.md |
| GitHub/CircleCI/GitLab CI | references/ci-cd.md |
| Package configurations | references/package-configs.md |
Related skills
More from giuseppe-trisciuoglio/developer-kit and the wider catalog.

typescript-docs
Generate production-ready TypeScript documentation with JSDoc, TypeDoc, and ADRs for multiple audiences.

typescript-security-review
Security audit for TypeScript/Node.js apps: XSS, injection, CSRF, JWT, CVEs, secrets exposure.

unit-test-application-events
Unit test patterns for Spring ApplicationEvent publishers and @EventListener consumers without booting the full context.

unit-test-bean-validation
Unit test Jakarta Bean Validation constraints and custom validators with JUnit 5 in isolation.

unit-test-boundary-conditions
Test boundary conditions, edge cases, and limits in Java with JUnit 5 and AssertJ patterns.

unit-test-caching
Unit test patterns for Spring Cache annotations (@Cacheable, @CachePut, @CacheEvict) with mocked cache managers.