One of the nice things about working in a smaller business is you can enjoy using things that don’t need to scale to extreme sizes. One example in the software world is monorepos. While monorepos can scale well (see Google, Facebook, and others), doing so requires special tooling and infrastructure. With plain git , you can only go so far. While you can use it, it has meaningful advantages, like being able to make atomic changes that affect many parts of the system in a single commit, which eliminates whole classes of compatibility and integration issues. You can always split a monorepo later (see git-filter-repo ).
So, suppose you’re a small-to-medium team using a monorepo. Let’s go further and say that this monorepo stores all your company’s code, meaning it spans many different programming languages—it’s a polyglot monorepo. What tool can you use to manage versioning in a consistent way?
I argue that changesets is a solid choice, even if it’s primarily focused on the JavaScript/TypeScript ecosystem.
Note There is an open discussion about native polyglot monorepo support. However, even without native support, changesets has the hooks needed to implement this as-is for many setups.
Background
For any versioning tool, you are typically looking for how to:
define what content appears in the changelog/release notes
influence the version numbers of the packages
automate the commits doing the actual metadata bumps and tagging
automate the builds that happen in response
... continue reading