/awesome-monorepo

A curated list of awesome Monorepo tools, software and architectures.

Awesome Monorepo Awesome

A curated list of awesome Monorepo tools, software and architectures. Monorepos, short for mono-repositories, are repositories that contain multiple projects, usually related to each other.

Inspired by vinta/awesome-python.

Contents

Build systems & dependency management tools

  • baur builds only changed applications in a monorepo branch and manages build artifacts
  • Bazel is Google's monorepo-oriented build system. More on Bazel: awesome-bazel
  • Buck is Facebook's monorepo-oriented build system.
  • Nx is a build system for TypeScript monorepos and a set of monorepo management tools.
  • Please a cross-language build system with an emphasis on high performance, extensibility and reproduceability.
  • Pants is a monorepo-oriented build system, used by Twitter, Foursquare and multiple other companies.
  • Yarn is a JavaScript dependency management tool that supports monorepos through workspaces.
  • pnpm is a JavaScript dependency management tool that supports monorepos through a set of dedicated commands called pnpm multi.
  • Lerna is a tool for managing JavaScript projects with multiple packages, built on Yarn.
  • Bit is a tool for building and managing JavaScript projects with multiple components, and managing the dependency graph of components.
  • OAO is a Yarn-based, opinionated JavaScript monorepo management tool.
  • MBT is a build tool with differential build support.
  • Bolt Pkg is a super-powered JavaScript project management.
  • GitLab CI 11.4 supports running steps based on path changes.
  • Symplify/MonorepoBuilder is a PHP monorepo management tool.
  • Spago is a PureScript package manager and build tool powered by Dhall and package-sets.
  • Tainted is a tool to determine which Go packages need to be rebuilt in a monorepo.
  • Nix is a package and distribution build tool with remote caching, predominately used by NixOS.

Repository management tools

  • oao
  • FBShipIt
  • Syncpack allows managing multiple package.json files in Lerna Monorepos.
  • wsrun allows running a command in each package of a Yarn workspaces monorepo.
  • monorepo-run is a collection of helpers to run scripts in each package of a yarn monorepo with a separated pane per package.
  • Builder is a tool that makes it possible to ship the same scripts across projects in a Node.js monorepo. For example, share build and testing scripts across projects.
  • Lank is a tool that links packages together in a Node.js monorepo using automatic configuration of NODE_PATH instead of symlinks. Lank also allows you to run the same commands across all (or subsets of all) packages.
  • Ultra Runner is a smart script runner and build tool for Lerna, Pnpm, Rush and Yarn. Scripts run concurrently, using the dependency topology. Builds keep track of file changes and are skipped when possible.

Good reads

Version control systems & add-ons

Git

Tools

Scaling info

Mercurial

Tools

Scaling info

Development process tools

Code reviews

  • Pull Review Hubot plugin to automate pull reviews with lots of configuration options.
  • Rietveld is a code review tool by Google used by Chromium.

CI tools

Code ownership

Notable public monorepos

Migration tools

Development Workflows

  • Trunk Based Development, a source-control branching model, where developers collaborate on code in a single branch called ‘trunk’, resist any pressure to create other long-lived development branches by employing documented techniques. They therefore avoid merge hell, do not break the build, and live happily ever after.
  • Branch By Abstraction, is a set-piece technique to effect a ‘longer to complete’ change in the trunk.

License

CC0

To the extent possible under law, Uriel Corfa has waived all copyright and related or neighboring rights to this work.