Monorepos Aren't Perfect

who says they're perfect?

Lots of people! Dan Luu has a great overview of the arguments in favour.

It's also a technique that's widely adopted in large tech companies.

aren't the disadvantages well known?

In the above article, Dan argues that the disadvantages are well argued elsewhere.

This monorepo/manyrepo article is good balanced discussion, and I will use the 'manyrepo' term here too.

I haven't seen a discussion of the intrinsic challenges, hence this page.

what's the biggest advantage?

Given a large codebase of applications, libraries, and supporting infrastructure, it's wonderful to update it all at once. You can remove an old API at the same time as updating all the callsites.

This ability to make atomic API changes is empowering. It enables codebase health. Often the best person to update an application is the maintainer of the library that depends on it.

do these advantages apply to all projects?

Sooner or later, you need to interface with external projects.

A great example of this is the Linux kernel. If you import it into your monorepo, it's much harder to contribute back or sync changes.

Multirepos don't have this problem. They're already dealing with repository boundaries.

pro: Shared project ownership

con: Clear project boundaries

further reading