Using Changesets in a polyglot monorepo

One tool to rule them all—or spark a turf war

TLDR: An engineer shows how to use Changesets to manage versions across one big, multi‑language codebase, and the comments erupt. Fans celebrate real-world success, others push Nix as the cleaner path, and a new tool called Sampo enters as a simpler but early-stage alternative—teams want versioning that actually works.

Luke Hsiao drops a how-to on using Changesets to wrangle versions in a single repo that houses many languages—a “polyglot monorepo.” Translation: one big code home, many tongues, fewer headaches. He leans on custom scripts and GitHub Actions to make a JavaScript-born tool play nice with Python, Rust, and friends. The pitch: one consistent versioning story across the whole company.

The crowd? Instantly split. One camp cheers: Panos says Changesets has been a lifesaver and wants to see how this scales across languages. Another camp storms in with a banner that basically reads, “Forget that, use Nix.” User sshine argues Nix—a universal package manager—keeps every tool locked in and tidy across projects, sparking the classic dev meme: JS crew vs. Nix wizards. Meanwhile, moltar’s just here for the receipts, asking for more Docker steps like it’s the post-credits scene we were promised.

Then came the plot twist: hanspagel flexes they’re publishing everywhere—npm, PyPI, Maven, crates.io, NuGet—all powered by Changesets, fanning the hype. But Princesseuh drops an indie challenger: sampo, a Changesets-inspired tool with native polyglot support—less hacking, still maturing. Cue the popcorn: is Changesets the pragmatic king, Nix the purity play, or Sampo the up-and-comer with main-character energy?

Key Points

  • Changesets is proposed as a solution to manage per-package versioning and changelogs in a polyglot monorepo.
  • The GitHub Action changesets/action enables custom scripts for versioning and publishing, allowing polyglot workflows despite no native support.
  • The approach assumes per-package semantic versioning and individual CHANGELOG.md files with engineers committing changeset files to define bumps.
  • The article provides a recommended repository structure including .changeset config, docs, pnpm workspace files, language-specific package directories, and Docker assets.
  • The setup targets a private, enterprise GitHub environment and uses just and uv scripts to automate release processes.

Hottest takes

"I handle polyglot monorepos using Nix." — sshine
"Publishing to npm, PyPi, Maven Central, crates.io, NuGet… all using changesets." — hanspagel
"Native polyglot support... easier than hacking around changesets, but less mature." — Princesseuh
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.