Moonrepo, the developer productivity platform for monorepo management, has released moon v2.0, codenamed “Phobos”, its first major version since v1. The release, which shipped after an alpha, beta, and release candidate cycle spanning nearly two months, delivers a plugin-based toolchain system, support for multiple configuration file formats, a restructured CLI, and a range of improvements to task inheritance and Docker integration.

The most significant change in moon v2.0 is the move from a hard-coded platform system to a WASM plugin-based toolchain architecture. Toolchains were previously baked into moon’s core, limiting language support to what the maintainers built directly. The new system allows the community to create custom toolchain plugins for any language or runtime, with support for extending the project graph, modifying task commands, hooking into Docker flows, and managing tool installation via proto, moonrepo’s companion version manager.

Alongside the toolchain overhaul, moon v2.0 now supports JSON, JSONC, HCL, Pkl, and TOML configuration formats in addition to YAML. The CLI has been reworked with a new low-level moon exec command that underpins moon ci, moon check, and moon run, providing a unified execution layer with support for job parallelisation and affected filtering. The moonx shorthand binary has been stabilised as a proper standalone executable, and interactive project and task selection prompts have been added for commands where no identifier is provided.

Task inheritance, one of moon’s most compelling features for monorepo management, has been reworked to be configuration-based rather than relying on file naming conventions. A new inheritedBy setting allows users to define criteria such as toolchain, stack, language, and tags to control which projects inherit which tasks. Tasks can now also be associated with multiple toolchains, and .env file handling has been improved with automatic loading of .env.local and environment-specific files, with deferred loading at execution time rather than during graph creation.

For teams working with Docker, moon v2.0 introduces per-project overrides for Docker settings and support for custom Dockerfile templates powered by Tera. The VCS layer has also been rewritten, with a new Git implementation that better supports worktrees and submodules, and a hooks system that no longer writes to .git/hooks directly.

Migrating from moon v1 involves a number of breaking changes, though the team has provided a dedicated moon migrate v2 command to automate much of the process. The official migration guide covers changes including renamed CLI options (now kebab-case), restructured toolchain configuration, updated environment variable substitution syntax, and the removal of the legacy local task setting in favour of a preset system. Notably, the moon upgrade command from v1 will not work due to changes in the distribution format, and users must reinstall using the provided installation scripts.

In the wider monorepo tooling landscape, moon occupies a distinct position. A recent comparison by PkgPulse described moon as “the sleeper pick for polyglot repos (Node.js + Rust + Go) or teams that want reproducible toolchain management baked in”, while noting its smaller community at around 50K weekly downloads compared to Turborepo’s 2M and Nx’s 5M.

Jeff Dickey, creator of the tool mise, commented on Hacker News that “mise started out solving the tool problem where moon solved the build problem first,” suggesting the two tools complement rather than directly compete.

Moon is an open-source repository management, organisation, orchestration, and notification tool written in Rust. It is developed by moonrepo, and sits between the high complexity of Bazel and the low structure of make or just, targeting teams that need structured monorepo management with built-in toolchain reproducibility across development and CI environments.