Unity CLI release notes for September 2026
Learn about the Unity CLI releases in September 2026.
Read time 78 minutesLast updated a day ago
This page contains the release notes for the Unity CLI versions released in September 2026, from newest to oldest.
1.0.0-beta.12
Release date: September 30, 2026
-
Security
-
,
unity collaboration jira server add, andupdatenow taketest, 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--key-from-stdin.printf '%s' "$JIRA_TOKEN" | unity collaboration jira server test --organization-id <id> --url <url> --username <name> --key-from-stdin -
The CLI's logs and crash reports now fully mask email addresses whose domain ends in an internationalized top-level domain, such as(written
.рф). Previously, the end of the domain was left in the clear next to the mask.xn--p1ai -
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
unity bug, was uploaded as written.localhost -
now also masks the OS account name embedded in the Unity auth broker's named pipe (
unity bug, 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.Unity-auth-broker-<account> -
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.
-
now refuses a plugin download URL that hides a
unity pluginbehind an encoded slash or backslash (such as..), or that contains a control character (such as a tab or a line break), written out or percent-encoded (such as..%2F), or a non-ASCII character, or a%0cor..padded with spaces (such as.). 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...%20 -
A command run inside a pipedsession, or one driven with
unity shell, can no longer read the lines meant for the shell. Before,unity shell --protocol ndjson,unity auth login --secret-from-stdin, and--key-from-stdinread from the same stdin as the shell, so the rest of a script could be sent to a server as the secret.--git-token-stdin -
The helper that sends crash reports no longer inherits your whole environment. It receives only the variables it needs, so a credential such asno longer reaches it.
UNITY_SERVICE_ACCOUNT_SECRET
-
-
Added
-
adds the Pipeline package (
unity projects create --with-pipeline) to the new project, so an AI agent can drive the Editor as soon as it opens, without a separatecom.unity.pipeline. 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.unity pipeline install -
shows whether a game in Play mode is actually running. While the Editor is in Play mode, each instance row carries
unity status --format jsonandframeCount, passed through from the Editor.playerLoopTicking -
,
unity installandunity install-modulesacceptunity projects requireand--no-waitfor when the Hub or another CLI is already installing. By default they still wait until that install finishes.--wait-timeout <seconds> -
Experimental, unsupported: on a Linux arm64 host you can opt in to running the x86_64 Unity Editor under FEX-Emu by setting. It takes effect only when FEX-Emu and an x86_64 RootFS are installed, and
UNITY_EXPERIMENTAL_FEX_EMU=1reports whether they are.unity doctor -
A registry plugin's published version can now state the minimum version of a runtime it needs.and
unity plugin installcheck it after resolving the runtime, and hold the tool back with a clear message naming the runtime and the version required, plusunity plugin upgradeto fix it, rather than installing or upgrading a tool next to a runtime it can't actually use.unity plugin upgrade <runtime> -
searches the CLI's commands and its plugin catalog by keyword, so you can find the command for a task without paging through
unity commands --grep <pattern>. 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.--help -
now shows a short description of what each plugin does, in every format (human,
unity plugin list, and--format json), 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.--format tsv -
,
unity plugin install,unity plugin upgradeandunity plugin listnow say where each runtime a plugin uses came from:unity doctorfor a copy that was already on your computer,machinefor one installed through Homebrew, winget, apt or dnf, andpackage-managerfor the Unity CLI's own download. JSON and NDJSON rows carry it as a newmanagedfield (sourcefor a tool), and TSV output adds it as a last column, so existing columns keep their positions.null -
A command from a catalog plugin that you have not installed now fails with the same clear message underand
--format jsonas it already did in human output, wrapped in the usual error envelope under a stable code. A failed--format ndjson/unity plugin installdownload also now logs the actual reason, soupgradeshows what the on-screen message already tells you to look for.unity logs -
and
unity skill disable <skill>turn an installed skill off and back on without uninstalling it, andunity skill enable <skill>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 nextunity skill listundid anyway.unity skill refresh -
and
unity pipeline cloud-buildadd twenty-four more read-only inventory commands across fourteen groups, extending the ten they shipped with.unity pipeline automationgainscloud-buildfor the project already in scope, aproject get|statsgroup with six lookups for what you can build with (tooling,unity,xcode,visual-studio,os,platforms— every one hasmachine-types, andlistandunityalso haveos), andget.targets groups -
,
unity projects create,unity projects link cloud, andunity projects link vcsacceptunity vcs setupto set the COPPA status of a Unity Cloud project they create:--coppa <status>(the default, unchanged),not_compliant, orcompliant. When a command creates a cloud project, its output now names the COPPA status it sent, and JSON and NDJSON results includeunspecified.coppa -
turns on the agent first-session ("paved") mode. Every
UNITY_CLI_FTUE=1envelope and ndjson result frame then carries--format json."paved": true -
A passthrough tool (,
unity uvcs,unity cm, and any future curated tool) now getsunity ugsandUNITY_CLI_INVOKED_ASin its environment.UNITY_CLI_CORE_VERSIONis the command you actually typed, for exampleUNITY_CLI_INVOKED_AS, so a tool with more than one alias can show help and errors that match what you ran.unity uvcs -
and
--format jsonoutput can now carry a--format ndjsonarray telling you when a newernotificationsCLI is available, so scripts and AI agents find out without running a check of their own. Each entry has aunity, a readablecode, and amessagenaming the command that updates you.remediation -
The CLI log now records every command you run, with its arguments, exit code, and duration, soand
unity logsreports show what ran. Tokens, passwords, and credentialed URLs in arguments are redacted.unity bug -
groups every registered project by the editor version its
unity projects reportasks for, and flags a version that isn't installed and a version whose stream isn't LTS. It never installs, removes, or changes anything.ProjectVersion.txt -
and
unity statusnow 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 addunity pipeline list,role, andinstanceName, andvpIdalso addsunity pipeline list.ownerProjectPath -
shows the release notes for a specific version, for example before you update with
unity changelog --target <version>.unity self-update --target -
now accepts
unity templates list --format json, 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.--brief -
waits until a matching Editor reports
unity status --until-readyand then prints the usual status, so you don't have to poll it afterreadyor while an Editor enters Play mode. It also waits for an Editor that hasn't started yet, andunity open(default 300) sets how long it waits before it exits--timeout <seconds>with the last state it saw.6 -
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
unity setup claudeCLI, 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.claude -
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 infoincludes the sameunity projects createblock in its JSON and NDJSON result.diagnostics -
's JSON and NDJSON result now includes
unity build, the absolute path of the build output. It'soutputPathonly when you build withnulland no--execute-method, since your own build method decides where the output goes.--output-path -
now lists
unity vcs providers, the Unity Version Control client, with the same path, version, and statecmreports. Inside a Unity Version Control workspace with nounity plugin list --versionsinstalled, it suggestscm.unity plugin install uvcs -
The installers (and
install.sh) now end with a line for AI agents that names the command to start with:install.ps1, orUNITY_CLI_FTUE=1 unity auth status --jsonin PowerShell.$env:UNITY_CLI_FTUE=1; unity auth status --jsonalso prints plain text, without color codes, when its output isn't a terminal orinstall.shis set.NO_COLOR -
now asks which part of Unity the issue is in: the CLI itself, the Pipeline package (
unity bug) 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.com.unity.pipeline -
now reaches Unity’s documentation platform as well as the Editor documentation:
unity docsfor the Unity CLI,--clifor the Unity Hub, and--hubfor Unity Cloud. Those pages aren’t versioned by editor, so they take no--cloud, and the four documentation selectors — including--editor-version— are mutually exclusive.--manual -
asks for that same tag listing explicitly, and composes with the other listing filters:
unity command --tagsshows the tags within one subtree,unity command --tags --tag runtimeshows which tags have prefab-ish commands in them. It renders in every output format — aunity command --tags --query prefab/tagtable undercount, one object per tag under--format tsv, and a--format ndjsonarray undertags.--format json -
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 --helpis the entry point to the Editor's whole command surface, and the help had no worked example of invoking anything through it.unity command -
now points at
unity bug --help, 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 exactlyunity bug mcp, so it takes the same client argument and the sameunity mcp configure --server issue-tracker,--list,--local, and--yesflags.--dry-run -
now accepts a local template as well as a registry name: a path to a
unity projects create --templatearchive, or to a directory holding a.tgzwith apackage.jsonfield. The archive or directory is validated (the archive is checked as a readablenamestream, and a directory'starmust parse and declare apackage.json) before it's handed to the Editor, with a clear error naming what's wrong.name -
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 upgradeshows the same summaries when it moves an already-installed project to a newer version.unity pipeline install --force
-
-
Changed
-
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.
unity status -
,
unity releases,unity projects list,unity context list,unity auth list,unity modules listandunity listnow end theirunity doctoroutput with a--format ndjsonline, as{"type":"result"}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'sunity editorsis the number of rows.data.count -
now signs the
unity assets exportit 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.unitypackage, set--cloud-org <id-or-name>, or rely on the default set withUNITY_CLOUD_ORG.unity cloud org set-default -
On Windows, a runtime that a plugin needs (for example the Python a tool uses) now installs underinstead 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.
%LOCALAPPDATA% -
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 commandthen lists that tag's commands, and the count on a tag's row is exactly how many that will be.unity command --tag <tag> -
A partialthat matches several installed patches now runs the newest one instead of refusing.
--editor-versionwith bothunity run --editor-version 6.6and6000.6.0f1installed 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.6000.6.1f1 -
and
unity opennow print a success document underunity projects openand--format json, 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--format ndjson(or the exit code) instead.success -
,
unity editorsandunity editors upgrade --checknow end theirunity templates listoutput with a--format ndjsonline, 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{"type":"result"}is the number of rows.data.count -
The CI workflowswrites now install the CLI with the plain
unity ci initcommand, without settinginstall.sh. Until a stable release ships, the installer gets the latest beta on its own.UNITY_CLI_CHANNEL=beta -
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.
unity changelog -
Version options that look up a release now acceptand a leading
latest, as inv:v1.0.0,unity self-update --target,unity changelog --target,unity plugin changelog --version, andunity hub install --hub-version.unity pipeline install --package-version -
now waits while the Editor is briefly unavailable, such as right after
unity command <name>or during a script reload, and runs the command once the Editor is ready, within the command'seditor_play. It only resends a command the Editor rejected without running it.--timeout -
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”.
unity --help -
now says it never links to Unity Cloud, matching what it actually does.
unity projects new --helpstill asks, and links by default.unity projects create -
now checks whether a Claude Code plugin you have enabled already provides an MCP server that runs
unity mcp configure claude-codefor the same project. If one does, it warns and skips its ownunity mcpregistration unless you confirm or passclaude mcp add, so you don't end up with two copies of the same server.--yes -
now accepts
unity bug --area, 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.licensing -
and
unity plugin install ugsnow install version 2.0.0 of the Unity Gaming Services CLI, whichunity plugin upgraderuns.unity ugs -
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 acommand or an Editor launch needs it.
unity license -
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
-
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.
-
A path, version, or other value that contains a terminal control code such asor
ESC[?25lno longer leaves that code's text, such asESC[12~or[?25l, in the CLI's output; the whole code is removed.[12~ -
Using the CLI no longer removes the Hub’s saved sign-in. Before, the firstcommand 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.
unity -
no longer crashes on a Linux machine with a provisioned auth broker. The report's
unity doctor --format jsonfield now shows the broker store's owning user id as a number, and staysauthBroker.storeOwnerUidwhen it can't be read.null -
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.
unity doctor --format tsv -
On macOS and Linux, the Editor sign-in helper thatstarts, the auth broker, and the Unity Licensing Client no longer keep you from ejecting or unmounting the drive you ran
unity openfrom. They now run from the root directory instead of the folder you were in.unity -
On Linux, a browser thatopens, for example for
unity,unity auth loginor a WebGLunity docs, no longer keeps you from unmounting or ejecting the drive you ranunity build runfrom while it stays open. The browser opener now runs from the root directory instead of the folder you were in.unity -
Whenfails, its error is printed once. It used to appear twice: once under
unity command <name>and again as a plain❌ Command '<name>' failed:line just before theError:hints.For more details: -
A path, version, or other value that contains a truecolor color code written with colons (for example) no longer leaves that code's text, such as
ESC[38:2::255:0:0m, in the CLI's output; the whole code is removed, as the semicolon form already was.[38:2::255:0:0m -
now writes exactly one JSON document to stdout when it installs the editor, as
unity projects require --format jsondoes. It used to print install progress lines ahead of the result, so a script that parsed stdout as JSON failed.unity install --format json -
,
unity projects upgrade, andunity vcs git worktree add --install-editor,unity buildandunity runwithunity testno longer print install progress lines ahead of their--allow-installresult when they install an editor first. Any install warnings now appear in the result's--format json, andwarningskeeps its progress lines.--format ndjson -
A failedor
unity plugin installno 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.unity plugin upgrade -
On Windows,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-updateagain.unity self-update -
now removes the Editor's truecolor styling from a task name in its progress bar and in the
unity commandprogress 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--format ndjson.msg -
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
unity commandran out.--timeout -
and
unity recompilenow treat that same kind of Editor argument error as an answer, not a lost connection.unity mcpexits with 6 (command failed) instead of 7 (network unreachable), andunity recompilereturns 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.unity mcp -
and
unity installnow wait while the Unity Hub or anotherunity install-modulescommand 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.unity -
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.
-
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.
-
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.
-
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.
unity plugin list -
and
unity plugin upgradeno 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.unity plugin changelog -
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
unity templates create --namestays what the template shows.--display-name -
On macOS,,
unity modules list,unity editor module list, andunity install-modulesnow 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.unity install --dry-run -
Thearray now reaches the
notificationsoutput of every command, matching--format json. Many commands, including the--format ndjson,vcs,plugin, and mostassetscommands, left it out of their JSON.projects -
A sign-in that actually succeeded is no longer reported as. 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.
KEYRING_WRITE_FAILED -
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.
unity doctor -
no longer fails with
unity projects link cloudon a project whose Unity Cloud link was removed fromALREADY_LINKEDbut 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.ProjectSettings/ProjectSettings.asset -
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.
-
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.
unity releases -
,
unity projects create --cloudandunity projects link cloudno longer report a Unity Cloud link that wasn’t saved. When the project’sunity projects link vcs --vcs uvcscan’t be updated (for example because it doesn’t exist yet, or has no Unity Cloud fields to update), the Editor andProjectSettings/ProjectSettings.assetsee no link, yet the command used to say it linked.unity projects info -
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
unity projects addcommand that loaded the registry folded the two rows together and deleted one.projects -
On Windows,,
unity self-update, andunity self-update --rollbacknow complete while otherunity self-installprocesses are running, such as an MCP server started by an AI client or aunitysession. Before, the update reported itself as staged and then silently kept the old version until every otherunity shellprocess had exited.unity -
A mistyped command no longer reports success when you add.
--helpprinted the top-level help and exited 0 — output byte-identical to a bareunity project --help, so the token you typed left no trace at all — whileunity --helpon its own already printedunity projectand exited 2.unknown command 'project' (Did you mean 'projects'?) -
If you interruptwhile it waits for you to sign in in the browser, it now always exits
unity auth loginfor Ctrl-C and130for SIGTERM. If the signal arrived while the CLI was checking whether you'd finished signing in, it used to print143and exitSign-in failed: canceled.3 -
,
unity run,unity build runandunity testnow exitunity assets importwhen you stop them with Ctrl-C and130on SIGTERM. A plain143(withoutunity run),--commandandunity testalso 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 interruptedunity assets importrun starts no further attempt.unity test --retries -
The "multiple editors found" error now names the ambiguity it actually hit. Passing a partial—
--editor-versionwith both6.6and6000.6.0f1installed — matched two editors and told you to6000.6.1f1, 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.Pass --architecture to disambiguate -
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
logs/cli-log.json, and the ones describing things the CLI never checked or did, such as a first-time-user check that always reporteddebug-log.json, are removed.firstTimeUser: true -
On Linux,and
unity uninstallno 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.unity editors prune --remove -
now shows the time each record was written, instead of the time you ran the command.
unity logs -
If a command that runs 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.
-
and
unity recompilenow 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.unity mcp -
's
unity mcpandcapture_game_viewnow fall back to a desktop screenshot when the Editor doesn't answer in time, as they already did when a dialog blocked the Editor.capture_scene_viewnow 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.unity recompile -
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
unity commandto target the clone.--project-path -
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.
-
On macOS, and on Linux machines with no machine ID, the auth broker no longer loses your first saved sign-in when twocommands run at once. Before, the next command could ask you to sign in again.
unity -
On Windows, when a program runsand 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.
unity -
On Windows, the background identity server thatstarts now keeps accepting connections while it checks a new one, so requests to it no longer time out and get dropped.
unity opennow reliably lets it exit early once no Editor is using it, and a secondunity closereliably switches it to the new environment.unity open --cloudEnvironment -
On Windows, the background identity server thatstarts now refuses a connection made through the network redirector (a
unity openconnection, 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.\\localhost\pipe\... -
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, 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".
unity self-update -
On Windows,, 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".
unity self-update -
On Windows, capturing the output ofno longer waits until five minutes after the Editor closes, and capturing
unity openno longer waits for the player to close. Aunity build runcommand that starts the Unity Licensing Client no longer waits for the client to exit.unity license -
On macOS and Linux, acommand 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
unity. The Editor, the Unity Licensing Client, and the background processes the CLI starts no longer receive that descriptor.3>&1 -
On Windows, saving a setting, for example with, 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.
unity config set -
A failed command's entry inis 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.
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
cli-log.jsonname, a missing parameter, an Editor version that isn't installed, and a signed-out session are now warnings wherever they happen.unity command -
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.
unity install lts -
no longer waits forever. If stdin is a terminal, it now stops right away and asks you to pipe the secret in.
unity auth login --secret-from-stdin -
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.
-
Inand other windows run by the classic Windows console, the CLI no longer prints raw escape codes such as
cmd.exeinstead of colors. This affected the release notes and the update prompt in←[36m, and could affect any colored output.unity self-update -
On macOS and Linux, pressing Ctrl-C during acommand 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.
unity license -
On Windows,and
unity self-updatecan now replace the CLI while its background auth broker, or the identity serverunity self-installstarts, is still running. They move the running copy aside and put the new one in its place without waiting for those processes to exit, andunity openreports success only after the new version is in place.unity self-update -
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.
-
1.0.0-beta.11
Release date: September 22, 2026
-
Security
-
now redacts the log files it collects before uploading them, masking home-directory paths, user names, tokens, and email addresses. Files you add with
unity bugare uploaded as-is.--attachments -
On Linux, extracting amodule no longer writes through an existing symlink, so an archive can't place files outside the install folder.
.pkg -
On Linux, the hardened auth-broker tier now refuses to start when its token store or polkit policy is misconfigured, instead of serving tokens without the isolation it depends on.
-
-
Added
-
checks that your scripts compile in a running Editor, without a full build. It lists each compiler error with its file and line, and exits 0 on success, 6 on compile errors, or 7 when no Editor responds.
unity recompile -
opens the Unity documentation for a class or topic, matched to your project's Unity version. Use
unity docs <topic>for the Manual instead of the Scripting API,--manualfor search results,--searchto print the address, or--urlto choose a version.--editor-version -
imports a
unity assets import <file.unitypackage>into a project. It checks the package and the project before starting the Editor, and prints the Editor's error summary when the import fails..unitypackage -
exports assets and folders to a
unity assets export <asset-path...> --output <file.unitypackage>. Dependencies are included unless you pass.unitypackage.--no-dependencies -
creates a Unity Cloud organization. Pass
unity cloud org create <name>or pick one when prompted, and add--industryto switch to the new organization.--set-default -
and
unity pipeline cloud-buildlist and inspect Unity Build Automation targets and builds, and Unity Pipeline Automation apps, pipelines, and jobs. These commands are read-only and mask secret values in their output.unity pipeline automation -
adds the Unity Issue Tracker MCP server to your AI client. Clients that can't use a remote server are skipped with a warning.
unity mcp configure --server issue-tracker -
writes the Editor log to a file, including with
unity run --log-file <path>, and streams it to the console like--command. Addunity buildto write the file only.--no-tail -
now reports registered editors whose install folder is gone, and
unity editors pruneremoves them from your editor list.--remove-missing -
and
install.shnow install the latest beta when you don't choose a release channel, until the CLI has a stable release.install.ps1
-
-
Changed
- Opt-in analytics and the anonymous usage count now record your project's Unity version, and opt-in analytics also record the editor version a command used. The anonymous usage count also notes whether the CLI ran from a terminal, an automated agent, or CI, and still carries no account, machine identifier, or file path.
-
Fixed
-
When the Editor offers a matching status command for a job, such asfor
build_status,buildnow says the job's command was dispatched and names that status command. It no longer reports success while the real work is still running.unity job wait -
now serves compressed WebGL builds with the correct headers, so they load in the browser. For browsers that don't accept the compression over plain HTTP, such as Firefox, it decompresses files as it serves them.
unity build run -
Usage errors, such as an unknown option or a missing value, now followand
--format jsonand return the standard result envelope with the--format ndjsoncode. The exit code is still 2.INVALID_COMMAND_ARGS -
no longer leaves Unity Connect half-configured in a project linked to Unity Cloud. This caused "Unity Connect configuration is invalid" errors, an Asset Store "Open in Browser" button that did nothing, and high Editor CPU use.
unity open -
On Windows, whencan't delete the editor folder, it now names the folder and tells you to close the Editor and check your permissions, instead of reporting an invalid uninstaller. JSON output uses the new
unity uninstallerror code, and read-only files no longer block removal.UNINSTALL_REMOVAL_FAILED -
On Windows,no longer fails with "Unable to schedule the update helper (exit status 3)" when the folder you ran it from is deleted, renamed, or unmounted before the update completes.
unity self-update -
Runningthrough
install.ps1no longer closes your PowerShell window when the install fails.irm <url> | iex -
now works on machines without
install.sh, including stock macOS. It also reports a clear error when the release manifest is damaged, such as when a captive portal or proxy replaces it.jq -
On Linux, module installs no longer fail with a checksum mismatch caused by incorrect checksums in Unity's release data. Until that data is fixed, Linux module downloads skip checksum verification, as Unity Hub does.
-
Network requests, including those through a proxy, no longer fail with "address incompatible with the selected protocol" when a host has several addresses or a local proxy listens only on IPv6 ().
[::1] -
On Windows, when a proxy auto-config (PAC) result lists a proxy per scheme, such as, each request now uses the proxy for its own scheme.
http=proxy1:8080;https=proxy2:8443 -
and
unity pipeline installno longer crash whenunity pipeline upgradelistsPackages/manifest.jsonmore than once.com.unity.pipeline -
commands that change your project list now use the same database engine as Unity Hub. This fixes a rare write conflict on Linux, and a spurious lock error when the CLI and the Hub create the list at the same time.
unity projects -
no longer gets corrupted lines when two
cli-log.jsoncommands write to it at the same time.unity -
now lists custom templates in the same order as Unity Hub.
unity templates list -
and the Pipeline connection error now recognize an OpenAI Codex sandbox on Windows, as they already did on macOS.
unity status
-
1.0.0-beta.10
Release date: September 14, 2026
Security and privacy
- no longer follows a symlinked path component when it writes a client's config file. A
unity mcp configurewrite, as well as writes for VS Code and VS Code Insiders, whose configs are always project-local, now refuses a symlink at any path component instead of silently following it. Every client config write, both local and global, is now atomic.--local - On macOS, the CLI no longer re-signs a downloaded plugin or component whose code signature fails to verify, except for Unity Version Control's client, which the CLI now logs when it falls back. Any other component that fails verification now fails its download instead of running under an anonymous signature.
cm - On Linux, and
.debinstalls of the hardened auth-broker tier now enforce it. Every token grant against the hardened tier requires real polkit consent before the isolated credential store is accessed, and the CLI now connects to the hardened tier's socket automatically after provisioning..rpm - no longer prints your entire MCP config file, including other servers' credentials. It now previews only the entry it adds or changes.
unity mcp configure <client> --dry-run - no longer risks corrupting
unity mcp configure codexwhen it updates the Unity MCP server entry. It now refuses the update and asks you to edit the file manually when it can't verify that the match is safe. It also recognizes a quoted table name instead of duplicating it.config.toml - no longer risks corrupting the sandbox and network-proxy settings it relaxes for Codex. It refuses the entire update and asks you to edit the file manually when it can't verify that the match is safe.
unity mcp configure codex - The resident auth broker now signs every refresh-token request with a DPoP proof bound to an in-memory key. It correctly handles the server's nonce challenge and retry. Sign-in, token requests, and existing sessions are unaffected.
- The auth broker's DPoP signing key is now hardware-backed when the machine supports it: the TPM on Windows, the Secure Enclave on macOS, and TPM2 through on Linux. When no hardware-backed key is available, it falls back to the same in-memory key as before.
tpm2-tools - no longer lets a project directory choose which program answers its credential lookup. The project's recorded Git identity is now read as inert data and reapplied through a lookup that always runs from a neutral directory. A repo-local
unity projects link vcscan no longer substitute its own credential.credential.helper - The auth broker's token store is now sealed to the machine's hardware on every real sign-in: a non-exportable TPM key on Windows, TPM2 through on Linux, followed by DPAPI, the Secret Service, the Keychain, and a local key file as fallbacks. Earlier releases prepared this sealing, but the live broker still wrote to the plain OS keyring. Copying the store to another machine no longer yields a usable credential, and
systemd-credsreports the active tier.unity doctor - The auth broker now protects itself against memory dumps as soon as it starts. It refuses and disables core dumps on Linux, disables core dumps on macOS, and suppresses the crash dialog on Windows. It also holds credential material in locked, zeroize-on-release memory instead of an ordinary string.
ptrace - now reflects actual broker activity. Every token grant and refusal that reaches the broker's token-vending path is recorded in the audit trail that this command reads.
unity auth consumersstill only affects the revocation list; it does not yet stop that application from receiving a new token.unity auth revoke - Every command's OAuth token read now goes through the resident auth broker instead of directly through the OS credential store. A command that needs a token starts the broker on demand if it isn't already running. The broker can remain idle in the background for up to two minutes before it exits. Set to restore the previous direct-keyring behavior.
UNITY_NO_AUTH_BROKER - The resident daemon that handles Editor sign-in requests and the auth broker now verify a connecting peer's code signature by default on macOS and Windows. They refuse an unsigned or non-Unity-signed local process. The previous logging-only behavior is no longer documented because it weakened the peer code-signature check. Linux continues to log only by default.
- When Unity Hub and the CLI are both signed in to the same account, their credentials now converge automatically without an additional sign-in prompt.
Installs and updates
- now downloads through the CLI's regular download engine instead of a one-shot fetch. An interrupted download resumes from where it left off the next time you run
unity self-updateinstead of starting over.unity self-update - now prefers a Brotli-compressed download when the release provides one. The CLI verifies the compressed bytes against their own checksum, then verifies the decompressed binary again as before. A platform without a compressed artifact yet, falls back to the raw download.
unity self-update
AI and Editor integration
- A mistyped command or flag now points you to for a task-oriented CLI guide when no "Did you mean" suggestion appears. This applies to top-level commands and mistyped subcommands.
unity skill show - now also installs agent skills shipped with an installed plugin, alongside the CLI's own skill.
unity skill installre-renders them from the plugin's current copy.unity skill refreshandunity plugin installpoint you tounity plugin upgradewhen the installed copy ships with a skill.unity skill install - and
unity command <name>no longer refuse a bare, argument-free invocation against an Editor whose Unity Pipeline package predates command-line binding. An invocation with arguments still refuses with the same message as before.unity run --command <name> - prints only the Editor's own result value, without the CLI's
unity command <name> --result-only,command,parameters,target,success, anderrorsenvelope fields. The option implies JSON output on its own and cannot be combined withwarnings.--detach - The and
capture_game_viewtools incapture_scene_viewnow fall back to an OS-level screenshot of the entire desktop when the Editor's main thread does not respond in time, such as during a blocking dialog. The fallback captures the entire screen rather than the specific view and states this in an accompanying note.unity mcp
Automation and CI
- emits a machine-readable manifest of every command, subcommand, argument, and option. This lets agents and tooling discover the CLI surface without parsing
unity commands --format json.--helpalone prints a compact grouped listing.unity commands - re-runs
unity watch testevery time a project file changes. A debounce combines a burst of changes into a single run.unity test --affected,Library/,Temp/,Logs/, andBuild/are ignored by default. Useobj/to add more patterns. The command refuses to start under--ignore <pattern>or in a detected CI environment.--non-interactive - A committed now declares
ProjectSettings/UnityCliConfig.jsonandunity builddefaults for a project, including the target, output path, profile, timeout, test mode, report format, coverage, and more. This avoids repeating them in every invocation and CI workflow.unity testprints the resolved value and the layer that supplied it: flag, environment variable, this file, global config, or the CLI default.unity config resolve <key> [project]
Build automation
- creates a Unity 6+ Build Profile asset for a target platform and exits without building. This requires Unity 6000.0 or later, the same as
unity build --create-profile <target>.--profile - Unity Accelerator support is now available. persists an endpoint. A bare host defaults to port
unity config accelerator <host:port>.10080,unity run, andunity testinject the cache-server flags automatically.unity buildand--accelerator <host:port>override or suppress the setting for an individual invocation.--no-acceleratortakes precedence over the persisted setting but is overridden by the command-line flags.UNITY_ACCELERATORreports the resolved endpoint and whether it responds.unity diagnose acceleratorandunity doctornow include a non-blocking Accelerator check.unity doctor --ci - lists every valid
unity build --list-targetsvalue and exits. It identifies each target as zero-code or as requiring--targetor a Build Profile through--execute-method. It supports--profile,--format human,--format tsv, and--format json.--format ndjson - lists a project's Build Profile assets and exits. Use it to discover platforms such as Meta Quest that build only through
unity build --list-profiles.--profilenow directs you toBUILD_INVALID_TARGETwhen you specify a target outside the classic catalog.--profile - launches the project's most recent recorded build without rebuilding. A successful
unity build runwith a known output path now records the path, target, architecture, and Editor version. Anunity buildbuild without--execute-methodrecords nothing and keeps the previous record, so launch it with--output-pathinstead. A desktop player launches natively. A WebGL build is served from a local, loopback-only HTTP server and opens in your default browser.--path <path>
CLI behavior
- and
unity commandnow renderunity cmd,recompile,recompile_status, andtest_statusresults as short, readable text in the default Result column instead of a compact JSON blob. Other Result cells andrun_tests,--format json, and--format ndjsonoutput remain unchanged.--format human - now starts faster by skipping work it does not need for that invocation, such as display-language detection.
unity command --project-path <path>
Project management
- saves and applies named bundles of your account, default organization, default cloud project, default Editor, and install path.
unity contextrecords the current set,unity context save <name>applies one, andunity context use <name>andunity context listshow what exists and what is active. Applying a context is all-or-nothing. Switching to a context clears any of the five settings it does not pin, except the account.unity context current - , as well as
unity open --waitandunity projects open --wait, blocks until the launched Editor exits and reports its actual outcome. It exits withunity projects upgrade --waiton failure or6on a clean exit. This option is currently available only on macOS and Linux. Windows refuses it with exit code0instead of silently falling back to the previous bounded watch.2 - ,
unity open, andunity projects opennow report when the launched Editor was killed by a signal instead of reporting success, both during the ordinary bounded watch and withunity projects upgrade.--wait - lists the contents of a
unity assets inspect <file.unitypackage>, including the asset path, GUID, size, and whether a preview image is bundled. It does not import the package and does not require an installed Editor or an open project. It streams the archive, so it uses constant memory even for multi-gigabyte packages..unitypackage
Source control
- reports who last changed each GameObject and component in a Unity asset, along with the commit, author, and date. Use
unity vcs blame <scene|prefab>to narrow the result to one object,--object <name>to narrow it to one serialized field,--field <name>to blame as of another revision, and--at <ref>to limit how far back the command searches.--max-revisions <n>
Licensing
- now reports
unity license status, the licensing server configured for the machine, andfloatingServer, the identity that the licensing client reports to it. Use these values to match a lease record when a floating seat appears stuck. Both values appear inmachineIdand--format jsonoutput, and in human-readable and--format ndjsonoutput only when a floating server is configured.tsv
Issues fixed
- On Windows on Arm, no longer misreports a working Git installation as missing or broken.
unityandunity doctorare fixed by the same change.unity vcs providers - A signed-in user is no longer reported as signed out solely because the resident auth broker rejects the connection under peer-authentication enforcement. The CLI now falls back to the locally stored session instead of treating the rejection as a sign-out.
- The CLI no longer reports that no Unity Editor is reachable when it runs inside WSL and the Editor runs on the Windows host. now confirms the exit over the same channel instead of signaling a process ID that could belong to another process.
unity projects closenow identifies the WSL networking setting to change when the port does not respond.unity status - A running Editor whose project layout hides the Unity Pipeline package, such as a Multiplayer Play Mode virtual player's partial clone or a folder reached through a symlink or permissions issue, is no longer reported as unreachable or missing by
Packagesorunity status.unity pipeline list - Concurrent writes to the shared no longer drop each other's changes. Settings writes now take a short cross-process lock on the file.
user-settings.json - The CLI no longer mistakes an unrelated process for a running Unity Editor or Player when a stale connection descriptor names a recycled process ID. Discovery now also compares the process start time with the descriptor's timestamp.
- Commands that communicate with a running Unity Editor, including ,
unity command, andunity job, now identify an AI coding agent's sandbox as a possible cause of a connection refusal, alongside the original "make sure Unity Editor is running" message.unity list - Sign-in failures where the OS keyring accepts a write but does not retain it are now logged and diagnosable, with a message that distinguishes them from an outright write failure.
- The CLI's Editor identity daemon no longer deletes a Hub socket file when it stops on macOS and Linux.
- Commands that communicate with a running Editor over loopback, including ,
unity command, andunity status, no longer resolve the OS proxy configuration up front. They resolve it only when a command first needs it.unity job - no longer reports "no instances" when a Pipeline discovery file exists but the current process cannot read it, such as when a sandboxed AI agent tool runs the CLI as a separate account. It now identifies the actual cause and specifically identifies a sandboxed agent when detected.
unity status - and
unity templates packon Windows now also check for a Windows byte-range lock on a project'sunity templates createcache before copying it, alongside the existing Linux protection.Library - and
unity self-updateon Windows now ask a resident Editor identity server daemon to release the binary before replacing it, just as they already ask the resident auth broker.unity self-installandunity closenow also check with the daemon immediately after closing an Editor instead of waiting through its full idle window.unity projects close - no longer leaves an agent session with zero Unity tools for its entire lifetime when the client connects before an Editor starts. The server now declares support for tool-list change notifications and notifies the client when the catalog changes.
unity mcp - 's credential-store check now exercises the Windows Credential Manager chunking path that real sign-in tokens use instead of testing only a small value.
unity doctor - A chunked credential write that the OS credential store accepts but does not persist no longer leaves stale entries or destroys the previous sign-in. The CLI now verifies the write by reading it back, rolls it back on failure, and automatically cleans up entries left by an earlier version.
- no longer fails with an
unity installdatabase error when the shared install-state database was created by an older Unity Hub or CLI. The CLI now applies the same schema update as Unity Hub.INSTALL_FAILED - A declined or blocked Windows elevation prompt no longer generates a crash report. The same applies to an incorrect installer or uninstaller format, an unsafe install path, or an install location that you cannot write to. These and similar states also no longer suggest .
unity bug - no longer reports a Unity Editor as
unity statuswhile it is still starting. It now probes the Editor's main thread directly and reportsreadyinstead in human-readable,starting,--format json, and--format ndjsonoutput, with a matching exit code.--format tsv - no longer reports a confusing "results ... could not be converted to JUnit" message when the Editor exits cleanly without writing a new results file. It now distinguishes a narrowed run that matched nothing, using
unity test,--filter,--shard, or--rerun-failed, from a genuine problem and always fails the run instead of risking a false pass.--affected - no longer bundles an entire Unity project into the report. The shared copy is now limited to 1,000 files and warns when the limit truncates the copy.
unity bug --share-project - Crash reports no longer contain invisible marker characters that the CLI uses to style command hints in the terminal.
- ,
unity vcs uvcs review list,comments, andreplynow work when you are signed in. Previously, all four commands failed with a sign-in error even immediately after sign-in because they did not exchange your credential for the short-lived token required by the review service.resolve - Commands that access Unity Cloud no longer fail spuriously the first time you run one after your sign-in has been idle. A renewed credential is now used within the same run. This affected ,
unity cloud project list,unity projects create, and other commands.unity projects link vcs - ,
unity install, andunity install-modulesno longer try to install a bundled Visual Studio module when a compatible version is already installed. The CLI now checks the actual installation state on Windows and macOS and reports Visual Studio as not installed on Linux.unity editor module add - no longer misreports Unity's own third-party-agent plugin as
unity command --caller plugin.other - Concurrent installs can no longer bypass the single-install lock while an earlier install is still finishing. The CLI now reclaims a lock only when its holder's heartbeat is stale and its process has exited. The check and claim now occur in a single transaction.
- now also relaxes Codex's sandbox network policy, not only the MCP server entry. This allows
unity mcp configure codexand directunity mcpcalls from Codex's shell tool to reach the Editor through localhost.unity command - ,
unity status, andunity editors runningno longer report a healthy Unity Editor as unreachable immediately after recompilation. Each command now retries once with a refreshed token before it reports the Editor as unreachable.unity command - On Windows, and
unity self-installno longer fail or silently defer to a background swap that cannot complete when a resident background helper holds the installed binary open. Both commands now ask the helper to release the binary first.unity self-update - Several internal helper processes, such as the Windows installer helpers and the WSL path translator, no longer hang when the spawned tool writes heavily to both stdout and stderr at the same time.
- no longer reports "No editor version matched" on an Apple Silicon Mac that supports Rosetta 2. The install catalog now offers
unity install <version> -a x86_64on Apple Silicon through macOS 27.x86_64 - ,
unity plugin install, andunity plugin upgradeno longer race with each other, Unity Hub's background module updates, or the native Hub licensing-client install into deleting a build that another process just finished installing. A lock left by a crashed process is now reclaimed automatically.unity plugin remove - and
unity projects link vcsnow record a per-project Git identity that remains effective even when an organization-wide credential pin exists, by also saving a URL-scoped form that Git ranks ahead of the organization-wide credential.unity projects create --vcs … - no longer sends a crash report or suggests running
unity statuswhen every discovered Unity Editor instance is unreachable.unity bug - now points you to
unity license activatewhen a sign-in or session failure occurs on a macOS machine that has already signed in. The message identifies a possibly locked keychain instead of only telling you to sign in again.unity doctor - Commands that automatically discover an Editor without , including
--project-pathandunity command, no longer report "No Unity Editor instances found" when a healthy Editor has a Unity Pipeline package that is too old to parse the command line. They now report the specific error thatunity run --commandalready reports.--project-path - On Windows, the CLI no longer crashes with when an HTTP response is corrupt or its embedded translation bundle cannot be decoded. Both cases now use the CLI's normal error handling.
Decoder ran into invalid data - ,
unity open, andunity projects openno longer launch the Editor inheriting the CLI's working directory, which could crash the Editor if that directory became unreadable. The Editor now always launches from the OS temporary directory and falls back to the previous behavior if that directory is unusable.unity projects upgrade - can now recover an interrupted module download, such as an SDK component, in addition to an interrupted Editor installer.
unity install --resume - on Windows can now target a directory other than
unity self-installby setting%LOCALAPPDATA%\Unity, matching macOS and Linux.UNITY_CLI_HOMEhonors the same variable.install.ps1 - The long-lived Editor identity daemon started by no longer stops reporting a signed-in Editor after its auth broker restarts or exits after remaining idle. It now detects a stale broker connection and reconnects automatically.
unity open - A signed-in user is no longer told to sign in again when the auth broker has a temporary problem reading the access token, such as during a broker restart. Only an authoritative refusal now reports a sign-in or session-expired message. Other issues ask you to try again while leaving your session unchanged.
- A signed-in Mac user is no longer told to sign in again when the macOS Keychain refuses to read an existing credential, such as after Unity Hub signed in first. The session now reports as unresolved and points you to instead of the generic sign-in prompt.
unity doctor - On macOS, a future CLI update can no longer trigger an unexpected Keychain prompt or a forced re-sign-in because the identifier the CLI uses for Keychain access control is now fixed.
- and other project-registry reads no longer fall back to a stale or empty backup copy of the registry just because another process closed the shared project database last.
unity projects list - The Linux and
.debpackages now install the hardened auth-broker tier's assets: the.rpmsystemd units, theunity-auth-brokersystem account, and the polkit consent policy. These assets existed in the package for months but were not referenced.unity-broker - no longer prints two separate
unity command <name> --format jsonfields. The envelope now contains exactly onesuccessfield, derived from the same check the CLI uses to determine whether the command fails.success - now shows the equivalent invocation for a Windows path operand instead of reporting that no shell quoting reproduces the run, for almost every real Windows run.
unity vcs setup - Git-owned files that the CLI rewrites directly, including ,
.git/config, and.git/packed-refsduring.git/HEADandunity projects link vcs, no longer race with a concurrentunlink vcs,git fetch, or another CLI invocation that accesses the same file. Each write now takes the file's own lock and commits through an atomic rename.git gc - now retries a failed Editor or module download instead of failing the entire install after the first transient network error. It uses the same bounded retry policy as
unity install, controlled byunity install-modules.UNITY_INSTALL_RETRIES - no longer writes an entry to
unity mcp configure continue, which Continue no longer reads. It now prints setup instructions for~/.continue/config.jsoninstead.~/.continue/config.yaml
1.0.0-beta.9
Release date: September 08, 2026
-
Installs and updates
- and
unity installnow useunity install-modules/--child-modules, which matches--no-child-modules. The previous camelCase options (unity editor module add/--childModules) and the--no-childModules/--cmshorthand continue to work.--no-cm - is now
unity install --list-components, which matches theunity install --list-modules/-mterminology. The previous name remains available as a hidden alias.--module - and
unity modules listnow label their last columnunity install --list-modulesinstead of the downloader name. TheAliasesfield also changes from--format jsontodownloaderName.aliases - The CLI now warns you when both a self-installed and a Homebrew-managed version appear on your
unity. In this state,PATHcontinues to resolve to the self-installed copy, whilewhich unityupdates the Homebrew copy, so the versions can diverge. The background update check now directs you tobrew upgradeto remove the self-installed copy and let Homebrew manage updates.unity self-uninstall -y
-
AI and Editor integration
- now prints the CLI's agent skill to standard output without installing anything, so you can read the skill without changing the filesystem. Use
unity skill showto print a reference file,--path <file>to list all files in the skill, or--listto return each file's content with its index.--format json - now mentions the agent skill on its last line and directs you to
unity --helpandunity skill show.unity skill install <client>
-
Automation and CI
- now compares the installed version directly with the plugin registry instead of estimating staleness from a checksum. If your installed version is newer than any version the registry currently admits, the CLI reports that state separately instead of reporting an indeterminate result. If the installed version has since been yanked,
unity plugin upgradedowngrades to the newest non-yanked version and explains why.upgrade - now displays a managed tool's release notes, rendered from Markdown and paged like
unity plugin changelog <id>. Useunity changelogto display notes for a specific version, or--version <version>to display the full notes before the upgrade.plugin upgrade --changelog - A global flag now controls colored output directly. Use
--color <auto|always|never>as shorthand for--no-color. The flag affects only human-readable output and no longer relies only on the--color neverandNO_COLORenvironment variables.FORCE_COLOR - is a new command that displays the CLI version, release channel, commit, platform, architecture, and runtime in any output format.
unity versionalso honors--version. A bare--formatcontinues to print only the version string.unity --version - now lists the CLI's bundled third-party components with their versions and SPDX license identifiers, along with the .NET runtime.
unity doctor - A generic interface now provides access to the CLI's existing settings:
unity config get|set|list|unset <key>,proxy,proxy.bypass, andaccelerator. You can read and write these settings by key as well as through their existing subcommands. When you read back a proxy URL with embedded credentials, the CLI redacts the credentials.update-check
-
Security and privacy
- The auth broker now seals its token store to the machine it was written on. On Windows, it uses the TPM and falls back to DPAPI. On Linux, it uses TPM2 through and falls back to the Secret Service keyring. On macOS, it uses the Keychain. A local key file provides the fallback on all platforms.
systemd-credsnow reports which protection is active.unity doctor - now lists the applications that have used your Unity sign-in on the current machine. Use
unity auth consumersto prevent an application from using it. Useunity auth revoke <application>to undo a revoke.--restore - The CLI now sends one event per run so Unity can count total usage, including runs that never display a consent prompt, such as CI and agent runs. The event contains no user, machine, or session identifier and no consent state. It contains only the tool, CLI version, and whether the run appears to be a CI run. Set
cli telemetryto disable it.UNITY_NO_CLI_INVOKED_TELEMETRY=1
- The auth broker now seals its token store to the machine it was written on. On Windows, it uses the TPM and falls back to DPAPI. On Linux, it uses TPM2 through
-
Build automation
- now runs only the tests that a change can affect, based on the impact graph from
unity test --affected --since <ref>. Selection is opt-in, and results go tounity vcs affectedso the command does not overwrite a full-suite report. The command also identifies changes that it cannot prove are unaffected. For example, a change to a non-code file still runs the full suite. Usetest-results.affected.xmlto run every test and report which tests the selection would skip and how many of those tests would fail. You can use this result to measure the false-negative rate for your project before you rely on affected-test selection.--affected-compare
-
Issues fixed
- Sign-in now persists on Linux machines without a Secret Service daemon, such as headless WSL2 environments, containers, and bare CI runners. Previously, the CLI reported a successful sign-in but appeared signed out on the next command. The same issue also caused and
unity license activate --serialto fail their licensing handshake on these machines.unity projects new - The CLI no longer sends failures caused by your machine or network to anonymous crash reporting. These failures include unreachable hosts, DNS failures, dropped TLS connections, truncated downloads, locked files, and read-only file systems. The CLI still sends genuine defects.
- no longer crashes on Windows when the project path points to a file instead of a directory.
unity cache key - On Windows, and
unity pipeline listno longer report that no Editor is running when one is running. Previously, certain characters in an unrelated background process's command line could corrupt the process query for every process on the machine. Both commands now warn you when the process check fails instead of reporting an empty result.unity status - On Windows, now updates an earlier installation when the recorded and computed installation paths differ only in slash direction or letter casing.
unity skill install - no longer hangs or displays an unexpected keychain dialog when it checks or reads your credential store on macOS and the Keychain requires a response that no user can provide.
unity doctor - and
unity templates createnow tell you when a project is open in an Editor instead of returning an opaque error. On Linux, the CLI previously allowed you to pack an open project and could capture its asset cache during a write. The CLI now refuses these packs.unity templates pack - and other partial versions, including a bare major version, now work after the release line reaches end of life. A partial version now resolves to the newest release in that line, whether the release exists in the current catalog or the archive.
unity install 6000.5 - ,
unity open, andunity projects opennow report a failure when the Editor they start exits with an error instead of always reporting success.unity projects upgrade - now tells you when a project is already open in an Editor instead of reporting what appears to be a licensing error.
unity build - Release notes that and
unity changelogrender now retain bold and italic styling when the same line contains a link.unity self-update --changelog - On Windows, and
unity open <name>no longer print paths that mix forward and backslashes when the registered folder is not a valid project.unity projects open <name> - A module now fails once with a clear explanation when its published release data does not match the file that the download server provides. The CLI no longer retries the same download three times.
- Releasing a lock that the CLI holds around its shared state files can no longer delete another process's lock when the lock directory cannot be renamed on the machine.
- and the
unity projects verifypre-commit gate no longer report a missingunity vcs hooksfile for files inside native plug-in folders (.meta,.bundle,.framework,.androidlib). These folders do not have their own.pluginfiles..metano longer reports these files either.unity vcs status
- Sign-in now persists on Linux machines without a Secret Service daemon, such as headless WSL2 environments, containers, and bare CI runners. Previously, the CLI reported a successful sign-in but appeared signed out on the next command. The same issue also caused
1.0.0-beta.8
Release date: September 02, 2026
This release supersedes 1.0.0-beta.7, which reached the beta channel and was withdrawn the same day. The changes from beta.7 are included in this section. If you upgraded directly from 1.0.0-beta.6, you receive the complete set of changes.
-
Breaking changes
- is retired and has no effect. Argument name checking no longer uses a catalog that the CLI fetches, so there is nothing to disable. Remove it from your scripts and CI jobs.
UNITY_NO_PARAM_VALIDATION - and
unity commandnow pass the arguments you type to the Editor without parsing them, and the Pipeline package binds them. If a script relies on the CLI to rewrite or reject those arguments, you might need to update the script.unity run --command - New projects created with are cloud-enabled by default. Pass
unity projects create, or set--no-cloud, to opt out.UNITY_NO_CLOUD - An Editor that exits with code is now reported as a licensing failure instead of a bare exit code.
198 - A executable on your
unity-closeno longer runs asPATH. Becauseunity closeis now a first-party command, it takes precedence and a binary onclosecan no longer shadow it. If you have such a plugin, rename it. Otherwise, the CLI no longer finds it with no error.PATH
-
Source control
- Added , a command group for working with a Unity project under version control.
unity vcstakes a project from nothing to a pushed first commit without any flags.unity vcs setupandunity vcs statussupport day-to-day workflows:unity vcs syncgroups changes by their meaning in Unity and identifiesunity vcs statusfile problems, while.metarefuses to pull while an Editor has the project open and reports the expected reimport.unity vcs sync - audits repository settings required for Unity to work under version control, including UPM package reproducibility. Use
unity vcs doctorto repair everything the command can repair in one pass.--fix - makes Unity scene and prefab merges work in a repository in one command and continues to work after an Editor upgrade.
unity vcs merge-setup - ,
unity vcs conflicts, andunity vcs explainturn a Unity merge conflict from a list of numeric IDs into actionable information.unity vcs resolve - reads a scene or prefab change by GameObject and component name instead of
unity vcs diff <path>.fileIDturns an entire branch into a readable summary.unity vcs summarize --since <ref> - reports the impact of a change in Unity terms instead of Git terms. For example, it reports which prefabs reference a changed texture and which scenes reference those prefabs.
unity vcs affected - changes branches without causing unnecessary reimports and tells you the expected cost before it switches branches.
unity vcs switch <branch> - adds Unity integrity checks to your commits. Use
unity vcs hooks installto remove them.uninstall - makes a Git worktree usable with a Unity project.
unity vcs git worktree add <branch> [path]removes it.unity vcs git worktree remove <path> - finds binaries already committed to Git history and provides the exact
unity vcs git migrate-lfscommand to move them into LFS.git lfs migrate import - tells you who holds a Unity Version Control lock and marks locks that cover files you have already changed.
unity vcs uvcs lockslists changesets.unity vcs uvcs changesets - reports which Git providers this machine can reach. It reports whether
unity vcs providers,git,git-lfs,gh,glab,tea, andbktare installed and their versions, as well as which hosts each tool has a session for and which account the session uses.az - Repository creation now works with Bitbucket and Azure DevOps, in addition to GitHub, GitLab, and Gitea. and
unity projects create --vcs <host>create the remote through Bitbucket'sunity projects link vcsor Microsoft'sbkt, including Bitbucket Cloud and Data Center. Azure DevOps repositories belong to an organization and project, soazaccepts--vcs-namespace. Azure DevOps does not support per-repository visibility, so the CLI rejectsorganization/projectand descriptions instead of silently ignoring them.--visibility - You can now sign in to GitHub or GitLab with your browser instead of creating a personal access token manually. If you use a token, the prompt lists the exact scopes you need and links to the provider page that creates a token with those scopes selected.
- and
unity projects link vcsno longer require the project path. If a link fails partway through, run the command again to resume it instead of receiving anunity projects unlink vcserror or creating a second repository. UseALREADY_LINKEDto undo a partially completed link. If a repository already has a remote, the CLI adopts it instead of refusing the link.--rollback - If is missing, the CLI no longer tells you to install it manually. The CLI offers to install it through your platform's package manager and installs it if you confirm. The CLI does not install anything without your confirmation. If the command cannot prompt you, it prints the exact command instead.
git-lfs - reads code review comments from the Unity Version Control GUI and lets you respond to them. Previously, these comments were available only in the GUI, so you had to restate a reviewer's notes about specific files and lines before a command-line workflow could act on them.
unity vcs uvcs reviewfinds a review and lets you narrow the results withreview list,--changeset, or--branch.--statusreads the review and reports each comment's file, line, text, author, timestamp, type, threading parent, and resolution status.review commentsreplies to a comment, andreview replyrecords which changeset addressed it.review resolve
- Added
-
Project management
- now has the same default-project commands as the organization commands:
unity cloud project,set-default, andcurrent. Commands that require a Unity Cloud project use the default project when you do not specify one.clear-default - and
--cloud-projectnow also accept a project's Genesis ID.unity cloud project set-defaultdisplays this value in its ID column alongside the project UUID and name.unity cloud project list - closes the Unity Editor that has a project open and is now available in released builds. The capability previously existed as
unity close <path-or-name>but was registered only whenunity projects closewas set, so it was unavailable outside Unity.HUB_ENV=developmentis now a top-level command as well asclose, matching the existingunity projects closecommand. Neither command saves your work. By default, the command asks the Editor to exit, which it does immediately without prompting. Useopento signal the process instead. The CLI uses--forceonly when you specify it. Closing a project that no Editor has open succeeds without an error. If an Editor has the project open but the project does not include--force, the error names the package and thecom.unity.pipelinecommand that adds it.unity pipeline installremains development-only.unity projects logs
-
Installs and updates
- and
unity installnow request administrator permission at the start of the command instead of partway through. This prevents an unattended install from waiting for a dialog after a long download. If you decline, the command fails immediately withunity install-modulesorELEVATION_CANCELLED, and nothing is downloaded or written.ELEVATION_FAILED - shows download progress instead of a spinner, identifies the upgrade when you provide an argument, and explains what to do when a SHA-256 check fails.
unity upgrade - can now install an Editor that has been promoted but not yet published. It also reports an unresolvable changeset immediately instead of waiting for a minute and a half.
unity install <version> --changeset <changeset> - now prints a result envelope on success. Previously, it printed nothing and exited with
unity install --format json, so a script could not distinguish a completed install from a crashed process. The envelope matches the result that0already reports.--format ndjson - now honors
unity install --resume, so a forced resume reuses an already downloaded payload instead of downloading it again. If the Editor is already installed and you do not pass--force, the resume reports why it stopped in every output format.--force - The command that updates the CLI is now .
unity self-updatecontinues to work as an alias, so nothing you have scripted or documented breaks. The old name was the only CLI command calledunity upgradethat did not upgrade a project or an Editor, unlikeupgrade,unity editors upgrade, andunity projects upgrade. The machine-readable output also changes:unity plugin upgradeand--format jsonnow reportndjsoninstead of"command": "self-update"."command": "upgrade"
-
AI and Editor integration
- for VS Code, Cursor, Windsurf, and Cline now installs a real Agent Skills directory. Each client also has a user-global target for the first time.
unity skill install - now also installs the agent skill included with your project's
unity skill install <client> --localpackage. A resolved package lives undercom.unity.pipeline, which AI clients do not search for skills. A project-local install therefore copies the skill next to theLibrary/PackageCacheskill. A project without the package behaves as before.unity-cli - no longer reports every numeric, array, and structured tool parameter as a string.
unity mcp
-
Automation and CI
- Long human-readable listings now use a pager in a terminal, similar to , instead of filling your scrollback. Set
git logorUNITY_PAGERto choose a pager, or passPAGERto disable it.--no-pager - Added ,
unity plugin install, andunity plugin removeto manage tools that Unity downloads for you.unity plugin upgradereports the installed tools.unity plugin listalso shows these components in its own section.unity doctor - now checks whether the machine's credential store can store a sign-in and reports which backend it selected.
unity doctor - ,
unity uvcs, andunity cmnow pass everything after the alias directly to the tool's binary, so the tool receives its own flags unchanged. For example,unity ugspassesunity uvcs status --format jsonto the Unity Version Control client instead of letting the CLI consume it as a global--format jsonoption.--formatanduvcsboth run the Unity Version Control client, whilecmruns the Unity Gaming Services CLI. Only the first token counts, sougsis parsed as a standard CLI invocation and reports the correct usage.unity --format json uvcs
- Long human-readable listings now use a pager in a terminal, similar to
-
Security and privacy
- Commands that look for a running Editor now identify it by the executable that the operating system reports instead of the process name.
- On a machine without Unity Hub, the Unity Version Control client that the CLI downloads now uses the version pinned by the CLI instead of remaining on the first version it fetched.
- If you opt in to CLI analytics, the CLI now associates your usage with your Unity account while you are signed in. Usage events also record which project they ran in. The project is identified by an opaque ID, never by a file path. The CLI records nothing unless you opt in. Both values are absent when a command runs outside a Unity project.
- The first-run analytics question now uses an arrow-key list instead of a typed /
y, matching the other questions in the CLI.n
-
Issues fixed
- On Windows, no longer reports a successful install as failed when you are not an administrator. Installing to a location that requires elevation, left the version folder writable only by administrators. The CLI then tried to register the Editor without elevation, reported the install as failed, and exited with
unity installeven though the Editor had installed correctly. This issue caused the withdrawal of 1.0.0-beta.7.INSTALL_FAILED - now repairs an Editor that an earlier install left unregistered. Use this command if you encountered the issue above before this release.
unity editor module refresh <version> - Installing a module into an Editor in a protected folder now works. Language packs and archive-based modules, such as the Android NDK and platform support modules, previously unpacked without elevation and failed.
- On Windows, installs no longer fail with on machines where the lock directory's parent does not allow new names. A failed Editor install also no longer leaves the new version's folder behind.
Access to the path is denied - no longer reports success on a headless Linux machine when no session exists afterward. It also no longer fails on macOS when the keychain slot it writes was created by a different code identity. Under WSL, it opens the sign-in page in your Windows browser again.
unity auth login - Backticks in a path, project name, Editor version, or any other value you type are no longer deleted from the CLI's messages.
- now runs on a Linux machine without a display server. It also refuses to run on a project that is already open in an Editor instead of starting a batch Editor that cannot acquire the project lock.
unity test - Opening a project with on Linux no longer prevents you from attaching a debugger. The CLI previously launched the Editor through a version-named link, which renamed the process and prevented Rider and the VS Code debugger from finding it.
unity open - no longer deletes a project's
unity projects clean,Library, andTempfolders when it cannot determine whether an Editor has the project open.obj - On Linux, now puts the iOS, WebGL, Linux-IL2CPP, and Linux-Server playback engines where the Editor expects them.
unity install-modules - Templates created from a Unity 6000.6.0a4 or newer project no longer produce hundreds of spurious warnings in every project created from them. also no longer copies content from outside the project into the template.
unity templates pack - The CLI now reports analytics again for users who have opted in. A crash no longer generates one report per language
- Sixteen command surfaces previously printed English regardless of your display language, even though all the strings they printed were already translated. Relative timestamps in and the Kind column in
unity projects listnow use your display language.unity plugin list - no longer uploads a Unity 6000.6+ project's
unity bug --share-projectfolder.Library/DataStore - and other commands that find a project in the Hub registry by path no longer miss a project when its path uses different capitalization.
unity projects remove - is accepted again on every command and in either position.
--no-pageralso no longer asks for confirmation in a terminal.unity editors prune --remove --format github - now rejects an argument that is not a Unity version with an
unity install <arg>error before sending it to the release catalog.INVALID_VERSION - Crash reporting no longer creates a report for failures that the CLI did not cause.
- Commands no longer stall after they finish. When a profile was signed in and opted in to analytics, every command resolved the user ID from the OS keyring on the main thread after printing its result. One measured non-interactive run took 40 seconds, and the operation could take an unlimited amount of time. As a result, a headless, CI, or SSH machine could wait indefinitely. The CLI now performs this read at most once per process and on a background thread, and only when it has data to send. If the read does not return in time, the CLI abandons it and sends the batch anonymously, as it does for a signed-out run.
- When a connected Editor has a package that is too old to run a command or detached job, the error now names the package version that provides the required behavior instead of only telling you to run
com.unity.pipeline.unity pipeline upgraderesolves the latest version available in the registry. If that version is still older than the version required by the CLI, the upgrade previously reported success and the command failed without explaining why. This issue caused the withdrawal of 1.0.0-beta.7.unity pipeline upgrade - Failures caused by the state of your machine no longer ask you to file a bug against the CLI. Previously, 23 conditions that were neither CLI defects nor errors in what you typed, such as a missing executable, an Editor that was no longer at its registered path, or another
tarexecutable already owning yourunity, ended their error block with a request to runPATH. The rest of the error block remains unchanged: the error, its code, the log location, and instructions for rerunning withunity bug.--verbose - no longer reports the default install path when it cannot read your configured path. The path is stored in
unity install-path, which the Hub and CLI share behind one advisory lock. Previously, a failed read was treated as if no custom path existed, so the CLI printed the platform default with exit codesecondaryInstallPath.jsoneven though your Editors lived elsewhere. An install that started during that window could then use the wrong root. The CLI now distinguishes these two states and retries a read once if it loses the lock.0 - A lock that the operating system refuses to create is now reported as a plain, actionable failure that names the lock file and asks you to check your write permission for the folder. Previously, the CLI reported a raw error without a cause and filed a crash report for a machine-state issue. A full disk or read-only volume continues to report the operating system's more specific message. Releasing a lock on such a machine no longer stalls.
CreateDirectory failed - Interrupting a download with Ctrl+C no longer leaves the Windows taskbar showing progress indefinitely. previously had no Ctrl+C handling, so Windows killed the process immediately and skipped cleanup. This could orphan the elevated helper that ran the Editor installer and leave the install lock behind, causing a retry within ten seconds to fail as if another install were still running. Ctrl+C is now handled cooperatively, and the command exits with code
unity install. A second Ctrl+C still force-quits the process.130 - now honors
unity run --commandwhile waiting for the Editor it just started instead of exceeding the timeout by up to five and a half seconds. For example,--timeoutnow reports the timeout after 10 seconds instead of 15.5 seconds.--timeout 10 - Spanish and Chinese no longer duplicate a word when the CLI reports that it updated itself. A completed update previously printed “Actualizado a a 1.2.3.” and duplicated a particle in Chinese. The issue affected update, downgrade, and channel-switch messages in all three output forms. The other seven languages were already correct.
- On Windows,