- Added request retry support (via proto), that will retry up to 3 times with exponential backoff for transient errors (network issues, rate limits, etc).
- Improved async affected tracking by another 5-10%.
- Updated PowerShell commands to use
-EncodedCommandinstead of-Commandto avoid quoting/escaping issues. Let us know if you run into any issues with this change.
- Fixed
--summarynot being respected inmoon ci. - Fixed issues with graph visualizer commands failing with a JavaScript error after the v2.2 graph changes.
- Fixed an issue where checking the remote cache for an entry before the task execution could cause the task to fail if the remote cache check errored. We now treat remote cache errors as cache misses, and allow the task to execute.
- Fixed an issue where filtered graphs would point to the wrong data because indexes changed.
- JavaScript
- Fixed
pnpm-lock.yamlparsing for pnpm v10's multi-document lockfiles, which are written whenmanagePackageManagerVersionsis enabled (the default).
- Fixed
- TypeScript
- Updated project references to start with
./in preparation for the removal ofbaseUrlin TypeScript v7.
- Updated project references to start with
- Updated proto to v0.56.3 from 0.56.1.
- Updated Rust to v1.95.0.
- Updated dependencies.
- The
--jsonoutput formoon action-graph,moon project-graph, andmoon task-graphcommands has changed. Thegraphnodes are now integers instead of objects, and the node data is instead stored in a separatedataobject.
- Temporarily brought back
x86_64-apple-darwin(Apple Intel) as a supported operating system. - Affected
- Added an experimental asynchronous version of the affected tracker, that is 100-150% faster.
- Enable with the
experiments.asyncAffectedTrackingsetting in.moon/workspace.*.
- Enable with the
- Added an experimental asynchronous version of the affected tracker, that is 100-150% faster.
- Config
- Added
MOON_PIPELINE_AUTO_CLEAN_CACHEenvironment variable support for thepipeline.autoCleanCachesetting. - Added
MOON_PIPELINE_CACHE_LIFETIMEenvironment variable support for thepipeline.cacheLifetimesetting. - Added
MOON_PIPELINE_KILL_PROCESS_THRESHOLDenvironment variable support for thepipeline.killProcessThresholdsetting.
- Added
- 🆕 Daemon
- Added an unstable daemon that will run in the background and process heavy operations. To start, it runs a file watcher on the workspace and invalidates caches.
- Added a
moon daemoncommand withstart,stop, and more subcommands to manage the daemon. - Added an
unstable_daemonsetting to.moon/workspace.*.
- Graphs
- Improved performance of
taskToolchainsandtaskTypefields when querying the project graph. - Greatly reduced memory footprint of the action, project, and task graphs. Nodes in the graph are now integers instead of objects.
- Improved performance of
- Plugin registry
- Improved performance and memory consumption when loading plugins.
- Task runner
- Improved performance of task output archiving, by no longer blocking the main thread pool.
- Toolchains
- Updated the system toolchain to be built-in instead of an external WASM plugin that needs to be downloaded.
- 🆕 Workspace
- Added an experimental asynchronous version of the project and task graph builders, that utilizes
a background thread pool per project to build the graph. This can improve performance by
100-170% in large workspaces.
- Enable with the
experiments.asyncGraphBuildingsetting in.moon/workspace.*. - Unlike the sync version, the async version does not support cycles, and will not cut edges automatically to avoid cycles.
- Enable with the
- Added an experimental asynchronous version of the project and task graph builders, that utilizes
a background thread pool per project to build the graph. This can improve performance by
100-170% in large workspaces.
- Fixed an issue with VCS hooks generation that could leave around stale hooks.
- Fixed an issue where toolchains not managed by proto directly (like Rust) would consistently re-install itself.
- Fixed an issue where OS based tasks would error while executing if they defined
outputs, and you're on a different OS. - Fixed an issue where proto would be installed even when toolchains were disabled with
MOON_TOOLCHAIN_FORCE_GLOBALS.
- Updated proto to v0.56.1 from 0.55.4.
- Updated dependencies.
- Added
moon toolchain downloadandmoon extension downloadcommands that will download all configured toolchain/extension plugins. This allows you to prime the download cache.
- Fixed an "unrecognized subcommand moon" error that can occur when global and local moon binaries exist.
- Fixed an EPIPE error in streaming child processes.
- Fixed trailing
--in task commands being stripped. - Potential fix for graph visualizer commands failing with a JavaScript error.
- Go
- Updated
go listto not requirego.modfile to run.
- Updated
- Go
- Fixed an issue where
go listwas not running in the project root. - Fixed an issue where
go listwould add a project dependency to itself.
- Fixed an issue where
- JavaScript
- Will now remove
node_modulesduring Docker prune, as some package managers don't do this automatically. - Removed
*.config.*files from the Docker scaffold process.
- Will now remove
- npm/pnpm/yarn
- Updated to always include the "shared globals" directory.
- Python
- Fixed install/venv args being passed incorrectly in some situations.
- Updated the affected tracker to mark project/tasks as affected on-demand, instead of everything up front. This allows us to short-circuit early, improving performance for very large repos.
- Updated many commands and call sites to load projects/tasks without expansion, slightly improving performance and memory usage.
- Go
- Added
inferRelationshipsandinferRelationshipsFromTestssettings to controlgo list --depsusage.
- Added
- JavaScript
- Updated
deno.lockandyarn.lockparsing dependencies.
- Updated
- Python
- Fixed an issue where install commands didn't have access to venv bins.
- Fixed an issue where project dependencies were not being inferred correctly when the dependency contains extras metadata.
- Rust
- Updated
Cargo.lockparsing dependencies.
- Updated
- TypeScript
- Added TypeScript v6 support.
- Updated dependencies.
- Fixed an issue with remote caching where the batching max size and limit were not being applied correctly.
- Fixed an issue where exclude/rename for task inheritance applied to tasks other than those in the current project.
- Fixed an issue where toolchains that loaded project/workspace toolchain configuration would not be merged correctly.
- Fixed an issue where task console output may appear out of order.
- Fixed an issue with Git file hashing by temporarily re-enabling Git locks.
- Environment
- Improved our local and remote detection logic. We now also check for common remote devboxes (GitHub Codespaces, Gitpod, etc) in addition to CI environments.
- Projects
- Updated duplicate aliases to no longer be a hard error, and instead will apply to the first encountered project. Duplicates are possible when multiple toolchains all use the same package name (Go, Rust, Node, etc).
- Tasks
- Added 3 new settings to the
affectedFilesoption when using the object syntax:filter- A list of glob patterns to filter the affected files list before passing to the task.ignoreProjectBoundary- When matching affected files, ignore the project boundary and include workspace relative files. Otherwise, only files within the project are matched.passDotWhenNoResults- When there are no affected files after matching and filtering, use.instead of an empty value.
- Added a new option,
runInSyncPhase, that will run the task duringmoon synccommands.
- Added 3 new settings to the
- Toolchains
- Added
inheritAliases(defaulttrue) setting for each toolchain. Can toggle whether to inherit aliases for projects while extending the project graph. - Added
installDependencies(defaulttrue) setting for each toolchain. Can toggle whether to install dependencies (via theInstallDependenciesaction) when running a task.
- Added
- Go
- Will now run
go list --depsto determine project relationships while extending the project graph.
- Will now run
- Python
- Normalized package/dependency names to PEP 503 during graph extending.
- Fixed an issue where package manager toolchain settings were not being inherited correctly.
- TypeScript
- Added a
pruneProjectReferencessetting that prunes non-moon managed project references when syncing.
- Added a
- Fixed invalid JSON schema in MCP
generatetool. - Fixed
$projectTitleand$projectAliasestokens not being substituted. - Fixed an issue where
bashmay not be available (falls back tosh). - Fixed an issue where a task
commandcould not end with--. - Fixed some issues where
.config/moonwas not respected. - Potential fix for tail-end console output not being written.
- Updated dependencies.
- JavaScript
- Added support for
*versions when determining project relationships. - Reworked
pnpm dedupeandyarn dedupedetection logic.
- Added support for
- Python
- Will now read
pyproject.tomldependencies to determine project relationships.
- Will now read
- Updated proto to v0.55.4 from 0.55.2.
- Updated Rust to v1.94.0.
- Updated dependencies.
This is a re-release as the v2.0.0 release workflow failed.
- Temporarily disabled shallow checkouts triggering a hard error in CI until we can implement a better solution. This means that if you have a shallow checkout, you may see incorrect affected results, or Git commands may fail.
- Added more logs to
moon docker pruneto help debug edge cases. - Added
MOON_INCLUDE_RELATIONSenvironment variable support for the--include-relationsCLI option. - Added
.envand.env.*as defaults to thehasher.ignoreMissingPatternssetting.
- Fixed an issue where the graph visualizers would not render correctly in the VS Code extension.
- Fixed an issue where a task with
shell: falsewould be force enabled when a glob/env was detected. We now respect the configured value. - Fixed an issue where "run" type based tasks would not run in CI.
- Updated
moon upgradeto upgrade via proto if we detect that moon is managed by proto. This will runproto install moon latest.
- Fixed some WASM serialization errors.
- Fixed the
moon upgradecommand not handling the new v2 distribution format correctly. If you are on moon v2.0.0, the upgrade command will still be broken until you upgrade to this patch.
View the migration guide for a full list of breaking changes and how to easily migrate!
-
Renamed "touched files" to "changed files".
-
CLI
- Removed canary and nightly releases.
- Removed commands:
moon node,moon migrate from-package-json,moon query hash,moon query hash-diff - Renamed all options and flags to kebab-case instead of camelCase.
- Reworked many commands and their arguments. Refer to the migration guide for details.
- Reworked console output handling. Updated
--summarywith different levels. - Reworked release distribution to use archives instead of direct executables.
-
Configuration
- Renamed, removed, or changed many settings. Refer to the migration guide for details.
- Renamed
.moon/toolchain.ymlto.moon/toolchains.yml(plural).
-
MCP
- Updated protocol version to 2025-11-25.
- Updated
get_projectsandget_tasksto return fragments, to reduce the payload size.
-
Projects
- Reworked how the
languageis detected. - Flattened
projectmetadata structure.
- Reworked how the
-
Tasks
- Task inheritance now deep merges instead of shallow merges when dealing with extends and multi-global.
- Task
commandandargsonly support simple commands now. Usescriptfor compound commands (pipes, redirects, multiple commands, etc). - Removed "watcher" task
preset. - Reworked env var merge order, substitution, and more. Refer to the migration guide for details.
- Reworked
.envhandling.- Moved loading to occur before task execution, instead of creation.
- Can no longer reference task
envvars for substitution.
-
Toolchain
- Removed the old platform system, and replaced it with the new WASM plugin system.
- All old "stable" toolchains have been replaced with the new "unstable" toolchains.
- Removed the old platform system, and replaced it with the new WASM plugin system.
-
VCS
- Reworked the hooks layer for better interoperability.
-
WASM API
- Removed the
/cwdvirtual path. - Renamed
ProjectFragment.aliastoProjectFragment.aliasesand changed its type fromOption<String>toVec<String>. - Removed
RegisterExtensionOutput.config_schemafield. Use the newdefine_extension_configplugin function instead.
- Removed the
View the announcement blog post for all updates, new features, improvements, and much more!
- Action pipeline
- Will now always generate a hash for a task, even if caching is disabled.
- Applies "transitive reduction" to the graph, removing unnecessary edges for better performance.
- Improved console output, logging, and error handling.
- Improved parallelism when running tasks.
- Now resolves and expands targets before partitioning.
- Now partitions after filtering based on affected state.
- CLI
- New commands:
moon exec,moon extension,moon hash,moon projects,moon tasks,moon query affected,moon template - Updated commands
moon check,moon ci, andmoon run:- Now uses
moon execunder the hood. - Added levels to
--summary.
- Now uses
- Updated commands that require an identifier to prompt for it if not provided.
- Stabilized the
moonxbinary (which usesmoon execunder the hood). - Added support for
.config/mooninstead of.moon. - Added support for
...in task targets, which is an alias for**/*. This is similar to how Bazel targets work. - Improved stack memory usage by pushing thread data to the heap. This resolves spurious stack overflow issues.
- New commands:
- Configuration
- Added support for more formats: JSON, TOML, and HCL.
- Improved error messages for union based settings.
.moon/extensions.*- New file for configuring extensions (formerly in
workspace.extensions).
- New file for configuring extensions (formerly in
.moon/tasks.*- Added
inheritedBysetting for configuration based task inheritance.
- Added
.moon/workspace.*- Added
projects.globFormatsetting. - Added
defaultProjectsetting. - Stabilized remote caching.
- Added
moon.*- Added
mergeToolchainstask option. - Added "utility" task
preset. - Added "data"
stack.
- Added
- Docker
- Better toolchain integration.
- Added
--no-setupand--templatesupport tomoon docker file. - Updated project configs to override workspace configs.
- Extensions
- Added a new extension,
unpack, for unpacking archive files. - Added
.moon/extensions.*configuration file. - Added support for new plugin APIs:
define_extension_config,extend_command,extend_project_graph,extend_task_command,extend_task_script,sync_project, andsync_workspace.
- Added a new extension,
- MCP
- Added a
generatetool for running the code generator.
- Added a
- Projects
- Added a default project concept.
- Added path based IDs instead of dir name IDs.
- Updated projects to support multiple aliases (one from each applicable toolchain).
- Remote cache
- Stabilized all settings.
- Enabled gzip/zstd compression for HTTP requests.
- Tasks
- Added deep merging support for task inheritance.
- Updated
commandandargswith better syntax parsing and error handling.- Better handling of quotes, escapes, and spaces.
- Extracts env vars into the task.
- Updated
envvalues to supportnull, which would remove an inherited system env var. - Updated
envFileoption to support token/var substitution. - Improved
.envhandling:- Updated the parser to support more syntax.
- Updated loading to occur before task execution, instead of creation.
- Can now reference system/moon/task env vars for substitution.
- Toolchains
- Stabilized the new WASM plugin system.
- Improved how toolchains extend env vars and paths for commands and scripts.
- Tokens
- Added new tokens:
$projectTitle,$projectAliases,$taskToolchains
- Added new tokens:
- VCS
- Replaced the old v1 Git implementation with a new v2 implementation.
- Improved support for worktrees, submodules, and more.
- WASM API
- Added a
load_extension_config_by_idhost function. - Added
define_extension_config,initialize_extension, andextend_commandplugin functions. - Added
load_extension_config,parse_extension_configandparse_extension_config_schemautility functions. - Added
DefineExtensionConfigOutput,InitializeExtensionInput,InitializeExtensionOutput,ExtendCommandInput, andExtendCommandOutputtypes. - Added
ExtendProjectGraphInput.extension_config,ExtendTaskCommandInput.extension_config,ExtendTaskScriptInput.extension_config,SyncProjectInput.extension_config, andSyncWorkspaceInput.extension_configfields. - Added
RegisterToolchainOutput.languagefield.
- Added a
- Migrate Nx
- Added support for the following
project.jsonfields:targets.*.continuous
- Added support for the following
- Migrate Turborepo
- Added support for the following
turbo.jsonfields:tags,tasks.*.env(wildcards and negation)
- Added support for the following
- Unpack
- Updated to use
unzipandtarcommands.
- Updated to use
- JavaScript
- Added support for Yarn v4.10 catalogs.
- Fixed an issue where implicit dependencies would sometimes not resolve.
- Fixed local executables in
@moonrepopackages not being detected correctly. - Fixed task job parallelism to partition after tasks have been filtered based on affected state.
- Fixed an issue where env var substitution would not process in the order they were defined.
- Fixed an issue where ctrl+c wouldn't exit when a prompt was waiting for input.
- Fixed an issue where
projectbased task inputs would not be reflected internally in the input files/globs list. - Fixed an issue where running a task that triggers a system/moon error wouldn't output the error message. This also aborts the action pipeline correctly now.
- Fixed an issue where errors during project graph building would not be reported correctly.
- Fixed an issue where a negated glob in a file group would not expand properly when used as an argument.