Unity CLI 1.0.0-beta.12
123 documented changes.
- Version
- 1.0.0-beta.12
- Released
- Sep 30, 2026
- Product
- Unity CLI
Unity CLI 1.0.0-beta.12
Security
- Security
`unity collaboration jira server add` , `update` , and `test` now take `--key-from-stdin` , which reads the Jira API token from stdin so it doesn't show in the process list or in CI logs that echo commands. Pipe the token in, for example `printf '%s' "$JIRA_TOKEN" | unity collaboration jira server test --organization-id --url --username --key-from-stdin` .
- Security
The CLI's logs and crash reports now fully mask email addresses whose domain ends in an internationalized top-level domain, such as `.рф` (written `xn--p1ai` ). Previously, the end of the domain was left in the clear next to the mask.
- Security
`unity bug` now removes user names and passwords embedded in URLs from the logs it attaches, including debug logs. Before, a credentialed URL in a debug log record, or one whose host was an IP address or `localhost` , was uploaded as written.
- Security
`unity bug` now also masks the OS account name embedded in the Unity auth broker's named pipe ( `Unity-auth-broker-` , with or without a CoCreate slot) in the log files it collects, matching the CLI's own log writer and the native Hub. Previously, a collected Editor or Licensing Client log that mentioned the broker's pipe path was uploaded with the account name in the clear.
- Security
On macOS, installing a plugin's runtime component now verifies the code signature of every native library it extracts, not just its main executable. Before, an unsigned or tampered library deep in the install could pass installation and only fail the first time something tried to load it.
- macOS
- Security
`unity plugin` now refuses a plugin download URL that hides a `..` behind an encoded slash or backslash (such as `..%2F` ), or that contains a control character (such as a tab or a line break), written out or percent-encoded (such as `%0c` ), or a non-ASCII character, or a `..` or `.` padded with spaces (such as `..%20` ). A plugin catalog naming such a URL, or repeating a JSON key, is treated as invalid, and the CLI falls back to its cached or built-in catalog.
- Security
A command run inside a piped `unity shell` session, or one driven with `unity shell --protocol ndjson` , can no longer read the lines meant for the shell. Before, `unity auth login --secret-from-stdin` , `--key-from-stdin` , and `--git-token-stdin` read from the same stdin as the shell, so the rest of a script could be sent to a server as the secret.
- Security
The helper that sends crash reports no longer inherits your whole environment. It receives only the variables it needs, so a credential such as `UNITY_SERVICE_ACCOUNT_SECRET` no longer reaches it.
Added
- Feature
`unity projects create --with-pipeline` adds the Pipeline package ( `com.unity.pipeline` ) to the new project, so an AI agent can drive the Editor as soon as it opens, without a separate `unity pipeline install` . The project is still created when the package can't be added (an editor older than Unity 6, or the registry is unreachable): you get a warning and exit code 0.
- Feature
`unity status --format json` shows whether a game in Play mode is actually running. While the Editor is in Play mode, each instance row carries `frameCount` and `playerLoopTicking` , passed through from the Editor.
- Feature
`unity install` , `unity install-modules` and `unity projects require` accept `--no-wait` and `--wait-timeout ` for when the Hub or another CLI is already installing. By default they still wait until that install finishes.
- Feature
Experimental, unsupported: on a Linux arm64 host you can opt in to running the x86_64 Unity Editor under FEX-Emu by setting `UNITY_EXPERIMENTAL_FEX_EMU=1` . It takes effect only when FEX-Emu and an x86_64 RootFS are installed, and `unity doctor` reports whether they are.
- Linux
- Feature
A registry plugin's published version can now state the minimum version of a runtime it needs. `unity plugin install` and `unity plugin upgrade` check it after resolving the runtime, and hold the tool back with a clear message naming the runtime and the version required, plus `unity plugin upgrade ` to fix it, rather than installing or upgrading a tool next to a runtime it can't actually use.
- Feature
`unity commands --grep ` searches the CLI's commands and its plugin catalog by keyword, so you can find the command for a task without paging through `--help` . It matches command names, descriptions, and options, and plugins whether or not they're installed; each result says whether it's a command or a plugin, and a plugin you haven't installed names the command that installs it.
- Feature
`unity plugin list` now shows a short description of what each plugin does, in every format (human, `--format json` , and `--format tsv` ), whether or not it's installed. It's the easiest way for a script or an agent to learn what plugins exist and what they're for.
- Feature
`unity plugin install` , `unity plugin upgrade` , `unity plugin list` and `unity doctor` now say where each runtime a plugin uses came from: `machine` for a copy that was already on your computer, `package-manager` for one installed through Homebrew, winget, apt or dnf, and `managed` for the Unity CLI's own download. JSON and NDJSON rows carry it as a new `source` field ( `null` for a tool), and TSV output adds it as a last column, so existing columns keep their positions.
- Feature
Running a not-installed catalog plugin's command now fails with the same clear message under `--format json` and `--format ndjson` as it already did in human output, wrapped in the usual error envelope under a stable code. A failed `unity plugin install` / `upgrade` download also now logs the actual reason, so `unity logs` shows what the on-screen message already tells you to look for.
- Feature
`unity skill disable ` and `unity skill enable ` turn an installed skill off and back on without uninstalling it, and `unity skill list` shows every tracked install with its state. Every installed skill's description is loaded into every session of the client that found it, whether or not the skill is ever used, so the cost is paid per skill installed rather than per skill useful on this project — and until now the only way to stop paying it was to delete the files by hand and edit the CLI's own install record, which the next `unity skill refresh` undid anyway.
- Feature
`unity pipeline cloud-build` and `unity pipeline automation` add twenty-four more read-only inventory commands across fourteen groups, extending the ten they shipped with. `cloud-build` gains `project get|stats` for the project already in scope, a `tooling` group with six lookups for what you can build with ( `unity` , `xcode` , `visual-studio` , `os` , `platforms` , `machine-types` — every one has `list` , and `unity` and `os` also have `get` ), and `targets groups` .
- Feature
`unity projects create` , `unity projects link cloud` , `unity projects link vcs` , and `unity vcs setup` accept `--coppa ` to set the COPPA status of a Unity Cloud project they create: `not_compliant` (the default, unchanged), `compliant` , or `unspecified` . When a command creates a cloud project, its output now names the COPPA status it sent, and JSON and NDJSON results include `coppa` .
- Feature
`UNITY_CLI_FTUE=1` turns on the agent first-session ("paved") mode. Every `--format json` envelope and ndjson result frame then carries `"paved": true` .
- Feature
A passthrough tool ( `unity uvcs` , `unity cm` , `unity ugs` , and any future curated tool) now gets `UNITY_CLI_INVOKED_AS` and `UNITY_CLI_CORE_VERSION` in its environment. `UNITY_CLI_INVOKED_AS` is the command you actually typed, for example `unity uvcs` , so a tool with more than one alias can show help and errors that match what you ran.
- Feature
`--format json` and `--format ndjson` output can now carry a `notifications` array telling you when a newer `unity` CLI is available, so scripts and AI agents find out without running a check of their own. Each entry has a `code` , a readable `message` , and a `remediation` naming the command that updates you.
- Feature
The CLI log now records every command you run, with its arguments, exit code, and duration, so `unity logs` and `unity bug` reports show what ran. Tokens, passwords, and credentialed URLs in arguments are redacted.
- Feature
`unity projects report` groups every registered project by the editor version its `ProjectVersion.txt` asks for, and flags a version that isn't installed and a version whose stream isn't LTS. It never installs, removes, or changes anything.
- Feature
`unity status` and `unity pipeline list` now show Multiplayer Play Mode virtual players, named by player (for example "Player 2") under the project they belong to. In JSON and NDJSON output, both commands add `role` , `instanceName` , and `vpId` , and `unity pipeline list` also adds `ownerProjectPath` .
- Feature
`unity changelog --target ` shows the release notes for a specific version, for example before you update with `unity self-update --target` .
- Feature
`unity templates list --format json` now accepts `--brief` , which trims the output to the same name, display name, type, version, and status columns the table view already shows. Use it when all you need is a template id: the full JSON output can run into the hundreds of KB.
- Feature
`unity status --until-ready` waits until a matching Editor reports `ready` and then prints the usual status, so you don't have to poll it after `unity open` or while an Editor enters Play mode. It also waits for an Editor that hasn't started yet, and `--timeout ` (default 300) sets how long it waits before it exits `6` with the last state it saw.
- Feature
`unity setup claude` installs Unity's Claude Code plugin, with its Unity skills, in one step: it adds the plugin's marketplace and installs the plugin through the `claude` CLI, and reports the plugin's version, whether it loads in this session or the next, and where its skills can be read right away. It's safe to re-run, since an existing install is reported rather than reinstalled.
- Feature
`unity projects info` now shows whether Developer Data diagnostics is on: the project's build-default setting and the file it came from, any build profile overrides, and the cloud link. `unity projects create` includes the same `diagnostics` block in its JSON and NDJSON result.
- Feature
`unity build` 's JSON and NDJSON result now includes `outputPath` , the absolute path of the build output. It's `null` only when you build with `--execute-method` and no `--output-path` , since your own build method decides where the output goes.
- Feature
`unity vcs providers` now lists `cm` , the Unity Version Control client, with the same path, version, and state `unity plugin list --versions` reports. Inside a Unity Version Control workspace with no `cm` installed, it suggests `unity plugin install uvcs` .
- Feature
The installers ( `install.sh` and `install.ps1` ) now end with a line for AI agents that names the command to start with: `UNITY_CLI_FTUE=1 unity auth status --json` , or `$env:UNITY_CLI_FTUE=1; unity auth status --json` in PowerShell. `install.sh` also prints plain text, without color codes, when its output isn't a terminal or `NO_COLOR` is set.
- Feature
`unity bug` now asks which part of Unity the issue is in: the CLI itself, the Pipeline package ( `com.unity.pipeline` ) in the Editor, the Editor, or not sure. Until now a report said nothing about where the failure was, so an Editor or Pipeline package failure that happened to show up in CLI output was routed as a CLI bug.
- Feature
`unity docs` now reaches Unity’s documentation platform as well as the Editor documentation: `--cli` for the Unity CLI, `--hub` for the Unity Hub, and `--cloud` for Unity Cloud. Those pages aren’t versioned by editor, so they take no `--editor-version` , and the four documentation selectors — including `--manual` — are mutually exclusive.
- Feature
`unity command --tags` asks for that same tag listing explicitly, and composes with the other listing filters: `unity command --tags --tag runtime` shows the tags within one subtree, `unity command --tags --query prefab` shows which tags have prefab-ish commands in them. It renders in every output format — a `tag` / `count` table under `--format tsv` , one object per tag under `--format ndjson` , and a `tags` array under `--format json` .
- Feature
`unity command --help` now ends with runnable examples — how to list the tags, how to list one tag's commands, how to run a command, and how to run one with arguments. `unity command` is the entry point to the Editor's whole command surface, and the help had no worked example of invoking anything through it.
- Feature
`unity bug --help` now points at `unity bug mcp` , a new way to add Unity’s Issue Tracker to an AI assistant so it can check for known issues before you file a report. It’s exactly `unity mcp configure --server issue-tracker` , so it takes the same client argument and the same `--list` , `--local` , `--yes` , and `--dry-run` flags.
- Feature
`unity projects create --template` now accepts a local template as well as a registry name: a path to a `.tgz` archive, or to a directory holding a `package.json` with a `name` field. The archive or directory is validated (the archive is checked as a readable `tar` stream, and a directory's `package.json` must parse and declare a `name` ) before it's handed to the Editor, with a clear error naming what's wrong.
- Fix
`unity pipeline upgrade` now shows what's changing: alongside the resolved version, it prints that version's release summary, and when the upgrade spans more than one published version, it shows every version in between too, oldest first, so a change in a version you're skipping past is never silently missed. `unity pipeline install --force` shows the same summaries when it moves an already-installed project to a newer version.
Changed
- Change
`unity status` no longer tells you to install the Pipeline package when you just did. If you install it while the project's Editor is already open, the Editor doesn't load it until its window regains focus.
- Change
`unity releases` , `unity projects list` , `unity context list` , `unity auth list` , `unity modules list` , `unity list` and `unity doctor` now end their `--format ndjson` output with a `{"type":"result"}` line, as `unity editors` already does, so a script can tell a complete listing from a cut-off one. The rows before it are unchanged, and the last line's `data.count` is the number of rows.
- Change
`unity assets export` now signs the `.unitypackage` it writes when the project uses Unity 6.6 or later, the same way the Editor's own Export Package window does. It signs for your organization: pass `--cloud-org ` , set `UNITY_CLOUD_ORG` , or rely on the default set with `unity cloud org set-default` .
- Change
On Windows, a runtime that a plugin needs (for example the Python a tool uses) now installs under `%LOCALAPPDATA%` instead of your roaming profile, so a domain roaming profile no longer copies it at every sign-in and sign-out. A runtime installed by an earlier version moves across the next time you install, upgrade, remove or run that plugin, and it keeps working until then.
- Windows
- Change
`unity command` with no command name now lists the Editor's command TAGS instead of every command it has. A connected Editor answers with around fifty tags and the number of commands under each, which fits on one screen; `unity command --tag ` then lists that tag's commands, and the count on a tag's row is exactly how many that will be.
- Change
A partial `--editor-version` that matches several installed patches now runs the newest one instead of refusing. `unity run --editor-version 6.6` with both `6000.6.0f1` and `6000.6.1f1` installed used to be an error; naming a line is a reasonable way to ask for an editor, and the two candidates differed only by a patch you had already said you did not care about.
- Fix
`unity open` and `unity projects open` now print a success document under `--format json` and `--format ndjson` , with the project path, the resolved Editor version and location, and the launched process id, instead of writing nothing on a healthy launch. If a script or agent relied on empty stdout to mean success, check `success` (or the exit code) instead.
- Change
`unity editors` , `unity editors upgrade --check` and `unity templates list` now end their `--format ndjson` output with a `{"type":"result"}` line, like every other ndjson command, so a script can tell a complete listing from a cut-off one. The rows before it are unchanged, and the last line's `data.count` is the number of rows.
- Change
The CI workflows `unity ci init` writes now install the CLI with the plain `install.sh` command, without setting `UNITY_CLI_CHANNEL=beta` . Until a stable release ships, the installer gets the latest beta on its own.
- Fix
`unity changelog` now downloads the running version's release notes instead of reading a copy built into the CLI, so corrected notes appear without an update. It needs a network connection.
- Change
Version options that look up a release now accept `latest` and a leading `v` , as in `v1.0.0` : `unity self-update --target` , `unity changelog --target` , `unity plugin changelog --version` , `unity hub install --hub-version` , and `unity pipeline install --package-version` .
- Change
`unity command ` now waits while the Editor is briefly unavailable, such as right after `editor_play` or during a script reload, and runs the command once the Editor is ready, within the command's `--timeout` . It only resends a command the Editor rejected without running it.
- Change
`unity --help` now describes what the CLI can do: install an Editor, create a project without the GUI, drive a running Editor, play and capture the game, and build it. It used to just say “CLI for Unity”.
- Change
`unity projects new --help` now says it never links to Unity Cloud, matching what it actually does. `unity projects create` still asks, and links by default.
- Change
`unity mcp configure claude-code` now checks whether a Claude Code plugin you have enabled already provides an MCP server that runs `unity mcp` for the same project. If one does, it warns and skips its own `claude mcp add` registration unless you confirm or pass `--yes` , so you don't end up with two copies of the same server.
- Change
`unity bug --area` now accepts `licensing` , for issues about licensing or signing in. On a terminal, "Licensing or signing in" now appears as a choice when the reporter answers the area question.
- Change
`unity plugin install ugs` and `unity plugin upgrade` now install version 2.0.0 of the Unity Gaming Services CLI, which `unity ugs` runs.
- Change
The CLI now uses Unity Licensing Client 1.19.0-rc.3. A client it downloaded under an earlier version is replaced the next time a `unity license` command or an Editor launch needs it.
- Change
The first-run analytics consent prompt now uses its reviewed wording. It asks about sharing usage analytics, offers “Yes, share” and “No, don’t share”, and explains the anonymous usage count once, in a note above the choices.
Fixed
- Fix
On macOS, the CLI no longer removes Unity Hub’s keychain access to your shared sign-in when it saves a refreshed token. It now updates the saved sign-in instead of re-creating it.
- macOS
- Removal
A path, version, or other value that contains a terminal control code such as `ESC[?25l` or `ESC[12~` no longer leaves that code's text, such as `[?25l` or `[12~` , in the CLI's output; the whole code is removed.
- Fix
Using the CLI no longer removes the Hub’s saved sign-in. Before, the first `unity` command after you signed in through the Hub could leave the Hub signed out at its next launch, or, on macOS, asking for keychain access again.
- macOS
- Fix
`unity doctor --format json` no longer crashes on a Linux machine with a provisioned auth broker. The report's `authBroker.storeOwnerUid` field now shows the broker store's owning user id as a number, and stays `null` when it can't be read.
- Linux
- Removal
`unity doctor --format tsv` no longer passes control characters from the values it reports straight to your terminal. In a path, an account name, an editor entry, a log line or a proxy setting, a tab, newline or carriage return now becomes a space and other control characters and terminal control sequences are removed, as the rest of the CLI's tables already do, so a value can't split a row into extra columns or add a row of its own.
- Fix
On macOS and Linux, the Editor sign-in helper that `unity open` starts, the auth broker, and the Unity Licensing Client no longer keep you from ejecting or unmounting the drive you ran `unity` from. They now run from the root directory instead of the folder you were in.
- macOS
- Linux
- Fix
On Linux, a browser that `unity` opens, for example for `unity auth login` , `unity docs` or a WebGL `unity build run` , no longer keeps you from unmounting or ejecting the drive you ran `unity` from while it stays open. The browser opener now runs from the root directory instead of the folder you were in.
- Linux
- Fix
When `unity command ` fails, its error is printed once. It used to appear twice: once under `❌ Command '' failed:` and again as a plain `Error:` line just before the `For more details:` hints.
- Removal
A path, version, or other value that contains a truecolor color code written with colons (for example `ESC[38:2::255:0:0m` ) no longer leaves that code's text, such as `[38:2::255:0:0m` , in the CLI's output; the whole code is removed, as the semicolon form already was.
- Fix
`unity projects require --format json` now writes exactly one JSON document to stdout when it installs the editor, as `unity install --format json` does. It used to print install progress lines ahead of the result, so a script that parsed stdout as JSON failed.
- Fix
`unity projects upgrade` , `unity vcs git worktree add --install-editor` , and `unity build` , `unity run` and `unity test` with `--allow-install` no longer print install progress lines ahead of their `--format json` result when they install an editor first. Any install warnings now appear in the result's `warnings` , and `--format ndjson` keeps its progress lines.
- Fix
A failed `unity plugin install` or `unity plugin upgrade` no longer deletes the plugin you already had. If the new version can't be put in place, the previous one is restored and keeps working, and a read-only checksum file left by an earlier install no longer makes an upgraded plugin look out of date.
- Fix
On Windows, `unity self-update` now reports when another program is holding the CLI's executable open, instead of saying the update was staged and then leaving the old version in place. It names the programs using the file when Windows can tell, and asks you to close them or restart your computer before running `unity self-update` again.
- Windows
- Fix
`unity command` now removes the Editor's truecolor styling from a task name in its progress bar and in the `--format ndjson` progress messages, including the colon-separated form some tools write. That form used to pass through, which could cut the bar's label short or color the rest of the line, and left escape bytes in the ndjson `msg` .
- Fix
`unity command` now reports an Editor's argument error at once when the error's text happens to start with "Cannot connect to Unity Editor Pipeline server at". It used to read that answer as the Editor being unreachable and keep resending the command until `--timeout` ran out.
- Fix
`unity recompile` and `unity mcp` now treat that same kind of Editor argument error as an answer, not a lost connection. `unity recompile` exits with 6 (command failed) instead of 7 (network unreachable), and `unity mcp` returns the error at once instead of dropping its connection, waiting out a status poll, or sending a desktop screenshot in place of a failed capture.
- Fix
`unity install` and `unity install-modules` now wait while the Unity Hub or another `unity` command is installing on the same machine, instead of failing. The CLI prints “Waiting for another install to finish before continuing…” once, then continues on its own when the other install finishes, so two installers never write into one editor at the same time.
- Fix
A project command that changes your project list no longer replaces it when the list can't be read. The Unity CLI and Unity Hub share the project list, and a failed read (for example, a permission error, or Unity Hub holding the file) used to leave the CLI with an empty list, so adding, removing or pinning a project saved only that one change over every project you had.
- Fix
A setting change no longer wipes your other settings when the shared settings file can't be read. The Unity CLI and Unity Hub share one settings file, and a failed read (for example, a permission error or another program holding the file) used to replace every setting in it, Unity Hub's included, with the one you were changing.
- Fix
A file the Unity CLI shares with Unity Hub is no longer wiped when it can't be read or lists the same name twice, including your settings, located Editors, hidden Editor folders, paused downloads, proxy settings, project defaults, and template settings. The change is refused with an error that says why, or skipped with a warning when the rest of the command already finished, and the file stays as it was.
- Fix
`unity plugin list` fits its table to the terminal. A long path used to push every row past the terminal edge, so rows wrapped and blank lines appeared between them.
- Fix
`unity plugin upgrade` and `unity plugin changelog` no longer show internal notes in the one-line summary for the Unity Licensing Client, Unity Gaming Services CLI, Unity Version Control, and Pipeline package entries. The summaries now describe each version in plain language.
- Fix
`unity templates create --name` now accepts a name written only in a non-Latin script, such as Japanese or Cyrillic, instead of rejecting it for having no usable characters. The template is stored under a generated ASCII id, and `--display-name` stays what the template shows.
- Fix
On macOS, `unity modules list` , `unity editor module list` , `unity install-modules` , and `unity install --dry-run` now show download and install sizes in the same units as the Hub and Finder, where 1 GB is 1,000,000,000 bytes. They used to divide by 1024, so Android Build Support read 2.36 GB in the CLI and 2.53 GB in the Hub.
- macOS
- Android
- Fix
The `notifications` array now reaches the `--format json` output of every command, matching `--format ndjson` . Many commands, including the `vcs` , `plugin` , `assets` , and most `projects` commands, left it out of their JSON.
- Fix
A sign-in that actually succeeded is no longer reported as `KEYRING_WRITE_FAILED` . After writing your credential, the CLI reads it straight back to confirm it was really stored — a check that exists because some keyrings report a successful write and keep nothing.
- Fix
`unity doctor` now always reports the auth broker, on every platform. The section used to appear only on Linux, or on a machine that already had a sealed credential store — so on Windows and macOS a healthy broker, a broker that was refusing this program, and a broken build all produced the same report: no section at all.
- Windows
- macOS
- Linux
- Removal
`unity projects link cloud` no longer fails with `ALREADY_LINKED` on a project whose Unity Cloud link was removed from `ProjectSettings/ProjectSettings.asset` but is still recorded in the Unity Hub project list, for example after unlinking the project in the Editor. The project now links, and both places get the new link.
- Fix
A download that gets cut off partway through now resumes instead of restarting from scratch. Before this fix, a connection dropping mid-download deleted the partial file and failed the whole operation, even though the file could have been resumed.
- Fix
`unity releases` no longer waits forever when the Unity release service accepts the connection and then stops responding. Each request now times out after 10 seconds, so the command succeeds or fails within about half a minute.
- Fix
`unity projects create --cloud` , `unity projects link cloud` and `unity projects link vcs --vcs uvcs` no longer report a Unity Cloud link that wasn’t saved. When the project’s `ProjectSettings/ProjectSettings.asset` can’t be updated (for example because it doesn’t exist yet, or has no Unity Cloud fields to update), the Editor and `unity projects info` see no link, yet the command used to say it linked.
- Fix
`unity projects add` on a case-sensitive volume no longer records a project whose path differs from an already registered project only by letter case as if it were that project. It used to copy the registered project’s path into the new registry row, so the next `projects` command that loaded the registry folded the two rows together and deleted one.
- Fix
On Windows, `unity self-update` , `unity self-update --rollback` , and `unity self-install` now complete while other `unity` processes are running, such as an MCP server started by an AI client or a `unity shell` session. Before, the update reported itself as staged and then silently kept the old version until every other `unity` process had exited.
- Windows
- Fix
A mistyped command no longer reports success when you add `--help` . `unity project --help` printed the top-level help and exited 0 — output byte-identical to a bare `unity --help` , so the token you typed left no trace at all — while `unity project` on its own already printed `unknown command 'project' (Did you mean 'projects'?)` and exited 2.
- Fix
Interrupting `unity auth login` while it waits for you to sign in in the browser now always exits `130` for Ctrl-C and `143` for SIGTERM. If the signal arrived while the CLI was checking whether you'd finished signing in, it used to print `Sign-in failed: canceled` and exit `3` .
- Fix
`unity run` , `unity build run` , `unity test` and `unity assets import` now exit `130` when you stop them with Ctrl-C and `143` on SIGTERM. A plain `unity run` (without `--command` ), `unity test` and `unity assets import` also stop the Editor they started, so a CI timeout that kills only the CLI no longer leaves that Editor running and holding the project, and an interrupted `unity test --retries` run starts no further attempt.
- Fix
The "multiple editors found" error now names the ambiguity it actually hit. Passing a partial `--editor-version` — `6.6` with both `6000.6.0f1` and `6000.6.1f1` installed — matched two editors and told you to `Pass --architecture to disambiguate` , which cannot work: those two candidates share an architecture, so the suggested flag had nothing to choose between and the only way forward was guessing that the full version would help.
- Removal
`logs/cli-log.json` now records what each run did, instead of repeating the same block of startup lines on every run. Those lines are now written only to `debug-log.json` , and the ones describing things the CLI never checked or did, such as a first-time-user check that always reported `firstTimeUser: true` , are removed.
- Fix
On Linux, `unity uninstall` and `unity editors prune --remove` no longer hide an editor version from your desktop's application menu when another install of that version remains, such as the other architecture. The menu entry now points at the remaining install.
- Linux
- Fix
`unity logs` now shows the time each record was written, instead of the time you ran the command.
- Fix
When a command running in the Unity Editor fails with an error that mentions a refused connection, for example a web request inside the command, the CLI now shows the Editor's error. It used to report that it couldn't connect to the Editor and drop the Editor's message.
- Fix
`unity recompile` and `unity mcp` now also show the Editor's error when it mentions a reset or timed-out connection, or a server the command couldn't connect to, instead of treating the Editor as unreachable.
- Fix
`unity mcp` 's `capture_game_view` and `capture_scene_view` now fall back to a desktop screenshot when the Editor doesn't answer in time, as they already did when a dialog blocked the Editor. `unity recompile` now exits with code 7 instead of 6 when the Editor drops its recompile request or doesn't answer it in time, so a CI step can retry it.
- Fix
`unity command` no longer reports multiple candidate Editors for a project running Multiplayer Play Mode virtual players. It picks the main Editor; pass a clone's folder to `--project-path` to target the clone.
- Fix
On a machine where the auth broker protects your sign-in with a local key file, because no TPM, DPAPI, keyring, or Keychain is available, two first-time sign-ins running at once on a busy machine no longer fail to save your session. A first sign-in interrupted by a full disk also no longer leaves behind an empty key file that stops every later sign-in from being saved.
- Fix
On macOS, and on Linux machines with no machine ID, the auth broker no longer loses your first saved sign-in when two `unity` commands run at once. Before, the next command could ask you to sign in again.
- macOS
- Linux
- Fix
On Windows, when a program runs `unity` and captures its output, the capture no longer waits for the auth broker to exit. The broker could inherit a copy of the output pipe from that program and hold it open until it went idle, two minutes after the last command.
- Windows
- Fix
On Windows, the background identity server that `unity open` starts now keeps accepting connections while it checks a new one, so requests to it no longer time out and get dropped. `unity close` now reliably lets it exit early once no Editor is using it, and a second `unity open --cloudEnvironment` reliably switches it to the new environment.
- Windows
- Fix
On Windows, the background identity server that `unity open` starts now refuses a connection made through the network redirector (a `\\localhost\pipe\...` connection, as opposed to a direct local one), and grants access to its pipe only to the account that started it. Before, that network path reached the identity server exactly the way a genuinely local Editor does, and any other account on the machine could open the pipe directly.
- Windows
- Fix
On Windows, the auth broker now keeps accepting connections while it checks a new one. Before, a command that reached it during that check could conclude that no broker was running, so `unity self-update` , and the Hub when it installs the CLI, could fail to replace the binary the broker runs from with "Access to the path is denied".
- Windows
- Fix
On Windows, `unity self-update` , and the Hub when it installs the CLI, now also reach an auth broker that has only just started. Before, a broker still starting up could look as if none was running, so replacing the binary it runs from could fail with "Access to the path is denied".
- Windows
- Fix
On Windows, capturing the output of `unity open` no longer waits until five minutes after the Editor closes, and capturing `unity build run` no longer waits for the player to close. A `unity license` command that starts the Unity Licensing Client no longer waits for the client to exit.
- Windows
- Fix
On macOS and Linux, a `unity` command whose output is captured or piped no longer keeps its reader waiting after it finishes when the caller handed it an extra open descriptor, such as a shell’s `3>&1` . The Editor, the Unity Licensing Client, and the background processes the CLI starts no longer receive that descriptor.
- macOS
- Linux
- Fix
On Windows, saving a setting, for example with `unity config set` , no longer fails with "Access to the path is denied" when another program, such as the Hub, has the settings file open at the same moment.
- Windows
- Fix
A failed command's entry in `cli-log.json` is now short and readable: it names the command, the error code, and the error message once, instead of repeating the message five times. When there's more to the failure than the message, such as the connection error behind "Unable to reach the Unity release service", the entry adds it as the cause.
- Fix
`cli-log.json` now records a failure as a warning when it's your mistake or a setup problem, and as an error only when it could be a problem in the CLI itself. A mistyped `unity command` name, a missing parameter, an Editor version that isn't installed, and a signed-out session are now warnings wherever they happen.
- Fix
`unity install lts` no longer picks a release Unity marked Supported just because its version number looks like an LTS one. It installs the newest release Unity marks LTS.
- Fix
`unity auth login --secret-from-stdin` no longer waits forever. If stdin is a terminal, it now stops right away and asks you to pipe the secret in.
- Fix
On Windows, the CLI stores your sign-in as a single Credential Manager entry shared with Unity Hub, which prevents occasional sign-outs when both refresh your session at the same time. An older multi-entry record converts on your next session refresh.
- Windows
- Fix
In `cmd.exe` and other windows run by the classic Windows console, the CLI no longer prints raw escape codes such as `←[36m` instead of colors. This affected the release notes and the update prompt in `unity self-update` , and could affect any colored output.
- Windows
- Fix
On macOS and Linux, pressing Ctrl-C during a `unity license` command no longer also stops the Unity Licensing Client that command started. The client keeps running for the Editor and for later commands, as it does when the command finishes on its own.
- macOS
- Linux
- Fix
On Windows, `unity self-update` and `unity self-install` can now replace the CLI while its background auth broker, or the identity server `unity open` starts, is still running. They move the running copy aside and put the new one in its place without waiting for those processes to exit, and `unity self-update` reports success only after the new version is in place.
- Windows
- Fix
Installing an Editor or module no longer fails a size check on an installer that downloaded correctly. The release catalog lists each download’s size rounded down to a whole kilobyte, so a file whose real size wasn’t a multiple of 1,024 bytes was rejected.