Kelly Mears

Monorepo

Several packages developed in one repository with shared tooling and atomic cross-package changes.

Systems & Tooling1 min read189 words12 out · 13 in
also calledWorkspacesMonorepository

A monorepo holds multiple packages in one repository. The alternative — one repository per package — is often called polyrepo.

The decisive advantage is the atomic cross-cutting change: modifying a shared library and every consumer in a single commit, reviewed together and validated together. In separate repositories the same change is a publish, a version bump, and a coordination problem, during which the two sides are inconsistent.

The costs scale with size. Tooling must understand the package graph to avoid rebuilding and retesting everything on every change. Checkouts get large. Ownership needs to be expressed explicitly, since directory structure no longer implies it.

Package managers support the pattern through workspaces: a root manifest listing member packages, dependencies between them resolved locally rather than fetched. Two details follow. Dependency-update tooling generally scans the root and traverses the workspace list, so configuring it to scan each package directory as well produces duplicate proposals that all rewrite the same lockfile and conflict with each other. And the on-disk layout of installed packages depends on the linker strategy, so reading a version from a directory may find nothing; the Lockfile is the answer.

See also11

Module Graph

The directed graph of imports that decides what code ends up where.

Web Platform22 connections

Package Manager

The tool that resolves, fetches, and installs dependencies, and pins them for reproducibility.

Systems & Tooling27 connections

Version Control

A system recording the history of a project's files, enabling branching, merging, and recovery.

Version Control & Delivery26 connections

Supply Chain Security

Protecting against compromise arriving through the code and tooling a project depends on.

Version Control & Delivery24 connections

Semantic Versioning

A version-numbering convention where the number communicates the kind of change.

Version Control & Delivery22 connections

Bundler

The tool that resolves an application's modules into the files a browser downloads.

Web Platform18 connections

Silent Failure

A failure that produces no signal, so the absence of an error reads as success.

Method73 connections

Git LFS

A Git extension that stores large binary files on a separate server and keeps small pointer files in the repository, so history stays light enough to clone.

Version Control & Delivery10 connections

Test Impact Analysis

Running only the tests a change could plausibly affect, using dependency graphs, coverage maps, or learned models, so large suites stay fast without giving up their safety net.

Testing & Verification10 connections

Build Cache

Reusing the outputs of build and test steps whose inputs haven't changed, keyed by a hash of those inputs, so large codebases build in minutes instead of hours.

Version Control & Delivery11 connections

Shallow Clone

Ways to fetch less than a whole Git repository, by cutting history, deferring file contents, or checking out only some directories, and what each breaks.

Version Control & Delivery8 connections

Linked from13