Molt and changesets
Molt and changesets implement the same release model for two different packaging ecosystems. If you know one, this page tells you what carries over and what does not.
Most of the differences below trace to a single fact: npm and PyPI are not the same kind of index, and SemVer and PEP 440 are not the same kind of version. A rule that is correct on npm is often wrong on PyPI, and the reverse. Where that happens, each tool does the right thing for its own ecosystem.
Molt follows changesets v3 semantics. Material written about v2, which is still most of what you will find online, describes older behavior.
Legend
The workflow
The core loop is the same in both tools, and the muscle memory transfers.
Versions
Monorepos
Both tools compute a release plan across a workspace. This is the part that is the same idea and a different implementation.
Publishing
Changelogs
Automation
Out of scope for molt
These are decisions, not gaps:
- Versions derived from commit messages. A commit is not a release intent, and a prefix convention cannot see a breaking change that crosses a package boundary. Molt reads commits once, at adoption, to seed changesets.
- Executable configuration. Config is TOML or JSON so any tool can read it without running your code.
- Shell hooks as the main extension point. Extension goes through typed Python entry points.
- One pull request per package, bespoke per-build-tool integrations, and chat bots.
See also
- Migrating from changesets -- the practical port guide.
- Design decisions -- the reasoning behind each divergence.
- Acknowledgements -- what molt is built on.