Full Stack Development

Monorepos

by Tomas Trescak t.trescak@westernsydney.edu.au

Monorepos

Introduction

  • 🔧 Problems with Polyrepos:
    • Dependency mismatches (e.g., API version conflicts).
    • Complicated CI/CD workflows (multiple pipelines).
    • Difficult code sharing (shared code across services).

  • 💡 Solution: Monorepos
    • Single Git repository for multiple projects.
    • Centralized dependency management and code sharing.
    • Efficient CI/CD with optimized builds.

Monorepos

Example

  • A React-based front end (customer UI).
  • A Python API (backend services).
  • A shared authentication library used by both.
  • A documentation site
  • A shared UI library
  • E2E (System) Tests

Monorepos

Tools

Tool Language Use Case
Nx JavaScript/TypeScript Optimized for large-scale apps, caching, and task execution
Turborepo JavaScript/TypeScript Performance-focused, great for Next.js/React projects
Lerna JavaScript Works with npm/yarn workspaces for package management
Bazel Multiple languages Scalable for large enterprises like Google
pnpm Workspaces JavaScript/TypeScript Fast package management

Monorepos

Examples of Benefits

  • Code Sharing & Reusability
  • Simplified Dependency Management
  • Easier Refactoring
  • Improved CI/CD Pipelines
  • Stronger Collaboration & Visibility

Monorepos

Tools

Use Monorepos When... Avoid Monorepos When...
You have multiple interconnected services You have completely independent projects
Teams frequently share code/libraries Teams work on separate, unrelated products
You need strict version control across projects Your team prefers independent deployment cycles
You want a unified CI/CD pipeline You have slow Git performance due to a large repo
TurboRepo and pnpm