JS Guide
HomeQuestionsSearchResources
Search

Built for developers preparing for JavaScript, React & TypeScript interviews.

ResourcesQuestionsSupport
HomeQuestionsSearchProgress
HomeQuestionstooling
Next
tooling
senior
architecture

What is a monorepo and how do you set one up?

monorepo
turborepo
workspaces
architecture
Quick Answer

A monorepo contains multiple packages/projects in one repository. Use tools like Turborepo, Nx, or pnpm workspaces for dependency management, shared configs, and efficient builds. Benefits include code sharing, atomic changes, and unified tooling.

Detailed Explanation

Monorepo Benefits:

  • Shared code/dependencies
  • Atomic cross-project changes
  • Unified tooling/configs
  • Better collaboration
  • Simplified dependency management

Monorepo Tools:

  • Turborepo: Fast, caching, easy setup
  • Nx: Full-featured, plugins
  • Lerna: Older, simpler
  • pnpm workspaces: Built-in to pnpm

Structure:

  • apps/: Applications
  • packages/: Shared libraries
  • Root configs for tooling

Code Examples

Turborepo setup
// Root package.json
{
  "name": "my-monorepo",
  "private": true,
  "workspaces": ["apps/*", "packages/*"],
  "scripts": {
    "build": "turbo run build",
    "dev": "turbo run dev",
    "lint": "turbo run lint",
    "test": "turbo run test"
  },
  "devDependencies": {
    "turbo": "^1.10.0"
  }
}

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {},
    "test": {
      "dependsOn": ["build"]
    }
  }
}

// Folder structure
// my-monorepo/
// ├── apps/
// │   ├── web/         # Next.js app
// │   └── mobile/      # React Native app
// ├── packages/
// │   ├── ui/          # Shared components
// │   ├── config/      # Shared configs
// │   └── utils/       # Shared utilities
// ├── package.json
// └── turbo.json

Resources

Turborepo Documentation

docs

pnpm Workspaces

docs

Related Questions

What is npm and how do you manage packages with it?

junior
package-managers

How do you set up CI/CD for a JavaScript project?

mid
ci-cd
Next
How do you create custom ESLint rules and plugins?