Unity CLI 1.0.0
112 documented changes.
- Version
- 1.0.0
- Released
- Nov 12, 2026
- Product
- Unity CLI
Unity CLI 1.0.0
Security
- Security
Each release now publishes `SHA256SUMS.asc` , a GPG signature over `SHA256SUMS` by the Unity Technologies ApS key, so you can verify a download with `gpg --verify SHA256SUMS.asc SHA256SUMS` .
- Security
`unity vcs blame` no longer prints terminal escape sequences from a commit author name or an object name in the table and tsv output. A crafted author name could move the cursor or retitle the terminal.
- Security
Sign-in no longer falls back to storing your tokens in a plain file when the system credential store (the macOS Keychain, Windows Credential Manager, or the Linux Secret Service and kernel keyring) is unavailable. To keep using the file, sign in with `unity auth login --insecure-storage` , as `gh auth login --insecure-storage` works.
- Windows
- macOS
- Linux
Added
- Feature
`unity vcs uvcs review create` opens a code review of a changeset or a branch, `review reviewers` lists who was asked to review and where each stands, and `review request` asks more people. They work on Unity Cloud and self-hosted servers through the local `cm` client (11.0.16.10512 or later).
- Feature
`unity vcs uvcs review` lists, reads, answers and resolves code review comments on self-hosted Unity Version Control servers, through the local `cm` client and with no Unity sign-in ( `cm` 11.0.16.10616 or later; listing reviews works from 11.0.16.10512).
- Feature
`unity plugin install ` installs a Unity tool published after your CLI version, and `unity ` runs it, with no CLI update. Such a tool downloads only from Unity's CLI plugin CDN and is checksum-verified, like every plugin.
- Feature
`unity command --help` prints that Editor command's usage and parameters, read from the connected Editor. A group name alone lists the group's commands.
- Feature
Tab completion after `unity command` offers the connected Editor's commands and the chosen command's parameters, in every shell and in `unity shell` . Regenerate your completion script with `unity completion ` to get it.
- Feature
`unity commands --include-editor` adds the connected Editor's commands to the manifest, each marked `"source": "editor"` .
- Feature
`unity mcp --exclude-annotations ` hides the Editor commands whose MCP annotations include any of `read-only` , `destructive` , `idempotent` or `open-world` , and refuses a call to one. For example, `--exclude-annotations destructive` keeps an agent from deleting assets or running C# in the Editor.
- Feature
`unity mcp --exclude-tool-groups ` hides whole Editor command groups, every command in them, and refuses a call to any of them. For example, `--exclude-tool-groups "scene,editor.*"` hides the scene and Editor commands.
- Feature
`unity mcp --tool-groups` lists one tool per Editor command group instead of one per command, so a full Editor catalog fits under the tool limits of clients such as VS Code, Cursor and Windsurf, and takes less of the agent's context. A group tool takes the command's name in `command` and its parameters in `args` , and its description lists every command's parameters.
- Feature
`UGS_CLI_TELEMETRY_DISABLED` turns off the CLI's usage data and anonymous telemetry ping, the same way `DO_NOT_TRACK` does. Any value but empty, `0` or `false` counts.
- Feature
A command group can now hand a subcommand it does not have to a `unity-` plugin on your `PATH` , the way `unity ` runs `unity-` . The plugin gets the arguments from that subcommand on, and the group's own subcommands always come first.
- Feature
`unity close --if-saved` refuses to close an Editor that has unsaved scenes and lists them. Without it, `unity close` still quits without saving, and now names the unsaved work it discarded.
- Feature
`unity open` warns when `HUB_ENV=development` makes it start the Editor against the staging cloud environment, and names `--cloudEnvironment production` to use production.
- Feature
`unity command --help` shows `unity command editor dialog` , and says it needs an Editor that serves its own endpoint.
- Feature
`unity editor add --skip-signature-check` registers an unsigned development build, such as a locally built trunk Editor, the same way `unity editors add --skip-signature-check` does.
- Feature
`unity auth login --insecure-storage` saves your sign-in to a plain file when no system credential store is available.
- Feature
`unity pipeline automation apps actions create --file ` adds an action to a draft version of a Pipeline Automation app, from a JSON file whose name and description `--name` and `--description` override.
- Feature
`unity pipeline automation pipelines create` creates a Pipeline Automation pipeline and its first version, from a JSON file holding its steps and parameters whose name, description, version and tags `--name` , `--description` , `--version` and `--tag` override. A saved pipeline version works as the file.
Changed
- Change
`unity pipeline cloud-build builds timeline` now works on production, resolving the organization and project like `builds get` , instead of stopping with `AUTOMATION_COMMAND_STAGING_ONLY` .
- Change
The winget package now carries stable releases only. On the beta channel, when Windows can't apply an update, `unity upgrade` now gives the beta App Installer link to install by hand instead of suggesting winget.
- Windows
- Change
Options that write output now follow one rule: `-o, --output` names a file and `--output-dir` names a directory. `build --output-path` is now `build --output` , `collaboration annotations export` , `attachments download` and `thumbnail download` take `-o, --output` , and `test` and `templates pack` gain `-o` .
- Change
`unity collab` commands accept a Unity Cloud project or organization name as well as an id for `--cloud-project` and `--cloud-org` . A name is looked up in the organization in scope, which is `--cloud-org` , then `UNITY_CLOUD_ORG` , then your saved default organization.
- Change
`unity mcp configure` writes `--tool-groups` into the entries it creates. An entry an older `unity mcp configure` wrote keeps one tool per command, so a client allow list that names those tools keeps working.
- Change
`unity` , `unity help` , `unity --help` , `unity -h` , `unity help ` , `unity --help` and `unity --version` now show the "new version available" notice after their output, the same as other commands. The notice still goes to stderr, only in an interactive terminal, and never with `--json` , `--quiet` , `CI` , or when the update check is turned off.
- Change
The branded header and the highlighted names in the command listing use brand blue for the logo, wordmark, version and command names. The blue reads on light and dark terminal backgrounds.
- Change
Only the branded header asks the terminal for its background, and only where the terminal can answer, with a 100 ms wait. Command help and the command listing never ask; they use `UNITY_THEME` , then `COLORFGBG` , then dark.
- Change
Set `UNITY_THEME=light` or `UNITY_THEME=dark` to choose the background yourself.
- Change
Breaking: `unity recompile` exits `12` when no Editor answers, as `unity command` does, instead of `7` . A script that matched exit `7` for this should check `12` ; `errors[0].code` is unchanged.
- Change
`unity recompile` takes the project as a positional argument too: `unity recompile ` .
- Change
`unity self-update --target ` now keeps the version you chose: Unity Hub no longer replaces it with its bundled CLI at start. Run `unity self-update` with no version to go back to the newest release and let Unity Hub update the CLI again.
- Change
`unity projects create --help` says that a new project is linked to Unity Cloud unless you pass `--no-cloud` .
- Change
`unity self-update` says in its JSON result whether it installed anything ( `installed` ) and, except for an MSIX update, which version ( `installedVersion` ), and sets `appliesAfterExit` when the new version takes over after the command exits.
- Change
Breaking: `unity close` and `unity projects close` fail with exit `11` and `PROJECTS_CLOSE_NOT_A_PROJECT` when the path isn't a Unity project (no `Assets` or `ProjectSettings` folder), such as a mistyped name. They used to succeed with `reason: "not_open"` .
- Fix
A command that takes `--project-path` and gets an extra argument, for example `unity assets import package.unitypackage ./MyGame` , now names the flag in its "too many arguments" error and shows the corrected call: `unity assets import --project-path ` .
- Change
`unity help ` now shows the help of a `unity-` plugin from your `PATH` when `` is not a built-in command, the same as `unity --help` . `unity cloud help ` does the same for a `unity-cloud` plugin.
- Change
When you're signed in, your analytics choice is now saved to your Unity account, so it's the same on every device where you use the CLI or the Hub. `unity analytics opt-in` and `opt-out` save it to your account, and `unity analytics status` and `unity auth login` pick up the choice your account holds.
Fixed
- Fix
`unity license return` now returns Assigned seats such as Unity Pro. It sends your sign-in token to the licensing client first; before, the return always failed with a 401.
- Fix
`unity vcs uvcs` commands recognize workspaces on self-hosted servers whose repository has no organization in its name, instead of reporting that the folder is not a workspace.
- Fix
`unity hub install` no longer leaves its temp folder and a partial installer behind when Ctrl-C or SIGTERM stops it. Stopped while the installer runs, it now waits for the installer to finish before it removes the folder and exits; a second Ctrl-C exits at once.
- Fix
`unity pipeline cloud-build targets create` and `targets update` with `--development-build` now set the `Development` build option that Build Automation reads, instead of `BuildOptions.Development` , which builds ignored. `--no-development-build` removes the option in any spelling.
- Fix
`unity pipeline cloud-build targets update` sends the target's stored name when `--name` isn't given, so updating a target created from the Editor no longer fails.
- Fix
`unity setup all --dry-run` no longer installs skills when an agent's Unity plugin is already installed. A dry run now writes nothing.
- Fix
`unity projects link vcs` , `unity projects unlink vcs` and `unity vcs setup` now refuse a folder that is not a Unity project before they run git or contact a provider. Before, linking such a folder could create a git repository, create a remote repository and push to it.
- Fix
`unity install` and `unity install-modules` write their module notices, such as an added dependency or a skipped unknown module, to stderr under `--format json` , `ndjson` and `tsv` , so stdout holds only the output a script parses.
- Fix
`unity docs ` and `unity docs toc` retry when docs.unity.com briefly rate-limits them, and open fewer connections at once, so a first lookup is less likely to fall back to a search.
- Fix
When a service entry in the Editor config is unusable, the CLI log now says it is left out instead of saying the default was used. Entries with a built-in default still fall back to it.
- Fix
`unity doctor` shows each environment check's status ( `[pass]` , `[warn]` , `[fail]` , `[info]` ) when its output is piped, instead of cutting the status down to `[…` .
- Fix
`unity templates info --format json` and `--format ndjson` now always include `isUserGenerated` and `isNew` , `false` when the template doesn't set them.
- Fix
`unity install --resume` on an Apple silicon Mac continues the arm64 partial of an Editor download, where it used to restart the x86_64 installer from scratch and install an x86_64 Editor. The arm64 and x86_64 macOS installers share the file name `Unity-.pkg` ; an explicit `--architecture` , else the Mac's own architecture, now picks the release, also when the catalog lists no release of that name.
- macOS
- Fix
`unity projects audit` no longer says it opened a Project Auditor page the window could not show. When the Editor's Project Auditor has no such area or view, the result note says so instead of reporting that the page is open.
- Fix
`unity projects audit` no longer fails the first time it installs Project Auditor when the Editor drops the connection or cancels the install while it reloads. It reconnects, asks for the install again, and finishes.
- Fix
`unity projects audit` now fails when the project has script compile errors, even if Project Auditor is already loaded. It exits with an error asking you to fix the compile errors in the Editor, instead of opening a window that can't run the analysis.
- Fix
`unity projects audit --report` accepts a Git Bash style path such as `/c/Users/me/report.projectauditor` on Windows, instead of looking for it under `C:\c\Users` .
- Windows
- Fix
`unity projects audit` on a project older than Unity 6 now says Project Auditor needs Unity 6 or later and exits 6, instead of reporting that no Editor is running.
- Removal
`unity hub install` on macOS no longer leaves the Hub removed or half copied when you press Ctrl-C while it replaces it with administrator rights. The copy finishes, then the command stops.
- macOS
- Fix
`unity ` now hands a `unity-` plugin only the arguments after the command, even when an option before it has the same value as the command's name, as in `unity --cloudEnvironment dev dev serve` .
- Fix
`unity self-update` now names the file and says how to fix it when it can't write the partial download, instead of failing with a bare "Operation not permitted" or "Access is denied" message.
- Fix
`unity self-update` now checks it can write the CLI's install location before it downloads. If it can't (for example in `/usr/local/bin` without sudo), it says which path isn't writable and to rerun with write access or reinstall, instead of failing with a bare "Permission denied".
- Fix
`unity self-update --rollback ` now says when a kept backup has no version label, and names plain `unity self-update --rollback` as the way to restore the most recent one.
- Fix
A refused or unavailable sign-in broker, or a credential store that denies access, now fails `unity cloud` commands with its own error code ( `AUTH_BROKER_REFUSED` , `AUTH_BROKER_UNAVAILABLE` , `CREDENTIAL_STORE_ACCESS_DENIED` ) instead of `CLOUD_*_FAILED` , and it is no longer reported as a CLI crash. The exit code is unchanged.
- Fix
In human output, these failures show the broker's own message, such as "Unable to reach the sign-in service. Try again in a moment.", without the command's "Unable to list organizations:" prefix.
- Fix
`unity vcs switch` and `unity vcs worktree add` report an invalid branch name as a usage error (exit 2, code `VCS_INVALID_BRANCH_NAME` ) instead of a failed command, and no longer send a crash report for it.
- Fix
`unity vcs uvcs review --changeset` and `unity vcs uvcs review comments --changeset` no longer fail with a rejected request against Unity Cloud. The changeset filter is now sent in the format Cloud accepts.
- Fix
`unity assets inspect` no longer prints raw color codes from a package's entry paths in the human and tsv tables, so a package can't recolor or hide its own entry names. json and ndjson output is unchanged.
- Fix
`unity templates create` and `unity templates edit` now say what went wrong and what to do, instead of printing `UNABLE_CREATE_TPL` , `TEMPLATE_DESTINATION_NOT_WRITABLE` or `USER_TPL_EDIT` : a folder that isn't a Unity project, a templates folder you can't write to, or a template whose `package.json` can't be read. In JSON, `errors[0].code` names the failure (for example `TEMPLATES_CREATE_NOT_UNITY_PROJECT` or `TEMPLATES_EDIT_INVALID_MANIFEST` ) instead of `ERROR` .
- Fix
`unity assets inspect` and `unity assets import` with an extra operand now say `Expected 1 argument but got 2: a, b.` , like `unity open` and `unity projects info` , instead of `Expected 0 arguments but got 1: b.`
- Fix
`unity assets import` and `unity open --batchmode` now work on Linux with no display. An import always runs the Editor without graphics, and `--batchmode` does the same when neither `DISPLAY` nor `WAYLAND_DISPLAY` is set.
- Linux
- Fix
`unity templates edit` now changes only the fields you pass. Before, an edit without `--display-name` (for example only `--description` or `--preview-image` ) reset the template's display name to its package name.
- Fix
`unity vcs sync` on a Git LFS repository now brings in the new commits and reports a failed LFS download as a warning with exit code 6, instead of failing the pull when the LFS server is unreachable.
- Fix
`unity build` now fails with exit 6 when Unity exits 0 without a build result in its log and nothing was written to the output path, instead of reporting success.
- Fix
`unity build --create-profile` no longer leaves the helper's `.meta` file, or an `Assets/Editor` folder it created, in the project, so later Editor runs stop recreating empty `UnityCliTemp-*` folders.
- Fix
On Windows, pressing Ctrl+C while `unity build` , `unity build --create-profile` , `unity run` or `unity test` runs the Editor now exits 130 as an interruption. It no longer reports a missing result or a failed build (exit 6).
- Windows
- Fix
`test` , `run` and `build --create-profile` with `--allow-install --format ndjson` now end a failed run on a `success:false` `result` frame with the error code, after the install's own `result` frame. Before, the stream ended on the install's `success:true` frame while the command exited non-zero.
- Fix
`unity build run -- ` now runs that project's last build, like `unity build run ` , instead of failing with "isn't supported with these options or in this environment". An extra project name after `--` is the usual "too many arguments" usage error.
- Fix
`unity recompile` no longer fails with "Pipeline server returned 400 Bad Request" after a successful compile on Unity 6000.7 betas. A `400` or a `503` from the Editor during its domain reload is waited out, the command keeps polling, and it reads the compile status once more before it reports a failure.
- Fix
`unity recompile` reports compile warnings without `--strict` . They still fail the run only under `--strict` .
- Fix
`unity command` exits 6 with a `COMMAND_FAILED` error when the command's result reports `success: false` , or a `status` of `rejected` , `busy` , `failed` or `not_implemented` , instead of exiting 0. Editors whose Pipeline writes the command's output itself already set the exit code.
- Fix
`unity command` says the Editor exited, and may have crashed, when the Editor quits while running a command, instead of naming a refused evalToken or a timeout.
- Fix
`unity command` explains a `--instance` , `--pid` or `--port` typed after the command name that matches no Editor, and shows how to pass it to the command after `--` . When the command's parameter list is available, the hint appears only if the command has that parameter, and names it.
- Fix
`unity command` asks a project whose Pipeline package is older than 0.9 by the command's old name first, so the Editor console no longer gets an Error for the new name it doesn't know.
- Fix
`unity install-modules` no longer reads another release's module list for an Editor installed with `Unity.exe` straight in its version folder (as Unity's internal tools do). It now stops before any license question or download, for `unity editor module add` too, and tells you the Editor has no `Editor` folder to add modules to, instead of failing after the admin prompt with a generic installer error.
- Fix
`unity uninstall` and `unity editors prune --remove` now remove only an Editor's own folder when `Unity.exe` sits straight in its version folder. They used to delete the parent folder, and every other Editor version in it.
- Fix
`unity projects info` no longer reports `cloudEnabled: true` for a project that is not linked to a cloud project.
- Fix
`unity command --skill` accepts a plugin prefix such as `unity:ui` and uses the skill name after it.
- Fix
On Windows, a `unity self-update` whose file swap fails after exit no longer forgets the version you chose with `--target` . The next `unity` run puts it back.
- Windows
- Fix
`unity projects exec` with `--format json` , `ndjson` or `tsv` leads every line of a project's output on stderr with the project's name, so each project's output can be told apart.
- Fix
`unity projects exec` checks every project folder before it runs anything. A missing folder is reported by its path up front and no longer stops the run on the other projects.
- Fix
`unity status --until-ready` keeps waiting while the only open windows are the Editor's progress windows, such as "Hold on..." or "Reloading Domain".
- Windows
- Fix
A command blocked by an Editor window, not a message box, now says that no command can answer it and that it must be closed in the Editor, or shown with `unity command editor dialog` on an Editor that serves its own endpoint.
- Fix
`unity auth token` prints a token for a service account. Set `UNITY_CLOUD_PROJECT` to the ID of the project the token is for (a name is not accepted); without it, or with a name, the command exits 2 and says so, instead of reporting a connection problem.
- Fix
`unity auth broker ensure` starts the sign-in service when a proxy is configured, either a proxy variable such as `UNITY_PROXY` or `HTTPS_PROXY` or your system's proxy settings, instead of failing with `AUTH_BROKER_UNAVAILABLE` .
- Fix
`unity docs cache add` skips a docs page whose path has a segment over 128 characters or is over 256 characters long, so one such entry in the listing no longer makes every rerun fail with `DOCS_CACHE_INCOMPLETE` .
- Fix
A pager set in `UNITY_PAGER` or `PAGER` that fails without showing anything no longer loses the output when it is slow to start (for example `cmd /c exit 1` on Windows): the output is printed to the terminal instead.
- Windows
- Fix
`unity vcs affected` and `unity test --affected` no longer stop when an assembly definition repeats a key or holds a broken Unicode escape. They count that file as unreadable and carry on.
- Fix
`unity help ` and `unity help ` now report an unknown command and exit with code 2 when nothing is named `` . Before, they printed the root or group help and exited 0.
- Fix
`unity projects add` , `remove` , `pin` and `unpin` now end `--format ndjson` output with one `result` line, on success and on failure, as `--format json` ends with its envelope. Before, `add` printed bare paths, a failure printed only an error on stderr, and a damaged project list printed nothing on stdout.
- Fix
`unity editors upgrade` and `unity editors info` now fail when the releases service can't be reached or answers with an error status. Before, `editors upgrade` reported "Up to date" and exited 0, and `editors info` reported the version as not found and exited 11.
- Fix
`unity uninstall` with more than one version now reports "too many arguments" and exits with code 2. Before, it exited with code 1 and a message that the command isn't supported with these options.
- Fix
`unity auth revoke` now refuses an application name made only of spaces, tabs or invisible characters, as it already refuses an empty one. Before, it stored a blank revocation that `unity auth consumers` listed as an empty row.
- Fix
`unity logs --console --follow` and `unity recompile --strict` work again with Unity Pipeline 1.0.0-pre.1, which refuses the old `since_session` name. Both still send `since_session` , which every older package reads, and switch to `since-session` when the package refuses the old name.
- Fix
When a proxy auto-configuration (PAC) script lists several proxies and the first can't be reached, the CLI moves on to the next one. It connects directly only when the script allows it.
- Fix
On Windows, a proxy auto-config (PAC) script whose server cannot be reached, such as a company PAC while you are off the VPN, no longer stalls commands for about 20 seconds. The CLI gives up on the script after 10 seconds and falls back to your other proxy settings, or connects directly.
- Windows
- Fix
`unity build` through an Editor that already has the project open works again with Unity Pipeline 1.0.0, which refused the output directory under its old name and the build options as a plain string. The CLI still sends the old name first, which every older package reads, and switches to the new one when the package refuses it.
- Fix
`unity projects audit` runs against Pipeline 1.0.0 as well as older Pipeline packages, instead of failing on the first step with an empty reason.
- Fix
A usage mistake no longer fails with the "isn't supported with these options or in this environment" error (exit 1). A command with an extra word before `--help` , such as `unity projects info path --help` , prints that command's help.
- Fix
`unity docs --help` now says that `--manual` searches the manual, and names `unity docs toc --manual` to list its pages. `unity docs --content --manual` says the same when it has no page to print, instead of asking for a more specific name.
- Fix
The `unity docs --cli` example in `unity docs --help` now opens a page that exists.
- Fix
With `--json` or `--format ndjson` , commands run from Claude Code no longer print the Claude plugin hint line on stderr, so stderr carries only what a parser expects.
- Fix
`unity docs --url` no longer returns a page address that doesn't exist for a full API name such as `UnityEngine.Rigidbody.velocity` . When the page index has no such page, it returns a search address, as for any other name.