Unity CLI 1.0.0-beta.8
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.
- Version
- 1.0.0-beta.8
- Released
- Sep 2, 2026
- Product
- Unity CLI
Unity CLI 1.0.0-beta.8
Breaking changes
- Change
`UNITY_NO_PARAM_VALIDATION` 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.
- Change
`unity command` and `unity run --command` now 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.
- Change
New projects created with `unity projects create` are cloud-enabled by default. Pass `--no-cloud` , or set `UNITY_NO_CLOUD` , to opt out.
- Change
An Editor that exits with code `198` is now reported as a licensing failure instead of a bare exit code.
- Change
A `unity-close` executable on your `PATH` no longer runs as `unity close` . Because `close` is now a first-party command, it takes precedence and a binary on `PATH` can no longer shadow it. If you have such a plugin, rename it. Otherwise, the CLI no longer finds it with no error.
Source control
- Feature
Added `unity vcs` , a command group for working with a Unity project under version control. `unity vcs setup` takes a project from nothing to a pushed first commit without any flags. `unity vcs status` and `unity vcs sync` support day-to-day workflows: `unity vcs status` groups changes by their meaning in Unity and identifies `.meta` file problems, while `unity vcs sync` refuses to pull while an Editor has the project open and reports the expected reimport.
- Change
`unity vcs doctor` audits repository settings required for Unity to work under version control, including UPM package reproducibility. Use `--fix` to repair everything the command can repair in one pass.
- Change
`unity vcs merge-setup` makes Unity scene and prefab merges work in a repository in one command and continues to work after an Editor upgrade.
- Change
`unity vcs conflicts` , `unity vcs explain` , and `unity vcs resolve` turn a Unity merge conflict from a list of numeric IDs into actionable information.
- Change
`unity vcs diff ` reads a scene or prefab change by GameObject and component name instead of `fileID` . `unity vcs summarize --since ` turns an entire branch into a readable summary.
- Change
`unity vcs affected` 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.
- Change
`unity vcs switch ` changes branches without causing unnecessary reimports and tells you the expected cost before it switches branches.
- Change
`unity vcs hooks install` adds Unity integrity checks to your commits. Use `uninstall` to remove them.
- Change
`unity vcs git worktree add [path]` makes a Git worktree usable with a Unity project. `unity vcs git worktree remove ` removes it.
- Change
`unity vcs git migrate-lfs` finds binaries already committed to Git history and provides the exact `git lfs migrate import` command to move them into LFS.
- Change
`unity vcs uvcs locks` tells you who holds a Unity Version Control lock and marks locks that cover files you have already changed. `unity vcs uvcs changesets` lists changesets.
- Change
`unity vcs providers` reports which Git providers this machine can reach. It reports whether `git` , `git-lfs` , `gh` , `glab` , `tea` , `bkt` , and `az` are installed and their versions, as well as which hosts each tool has a session for and which account the session uses.
- Change
Repository creation now works with Bitbucket and Azure DevOps, in addition to GitHub, GitLab, and Gitea. `unity projects create --vcs ` and `unity projects link vcs` create the remote through Bitbucket's `bkt` or Microsoft's `az` , including Bitbucket Cloud and Data Center. Azure DevOps repositories belong to an organization and project, so `--vcs-namespace` accepts `organization/project` . Azure DevOps does not support per-repository visibility, so the CLI rejects `--visibility` and descriptions instead of silently ignoring them.
- Change
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.
- Change
`unity projects link vcs` and `unity projects unlink vcs` no longer require the project path. If a link fails partway through, run the command again to resume it instead of receiving an `ALREADY_LINKED` error or creating a second repository. Use `--rollback` to undo a partially completed link. If a repository already has a remote, the CLI adopts it instead of refusing the link.
- Change
If `git-lfs` 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.
- Change
`unity vcs uvcs review` 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. `review list` finds a review and lets you narrow the results with `--changeset` , `--branch` , or `--status` . `review comments` reads the review and reports each comment's file, line, text, author, timestamp, type, threading parent, and resolution status. `review reply` replies to a comment, and `review resolve` records which changeset addressed it.
Project management
- Change
`unity cloud project` now has the same default-project commands as the organization commands: `set-default` , `current` , and `clear-default` . Commands that require a Unity Cloud project use the default project when you do not specify one.
- Change
`--cloud-project` and `unity cloud project set-default` now also accept a project's Genesis ID. `unity cloud project list` displays this value in its ID column alongside the project UUID and name.
- Change
`unity close ` closes the Unity Editor that has a project open and is now available in released builds. The capability previously existed as `unity projects close` but was registered only when `HUB_ENV=development` was set, so it was unavailable outside Unity. `close` is now a top-level command as well as `unity projects close` , matching the existing `open` command. Neither command saves your work. By default, the command asks the Editor to exit, which it does immediately without prompting. Use `--force` to signal the process instead. The CLI uses `--force` only 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 `com.unity.pipeline` , the error names the package and the `unity pipeline install` command that adds it. `unity projects logs` remains development-only.
Installs and updates
- Change
`unity install` and `unity install-modules` now 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 with `ELEVATION_CANCELLED` or `ELEVATION_FAILED` , and nothing is downloaded or written.
- Change
`unity upgrade` 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.
- Change
`unity install --changeset ` 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.
- Change
`unity install --format json` now prints a result envelope on success. Previously, it printed nothing and exited with `0` , so a script could not distinguish a completed install from a crashed process. The envelope matches the result that `--format ndjson` already reports.
- Change
`unity install --resume` now honors `--force` , 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.
- Change
The command that updates the CLI is now `unity self-update` . `unity upgrade` continues to work as an alias, so nothing you have scripted or documented breaks. The old name was the only CLI command called `upgrade` that did not upgrade a project or an Editor, unlike `unity editors upgrade` , `unity projects upgrade` , and `unity plugin upgrade` . The machine-readable output also changes: `--format json` and `ndjson` now report `"command": "self-update"` instead of `"command": "upgrade"` .
AI and Editor integration
- Change
`unity skill install` 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.
- Fix
`unity skill install --local` now also installs the agent skill included with your project's `com.unity.pipeline` package. A resolved package lives under `Library/PackageCache` , which AI clients do not search for skills. A project-local install therefore copies the skill next to the `unity-cli` skill. A project without the package behaves as before.
- Change
`unity mcp` no longer reports every numeric, array, and structured tool parameter as a string.
Automation and CI
- Change
Long human-readable listings now use a pager in a terminal, similar to `git log` , instead of filling your scrollback. Set `UNITY_PAGER` or `PAGER` to choose a pager, or pass `--no-pager` to disable it.
- Feature
Added `unity plugin install` , `unity plugin remove` , and `unity plugin upgrade` to manage tools that Unity downloads for you. `unity plugin list` reports the installed tools. `unity doctor` also shows these components in its own section.
- Change
`unity doctor` now checks whether the machine's credential store can store a sign-in and reports which backend it selected.
- Change
`unity uvcs` , `unity cm` , and `unity ugs` now pass everything after the alias directly to the tool's binary, so the tool receives its own flags unchanged. For example, `unity uvcs status --format json` passes `--format json` to the Unity Version Control client instead of letting the CLI consume it as a global `--format` option. `uvcs` and `cm` both run the Unity Version Control client, while `ugs` runs the Unity Gaming Services CLI. Only the first token counts, so `unity --format json uvcs` is parsed as a standard CLI invocation and reports the correct usage.
Security and privacy
- Security
Commands that look for a running Editor now identify it by the executable that the operating system reports instead of the process name.
- Security
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.
- Security
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.
- Security
The first-run analytics question now uses an arrow-key list instead of a typed `y` / `n` , matching the other questions in the CLI.
Issues fixed
- Fix
On Windows, `unity install` 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 `INSTALL_FAILED` even though the Editor had installed correctly. This issue caused the withdrawal of 1.0.0-beta.7.
- Windows
- Fix
`unity editor module refresh ` now repairs an Editor that an earlier install left unregistered. Use this command if you encountered the issue above before this release.
- Fix
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.
- Android
- Fix
On Windows, installs no longer fail with `Access to the path is denied` 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.
- Windows
- Fix
`unity auth login` 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.
- Windows
- macOS
- Linux
- Fix
Backticks in a path, project name, Editor version, or any other value you type are no longer deleted from the CLI's messages.
- Fix
`unity test` 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.
- Linux
- Fix
Opening a project with `unity open` 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.
- Linux
- Fix
`unity projects clean` no longer deletes a project's `Library` , `Temp` , and `obj` folders when it cannot determine whether an Editor has the project open.
- Fix
On Linux, `unity install-modules` now puts the iOS, WebGL, Linux-IL2CPP, and Linux-Server playback engines where the Editor expects them.
- Linux
- iOS
- Fix
Templates created from a Unity 6000.6.0a4 or newer project no longer produce hundreds of spurious warnings in every project created from them. `unity templates pack` also no longer copies content from outside the project into the template.
- Fix
The CLI now reports analytics again for users who have opted in. A crash no longer generates one report per language
- Fix
Sixteen command surfaces previously printed English regardless of your display language, even though all the strings they printed were already translated. Relative timestamps in `unity projects list` and the Kind column in `unity plugin list` now use your display language.
- Fix
`unity bug --share-project` no longer uploads a Unity 6000.6+ project's `Library/DataStore` folder.
- Fix
`unity projects remove` and other commands that find a project in the Hub registry by path no longer miss a project when its path uses different capitalization.
- Fix
`--no-pager` is accepted again on every command and in either position. `unity editors prune --remove --format github` also no longer asks for confirmation in a terminal.
- Fix
`unity install ` now rejects an argument that is not a Unity version with an `INVALID_VERSION` error before sending it to the release catalog.
- Fix
Crash reporting no longer creates a report for failures that the CLI did not cause.
- Fix
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.
- Fix
When a connected Editor has a `com.unity.pipeline` 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 `unity pipeline upgrade` . `unity pipeline upgrade` resolves 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.
- Fix
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 `tar` executable, an Editor that was no longer at its registered path, or another `unity` executable already owning your `PATH` , ended their error block with a request to run `unity bug` . The rest of the error block remains unchanged: the error, its code, the log location, and instructions for rerunning with `--verbose` .
- Fix
`unity install-path` no longer reports the default install path when it cannot read your configured path. The path is stored in `secondaryInstallPath.json` , 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 code `0` even 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.
- Fix
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 `CreateDirectory failed` 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.
- Fix
Interrupting a download with Ctrl+C no longer leaves the Windows taskbar showing progress indefinitely. `unity install` 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 `130` . A second Ctrl+C still force-quits the process.
- Windows
- Fix
`unity run --command` now honors `--timeout` while waiting for the Editor it just started instead of exceeding the timeout by up to five and a half seconds. For example, `--timeout 10` now reports the timeout after 10 seconds instead of 15.5 seconds.
- Fix
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.