Unity CLI 1.0.0-beta.4 is rolling out

Unity CLI 1.0.0-beta.4 is rolling out now.

This release is about getting the CLI out of your way: building a player no longer needs any project-side C# and you can be signed in to several Unity accounts at once


:warning: If you run the CLI on Linux, read this first

This release requires glibc 2.34 or newer.

That means Ubuntu 20.04 and older, Debian 11, RHEL and CentOS 8, and Amazon Linux 2 are no longer supported. RHEL 9 and Ubuntu 22.04 are now the oldest supported releases.

Nothing breaks silently: apt, dnf, and the install script all check before installing and refuse the update rather than replacing a working CLI with one that can’t start. If you’re on an affected distribution, stay on 1.0.0-beta.3 for now.

macOS and Windows are unaffected.


Added

Builds without writing C#
unity build no longer requires --execute-method. On Unity 6 and newer, --profile <name> builds a Build Profile directly. On any version, the desktop targets build with just --target and --output-path:

unity build --target StandaloneWindows64 --output-path Build/MyGame.exe

If you already have an --execute-method build script, it keeps working exactly as before and still takes precedence.

Several accounts at once
unity auth login now adds an account instead of replacing the one you had. unity auth list, unity auth switch <account>, and unity auth logout <account> manage them. unity auth default <account> pins an account to a project, so commands run from that directory use it automatically.

Run a command across every project
unity projects exec -- <command> runs anything across all your registered projects — git pull, a build script, a migration. Narrow the set with --filter, speed it up with --parallel, and use --continue-on-error to run the whole fleet regardless.

Reclaiming disk space

  • unity projects clean deletes a project’s regenerable caches (Library, Temp, Logs, and friends).
  • unity editors prune finds installed Editors that none of your registered projects use.
  • unity editors verify checks an installed Editor’s files are intact, which catches installs broken by antivirus or a failed extraction.

All three report before they delete, and --dry-run shows you the targets and sizes without touching anything.

CI and automation

  • unity test emits CI-native test reports and code coverage, so it drops into GitHub Actions or GitLab with no converter step.
  • Long-running Editor work no longer dies with the CLI: --detach returns a job id, and unity job wait|status|cancel picks it back up.
  • Live progress while Editor commands run, and machine-readable failures in --format ndjson.
  • unity command, unity list, unity job, and unity mcp now find the right Editor themselves when several are open — just run them from inside the project directory.

Everything else

  • unity skill install <client> installs the Unity CLI agent skill into your AI coding client in its native format. It’s built into the binary, so it works offline.
  • unity templates pack turns an existing project into a shareable template archive.
  • unity diagnose update answers “why isn’t this updating?” — the version and channel it resolved, the manifest it reads, and the exact command that updates it.
  • Long output pages like git log, and unity shell now has proper line editing: history, tab completion, and cursor keys.
  • Homebrew: brew install --cask unity-cli on macOS and Linux.

Changed

Besides the glibc requirement above, unity build --args now rejects a few more Unity flags the CLI manages itself (-activeBuildProfile, -build, and the legacy player-build flags). Use --profile, --output-path, or --target instead — everything else still forwards to the Editor untouched.

Fixed (highlights)

  • unity open no longer causes the Editor to launch Unity Hub, and the Editor picks up the account you signed in with.
  • unity license and Unity Version Control commands work on machines that have never run Unity Hub.
  • unity upgrade verifies the downloaded binary actually starts before replacing the one you have.
  • unity editors upgrade stopped hiding upgrades on Apple silicon and Arm Windows, stopped offering an older patch than the newest in a line, and stopped reporting prerelease Editors as up to date when a newer prerelease exists.
  • A failed unity install now tells you why instead of a bare “Installation Failed”. An unreachable service is reported separately from a version that genuinely doesn’t exist, so scripts can retry the first and treat the second as final.
  • Running one command with sudo no longer breaks every command after it.
  • unity mcp configure writes the config key and file path each AI client actually reads, and preserves comments and formatting in the files it edits.

Security

Values that come from Unity services, your settings files, or the licensing client are sanitized before they’re printed, so a crafted value can’t smuggle terminal escape sequences into your terminal or forge extra rows in tsv output. A rejected --proxy value no longer echoes the password in the error.


Updating

unity upgrade

If you installed through a package manager, update it there instead — apt, dnf, or brew upgrade unity-cli. unity upgrade detects a package-managed install and tells you the right command.

Installing for the first time

macOS and Linux:

curl -fsSL https://public-cdn.cloud.unity3d.com/hub/prod/cli/install.sh | UNITY_CLI_CHANNEL=beta bash

Windows (PowerShell):

$env:UNITY_CLI_CHANNEL='beta'; irm https://public-cdn.cloud.unity3d.com/hub/prod/cli/install.ps1 | iex

Or through a package manager: brew install --cask unity-cli, or Unity’s apt and rpm repositories.

Full release notes are available in the CLI itself with unity changelog.

As always, feedback is very welcome. You report it, we’ll fix it!

3 Likes

Not sure when the “rollout” is done, but “unity upgrade” still shows beta.3 (also tried the CLI command it also just downloads beta.3)

EDIT: still only finding beta.3

mine updated when i ran it about 20 mins ago

You can force the update with:

unity upgrade --target 1.0.0-beta.4
1 Like

Trying out the new job mode:

for /f "tokens=2" %%A in ('unity --format tsv command COMMAND --detach -- --PARAM 0') do set "JOB_ID=%%A"
unity job wait %JOB_ID%

Looks pretty cool
image

Would be nice if you could add a small “timer” to it to show how long it already runs, but its already pretty nice.


Timeout for awaiting a job

Error: Request timeout after 10000ms

when trying to poll status:

"%UNITY_EXE%" job wait !ADDRESSABLES_JOB_ID!

is this somehow adjustable? I understand that the polling is timing out, not the actual job which was submitted

It looks like --timeout only adjusts the overall timeout:

--timeout <seconds>           Stop waiting after this many seconds; 0 waits until the job finishes (default: 0)

build is not awaitable via job wait

calling “unity command build --detach” behaves differently. I cannot wait for the “job” to be done, since the build process somehow runs differently then the normal --detach jobs. I need to poll via

$env:UNITY_EXE --no-banner --format json command --timeout 10 build_status

which is a bit weird. Would be great if we could also treat the build process as a job which is “awaitable” via

"%UNITY_EXE%" job wait !BUILD_JOB_ID!

Hi @Cell-i-Zenit feedback received! We’re rolling out the fixes starting in CLI v1.0.0-beta.6. We have tickets for all of your suggestions and will keep iterating on it!