文档

Unity command-line interface (CLI)

Download Unity Hub

Unity command-line interface (CLI)

Unity command-line interface (CLI) release notes

Learn about the latest releases, features, improvements and fixes for Unity CLI.
阅读时间209 分钟最后更新于 7 天前

October 21, 2026

1.0.0-beta.14

  • Security
    • unity doctor
      's recent log now shows only the command you ran, such as
      projects open
      , and every argument you passed reads
      <redacted>
      , so paths, project names and option values stay out of a report you paste. The log file itself is unchanged.
    • unity bug --share-project
      no longer follows symbolic links, so a link inside the project that points elsewhere can't put files outside the project into your report. Files the link would have reached are skipped, and so are links to files inside the project.
    • On macOS and Windows, only a Unity-signed Editor started by
      unity open
      can get your access token from the CLI.
    • The programs the CLI starts for you no longer receive
      UNITY_SERVICE_ACCOUNT_ID
      ,
      UNITY_SERVICE_ACCOUNT_SECRET
      ,
      UNITY_GITHUB_TOKEN
      or
      UNITY_GITLAB_TOKEN
      . The variables still reach
      unity shell
      's commands, the command you run with
      unity projects exec
      , the Unity Editor, plugins, the licensing client and the identity server.
    • On Linux, the
      unity
      AppImage now copies the CLI into sealed, read-only memory when it starts and runs it from there, so the Unity auth broker can confirm it is talking to the genuine CLI. You run the AppImage as before.
    • On Linux, every release download of the
      unity
      CLI now carries a Unity signature: the standalone binary, the deb and rpm packages, the AppImage and the npm package. It is made with the same key that signs the CLI on Windows, so the Unity auth broker can confirm it is talking to the genuine CLI.
    • On Linux,
      unity doctor
      now shows whether the running auth broker carries a valid Unity signature, in a new Signature row of the auth broker section and as
      authBroker.runtime.signature
      in
      --json
      output.
    • When the CLI exchanges a credential for a token, it no longer follows a redirect, even to the same host. That covers
      unity auth login
      with service account credentials or a browser sign-in, refreshing your sign-in, and getting a service account, Unity or Unity Version Control token.
    • When you run the CLI with
      sudo
      , it now makes you the owner of a folder it creates or repairs only when that folder sits inside a folder you already own.
    • On Windows,
      unity self-update
      , the MSIX update and
      unity doctor
      now run the Windows tools they need from the Windows system folder.
    • The CLI sends your sign-in and service-account credentials only to Unity servers. If the cached cloud configuration names any other server for them, the CLI uses the default Unity server and logs the ignored host.
    • unity hub install
      downloads the Hub installer only from Unity servers, and the service URLs the CLI hands to the Unity Editor are Unity servers too. A cached cloud configuration that names another server is ignored.
    • Downloads stop after 10 redirects instead of following a redirect loop forever.
    • unity plugin install plastic
      and
      unity plugin upgrade plastic
      follow download redirects only to Plastic's own hosts over
      https
      . A redirect anywhere else fails the install.
    • Commands that look up Unity releases or templates, such as
      unity install
      ,
      unity releases
      ,
      unity editors
      and creating a project from a template, ask only Unity servers. A cached cloud configuration that names another server is ignored.
    • On macOS and Linux, the Editor identity server's socket can now be opened only by the current user, and it refuses a connection from a process running as another user. The CLI also sends its environment notice only to a socket owned and served by the current user.
    • unity install
      ,
      unity templates
      ,
      unity upgrade
      and
      unity plugin install
      refuse a download that redirects from an
      https
      address to a plain
      http
      one, instead of following it.
      unity upgrade
      stops at once instead of retrying.
    • unity projects create
      and
      unity projects new
      keep the Editor log, which can hold your access token, in a folder only you can open, and delete it when the run ends. After a failed run the log stays there, still private, so you can read it.
    • On Windows, the machine-wide
      services-config.json
      is used only when the file and every folder above it can be changed only by Administrators, SYSTEM or TrustedInstaller, as Unity Hub already requires. Otherwise the CLI uses the default licensing settings.
    • On Windows,
      unity hub install
      keeps the downloaded installer locked from its checks until it finishes running.
    • unity projects new
      and
      unity projects create
      refuse a template archive that contains a symbolic link, a hard link, or a path outside the project.
    • unity projects new
      and
      unity projects create
      only accept gzipped (
      .tgz
      ) template archives now. A plain
      .tar
      that used to work is refused as corrupt.
    • Template downloads ignore catalog entries whose name or version is not a plain package name and version.
    • On Windows,
      unity build run
      no longer passes your service-account secret or source-host tokens to the player it starts, matching macOS and Linux.
    • The CLI no longer trusts certificates issued through the distrusted emSign intermediates, which its bundled root certificates and certificate checks could still accept.
    • On Windows,
      unity hub install
      and the commands that look for running Unity Editors now start Windows PowerShell from the Windows system folder.
    • Downloads no longer follow a redirect from HTTPS to plain HTTP, and
      unity install
      fetches a module over HTTPS even when the release catalog lists it with an
      http://
      address.
    • On Linux, removing an Editor that needs administrator rights and installing
      git-lfs
      through your system package manager now use
      pkexec
      only from a trusted system location. Otherwise the command fails with a message that no trusted
      pkexec
      was found.
    • Crash reports and displayed errors hide the value after
      -accessToken
      ,
      -password
      ,
      -androidKeystorePass
      and
      -androidKeyaliasPass
      , however short it is, as batch Editor output already did.
    • unity bug
      uploads and
      unity batch
      terminal output no longer show the serial number passed to the Editor with
      -serial
      .
    • On macOS,
      unity uninstall
      no longer lets the environment your shell started with reach the administrator shell that removes an Editor.
  • Added
    • unity config path
      prints where the CLI keeps its configuration: the settings file and the directory that holds it. It works in every output format;
      --json
      returns
      {file, directory}
      .
    • unity terms accept <version>
      accepts the Unity Editor Software Terms for an installed Editor, so it opens without the "Unity Editor Software Terms" dialog, as a container or provisioning script needs. It shows the terms link and the copy installed with the Editor, then asks; pass
      --yes
      to accept without a prompt, which a run without a terminal requires.
    • The CLI now recognizes when GitHub Copilot runs it, from VS Code's agent terminal or the Copilot CLI. When the Editor can't be reached, the connection error mentions that an agent sandbox may be blocking local connections.
    • unity releases --operating-system <windows|macos|linux>
      lists another operating system's releases, and
      unity install <version> --dry-run --operating-system <os>
      shows what that system's Editor and modules would download, so you can plan a Windows build machine from a Mac. Without
      --dry-run
      , an install for another operating system stops with
      CROSS_OS_INSTALL_UNSUPPORTED
      and names the dry run instead.
    • When the CLI is signed out and Unity Hub is signed in,
      unity auth login
      shows the Hub's account and the
      unity auth switch
      command that uses it in the CLI with no browser sign-in, then continues with the browser sign-in. Nothing changes in the Hub.
    • unity open --until-ready
      (and
      unity projects open --until-ready
      ) now names three dialogs the way
      unity status
      does:
      OPEN_BLOCKED_BY_DIALOG_SAFE_MODE
      for "Enter Safe Mode?" (quoting up to three compile errors from the Editor's log),
      OPEN_BLOCKED_BY_DIALOG_GRAPHICS_API
      for the Windows "Auto Graphics API Notice", and
      OPEN_BLOCKED_BY_DIALOG_SOFTWARE_TERMS
      for "Unity Editor Software Terms". The message gives the same remedy as
      status
      .
    • unity status
      reports an Editor waiting at the "Enter Safe Mode?" prompt with its own error code,
      STATUS_BLOCKED_BY_DIALOG_SAFE_MODE
      , and quotes the first compile errors from the Editor's log when it can read them. The message says what to do: quit, fix the errors and open the project again, or choose Enter Safe Mode in the Editor.
    • unity cloud project --help
      now ends with a pointer to
      unity projects link cloud
      , where a local project is linked to Unity Cloud, and
      unity projects link cloud --help
      points back to
      unity cloud project
      for listing projects and setting a default.
    • unity open --accept-upgrades
      (also
      unity projects open
      ) opens a project without stopping at the Editor's upgrade dialogs, so an unattended open no longer hangs on "Project Upgrade Required" or the API Updater's script consent. It says yes to both: the project is upgraded to the Editor's version and Unity rewrites scripts that use obsolete APIs, with no backup prompt.
    • unity install --download-directory <dir>
      (
      -d
      ) installs a self-contained Editor into a folder you name, such as a CI workspace, without changing the install path or adding it to the Hub's Editor list. Modules from
      -m
      go into the same folder, and
      unity install-modules --download-directory <dir>
      adds more later.
    • unity projects create --bare
      creates the project from the template without the default project scaffolding. The Unity Cloud link and
      --vcs
      work as usual beside it, and
      --no-cloud
      still turns the link off.
    • unity projects create
      reports each setup step it ran in a new
      steps
      field of its
      --json
      and
      --ndjson
      result: one entry per step, each
      done
      ,
      present
      when the template already had it,
      skipped
      with a reason, or
      failed
      with an error code.
    • unity open --until-ready
      (and
      unity projects open --until-ready
      ) waits until the Editor it launched is ready for commands, instead of returning right away. When a dialog stops the Editor, such as Project Upgrade Required, Script Updating Consent, Enter Safe Mode? or the Unity Editor Software Terms, it fails at once with
      OPEN_BLOCKED_BY_DIALOG
      , the dialog's title and what to do about it, rather than leaving a script waiting forever.
    • unity mcp --tools <list>
      exposes only the Editor tools whose names match the list, and
      --exclude-tools <list>
      hides the ones that match, so an agent's context holds only the tools you want it to use. Both take comma-separated names, and
      *
      matches any run of characters (
      --tools "eval,capture_*"
      ).
    • The CLI tells you, at most once a day, when a plugin you installed with
      unity plugin install
      has a newer version, and suggests
      unity plugin upgrade
      . Under
      --format json
      and
      --format ndjson
      it arrives as a
      PLUGIN_UPDATE_AVAILABLE
      entry in
      notifications
      , and over MCP in the server's instructions.
    • unity command --obsolete-command-names
      lists the command names from before command groups and the names that replaced them, from an Editor with a Pipeline package that serves them.
    • unity --help
      and the unknown-command error now end with "Not sure which command?
      unity commands --grep <term>
      ", so a command you can't name is one search away.
    • unity setup antigravity
      installs Unity's agent plugin into Google Antigravity by running
      agy plugin install https://github.com/Unity-Technologies/unity-agent-plugin
      . Like
      unity setup codex
      and
      unity setup grok
      , it reports an existing install instead of reinstalling, takes
      --dry-run
      and every output format, and fails with
      ANTIGRAVITY_NOT_FOUND
      when
      agy
      isn't on your PATH.
    • unity docs --package <name>
      opens a package's manual for the version your project uses, read from
      Packages/packages-lock.json
      , for example
      unity docs --package com.unity.2d.sprite
      . Outside a project it opens the newest release's manual.
    • unity docs toc
      lists every page of the scripting API reference, or the manual with
      --manual
      , on docs.unity.com, so an agent can pick a real page instead of guessing. Each page has its path and URL, in every output format.
    • unity docs <topic>
      opens the local page from the Editor's Documentation module when it is installed for your project's Editor version (or the one
      --editor-version
      names), so it works offline.
      --online
      opens docs.unity.com instead, and
      --url
      always prints the docs.unity.com address.
    • unity docs <topic> --content
      prints the page's Markdown instead of opening a browser, and
      --format json
      wraps it with the page URL, the version and the source. Package topics read the package's local
      Documentation~
      Markdown, or say that no Markdown exists online yet.
    • --no-header
      leaves the header row out of
      tsv
      output, for scripts that only want the rows.
    • The
      --json
      and
      --format ndjson
      rows of
      unity modules list
      ,
      unity editors module list
      and
      unity install-modules --list
      now include
      downloadBytes
      and
      installedBytes
      as integers and
      isInstalled
      as a boolean. Scripts should read these instead of
      download
      ,
      installed
      and
      status
      , which are display text, and
      status
      is translated.
    • unity projects link cloud <path> --cloud-project <id> --replace
      switches a project that is already linked to another Unity Cloud project in one step: it writes the new link over the old one in the project's settings and the Hub's project list, with no
      unity projects unlink cloud
      first, and names the link it replaced (
      previousLink
      in JSON). Without
      --cloud-project
      ,
      --replace
      takes
      UNITY_CLOUD_PROJECT
      or your saved default project, and fails with
      REPLACE_NEEDS_CLOUD_PROJECT
      when neither is set: it never creates a cloud project.
    • Every row of
      unity commands --grep
      and
      unity command --query
      now says what matched and how to run it:
      --format json
      adds
      path
      and
      matchedOn
      (
      name
      ,
      description
      or
      option
      ), and
      --format tsv
      adds them as its last two columns. An installed plugin's row now shows
      unity <plugin>
      as its run line instead of nothing.
    • The
      --json
      and
      --format ndjson
      rows of
      unity editors
      now list an installed Editor's platforms (with
      --verbose
      , its modules) as the
      moduleNames
      array.
    • The
      --json
      and
      --format ndjson
      rows of
      unity status
      now name each Editor's project as
      projectPath
      and its version as
      editorVersion
      , and the rows of
      unity editors running
      name the version as
      editorVersion
      , the same names other commands use.
    • unity command
      ,
      unity list
      ,
      unity job
      and
      unity mcp
      take
      --port <number>
      ,
      --pid <number>
      and
      --instance <name>
      to pin one running Editor when several are open, including a Multiplayer Play Mode player by its instance name. A pin that matches no running Editor exits 12 and lists the Editors that are running.
    • unity open --batchmode
      starts a headless Editor with no window. Add
      --until-ready
      to return once it is ready for commands, with the same dialog, exit and timeout errors as a windowed open.
    • unity status
      now reports an Editor in Safe Mode, which it used to leave out or show only as unreachable. The Editor's row lists its compile errors (file, line and message) in every output format, and the command fails with
      STATUS_SAFE_MODE
      and exit code 6 (an Editor shown only as unreachable gave 12).
    • unity logs --console
      reads the running Editor's console, and
      unity logs --console --follow
      streams new entries as the Editor logs them until you press Ctrl-C. Burst and C# compiler errors come with their code, file and line,
      --level
      and
      --tail
      work as they do for the CLI log,
      --project-path
      picks the Editor, and
      --format ndjson
      writes one entry per line.
    • unity version --json
      reports the commit a release was built from and its build date, as
      commit
      and
      buildDate
      , so a support report can be traced to the exact build. A build you compile yourself reports both as
      null
      .
    • unity license activate
      reads the license serial from the
      UNITY_LICENSE_SERIAL
      environment variable when you pass no
      --serial
      and no other activation option, so the serial stays out of the process list on shared machines.
      --serial
      still works and takes precedence.
    • When an AI coding agent runs
      unity
      and Unity's plugin or skill isn't installed for it, the CLI now suggests one. In Claude Code, you get Claude Code's own one-time prompt to install the Unity plugin.
  • Changed
    • unity env
      names its version row "CLI version", and its
      --json
      output adds
      cliVersion
      .
      unity doctor --json
      and
      --format tsv
      add
      runtimeVersion
      .
    • The CLI's MSIX package (the winget install) now needs Windows 10 version 21H1 or later, the same as the Unity Hub.
    • When their output is piped or redirected, or with
      --format tsv
      ,
      unity projects link cloud
      and
      unity projects unlink cloud
      now print one tab-separated row: the result (
      linked
      ,
      already-linked
      ,
      unlinked
      or
      not-linked
      ), the project path, the cloud project ID, the project name, the organization ID, and
      true
      when a new cloud project was created. For
      unlink cloud
      , the name is the one saved with the link, which is the local project's title when the CLI made the link.
    • -a
      now means
      --architecture
      on every command, and
      -y
      means
      --yes
      on every command that has
      --yes
      , including
      unity bug mcp
      ,
      unity mcp configure
      ,
      unity skill install
      and
      unity skill refresh
      .
      unity projects list
      and
      unity projects size
      show
      --all
      with no short flag;
      -a
      still works there, so existing scripts keep running.
    • When
      unity releases
      can't reach the Unity release service, the error names the host it tried and why, such as
      ECONNREFUSED
      or a failed secure connection, instead of "fetch failed". A connection, TLS or timeout failure also says how to set a proxy (
      unity config proxy <url>
      or
      HTTPS_PROXY
      ), and
      --json
      reports the network error code in
      errors[].code
      .
    • unity open
      (also
      unity projects open
      ) no longer passes
      -acceptSoftwareTermsForThisRunOnly
      to the Editor when you run it from a terminal, so the Editor shows its own Software Terms dialog to you. An unattended open (
      --non-interactive
      ,
      UNITY_NON_INTERACTIVE
      , a machine
      --format
      , redirected output or CI) still passes it, and a copy you add with
      --args
      is kept.
    • unity commands --grep
      matches a regular expression with no time limit, so a pattern such as
      (a+)+$
      no longer stops with "took too long". Backreferences (
      (a)\1
      ) and lookaround (
      (?<=a)b
      ) are no longer supported and are refused as an invalid pattern, and an invalid pattern's error now ends with a short reason such as
      unclosed group
      .
    • unity commands --grep
      now matches plain words in any order and lists the best matches first, so
      unity commands --grep 'cloud link'
      finds
      projects link cloud
      at the top. A word in the command's own name ranks above one in its parent group, then its description, then its options.
    • When
      unity commands --grep
      or
      unity command --query
      can't search the Editor's Pipeline commands, because no Editor is connected, more than one is open, or it didn't answer within 3 seconds, the output ends with a line saying why and the command to run next.
      unity command --query
      without a connected Editor answers with that line and the number of CLI commands and plugins that match, and exits 0 instead of failing.
    • unity projects
      is now described as "Create, open, upgrade, and link local Unity projects (Unity Cloud, GitHub/GitLab)" in
      unity --help
      , instead of "Manage Unity projects in the Hub registry", so
      unity commands --grep cloud
      finds it. Use
      unity projects link cloud
      to link a project to Unity Cloud.
    • unity projects create
      adds the Pipeline package to every new project, so
      unity command
      works on it without a separate
      unity pipeline install
      .
      --bare
      leaves it out, and
      --with-pipeline
      , which used to opt in, is still accepted and does nothing.
    • unity auth list
      now marks accounts the CLI is not signed in to, such as ones you signed in to only in Unity Hub, with
      (not signed in to the CLI)
      , and
      --format json
      adds
      signedIn
      and
      signInState
      to each account. When no account is active,
      unity auth status
      now says how many stored accounts are not signed in to the CLI and suggests
      unity auth login
      , or
      unity auth switch <account>
      for one that is.
    • unity auth switch
      to a stored account the CLI is not signed in to now says so and suggests
      unity auth login
      , and exits with code 3 and the error code
      ACCOUNT_NOT_SIGNED_IN
      . It used to fail with exit code 6 and an internal message about a missing token slot.
    • unity auth login --help
      , and
      unity auth status
      when you are not signed in, now say that a perpetual or legacy serial license needs no sign-in, and show the command:
      unity license activate --serial <serial>
      . A subscription serial still needs a signed-in user.
    • -V
      and
      --version
      print the CLI version only at the top level:
      unity --version
      and
      unity -V
      work as before. After a command they are no longer the CLI version, so
      unity editors --version
      now fails as an unknown option (exit 2,
      INVALID_COMMAND_ARGS
      under
      --format json
      ), and a command's own
      --version
      means the version of what it acts on.
    • When the CLI hides an e-mail address in its log file or a crash report, it now keeps the domain (
      [redacted]@example.com
      ) and removes only the part before the
      @
      , as the Unity Hub does. It used to replace the whole address with
      <redacted-email>
      .
    • unity cloud project current
      now labels what it prints as the saved default project for the organization, and inside a project folder linked to a cloud project it also prints that linked project. With
      --format json
      ,
      activeCloudProjectId
      still holds the default, and
      defaultCloudProjectId
      and
      linkedCloudProjectId
      are added beside it.
    • A template's
      package/package.json
      larger than 16 MiB is now refused, and the template no longer appears in
      unity templates list --editor <version>
      . Real template files are a few KiB, so only a damaged or hostile archive is affected.
    • unity cloud project set-default
      now tells you when the project is in another of your organizations. Instead of reporting the project as unknown, the error names that organization and the
      unity cloud org set-default
      command that makes it active, and
      --format json
      carries the organization under
      data.organization
      .
    • unity pipeline install
      ,
      unity pipeline upgrade
      and
      unity projects create --with-pipeline
      now save
      Packages/manifest.json
      in the encoding it already had, byte order mark included, and replace it in one step, so a run that stops halfway never leaves a broken manifest. They also only pin a plain version number from the Unity registry, and a manifest that repeats a top-level key is updated instead of failing.
    • unity projects add
      now checks a folder the way Unity Hub's Add project from disk does. It refuses a system folder, such as
      /usr
      ,
      C:\Windows
      or
      /Applications
      itself, with
      System folders can't be used as Unity projects
      ; a complete project inside
      /Applications
      or
      C:\Program Files
      is still added.
    • When the CLI cannot read your signed-in account, a command now runs without the first-run analytics prompt and sends no analytics for that run, and
      unity analytics opt-in
      and
      opt-out
      exit with an error saying your choice was not saved, and change nothing. They also refuse when
      user-settings.json
      repeats a key or cannot be read.
    • unity skill install codex
      now checks for the Unity plugin that
      unity setup codex
      installs. When the plugin is enabled and already carries the skill, the install says so and asks before writing a second copy, which Codex would load as well; without a terminal, or when you decline, it skips.
    • On Windows,
      unity install-path --set
      and
      unity editors install-path --set
      now answer a device path that names no drive, network share or volume, such as
      \\.\pipe\name
      , with
      This directory does not exist.
      without opening it. Drive paths,
      \\?\C:\...
      paths,
      \\?\Volume{...}
      paths and network shares are checked as before.
    • unity projects create --vcs <host>
      now refuses an IPv6 address or a host name with non-ASCII characters as an invalid provider. Use the server's ASCII host name, the one your provider CLI signs in to.
    • unity projects create
      and
      unity projects new
      now check a new project's name and location the way Unity Hub's New Project window does. A name can be at most 223 characters, which leaves room for the files Unity names after the project.
    • When a command is not found, the tip now names
      unity command
      for the command groups,
      unity command --tags
      for the tags and, when the Editor's Pipeline package supports it,
      unity command --obsolete-command-names
      for the old names.
    • unity command
      with no command name now lists the Editor's command groups instead of its tags, and an Editor with an older Pipeline package still lists its tags.
    • unity command <group>
      lists the commands in that group like
      --tag
      does instead of printing a raw result, and command listings and results show each command as you type it (
      editor.playmode start
      ).
    • unity command editor status
      and the other full command names,
      unity editors playmode
      and
      unity recompile
      still work with a Pipeline package from before command groups, and warn once to run
      unity pipeline upgrade
      .
    • unity projects link cloud
      without
      --cloud-project
      now links the project named by
      UNITY_CLOUD_PROJECT
      , then your saved default project for the organization (
      unity cloud project set-default
      ), and creates a Unity Cloud project only when neither is set. On a terminal it asks first, with that project preselected, and it always says when it created one (
      created
      in
      --format json
      ).
    • A plugin killed by a signal, run as
      unity <tool>
      or as a
      unity-<name>
      command on your PATH, now exits with
      128
      plus the signal number (
      139
      for a segmentation fault), the way a shell reports it, instead of
      1
      . The CLI log now names the plugin, its version when known, and the signal, so
      unity bug
      includes them.
    • unity cache key
      with more than one path now lists every argument you passed in its error.
      unity config accelerator
      now refuses an IPv6 address with an interface name, such as
      [fe80::1%eth0]
      , whose number depends on the machine; use the numbered zone instead, such as
      [fe80::1%3]
      .
    • unity templates
      and
      unity projects create
      now say plainly when the Unity Hub templates folder can't be created, its list of downloaded templates can't be reset or it repeats a key, for example
      Could not create the templates folder (PermissionDenied).
      , instead of printing a raw system error.
      unity templates delete
      reports a custom templates folder it can't create or read the same way.
    • unity projects create --template <folder>
      now refuses a template whose
      package.json
      repeats a key as not a valid Unity template, and
      unity projects create
      and
      unity projects new
      report the Editor version as unresolved, with how to choose one, when the newest installed Editor can't be told apart, instead of printing an internal error.
      unity projects new
      ,
      create
      ,
      link vcs
      and
      unlink vcs
      run from a folder that no longer exists now say
      Unable to read the current directory.
      unless you pass an absolute path.
    • unity command
      without
      --timeout
      now lets each Editor command use its own default timeout (for example 10 minutes for
      run_tests
      ) instead of a flat 30 seconds, on a
      com.unity.pipeline
      that supports it.
      --timeout <seconds>
      still overrides it, and when it runs out the Editor's own timeout message is shown.
    • A command the Editor rejects because a modal dialog is open now fails at once instead of retrying until
      --timeout
      runs out. Its error, and the timeout error of a command or job that was already running when the dialog appeared, now name the dialog and the
      unity command editor.dialog answer <id> <button>
      (or
      unity command editor.dialog dismiss <id>
      for an Editor window) to run;
      unity command editor.dialog list
      shows what is open.
    • When the Editor is running but its Pipeline server can't answer yet, for example while scripts compile,
      unity command
      now shows the Editor's reason, such as
      Compiling scripts.
      , instead of a bare 503 status or a cannot-connect error. A
      unity command --query
      search still reports that no Editor could be searched.
    • When the CLI can't reach the Unity Editor from inside an AI coding agent, the hint about the agent's sandbox now also covers Codex, opencode, Cline, Roo Code, Augment, Goose, OpenClaw, Trae and Antigravity, and Cursor's agent. It no longer appears when you type commands yourself in Cursor's terminal.
    • When the CLI can't reach the Unity Editor from inside an AI coding agent, the hint about the agent's sandbox now also covers Grok Build.
    • unity auth revoke
      with an empty application name reports a usage error that points at
      unity auth consumers
      .
    • unity build run
      's local server for a WebGL build answers only requests addressed to
      localhost
      ,
      127.0.0.1
      or
      [::1]
      , so a web page on another site can't read your build through a rebound domain name. It also closes each connection after its response.
    • unity test --shard
      and
      --rerun-failed
      refuse a
      --filter
      pattern that is too long or too complex to check against the test names, with a message that says so, and
      --affected
      then runs the whole suite instead of narrowing it.
    • unity run
      ,
      unity test
      and
      unity build
      check the
      --log-file
      path, and
      unity test
      the JUnit report path, before the Editor starts. A
      --log-file
      path that runs through a file, or a JUnit report path that is a folder or runs through a file, is refused with a message naming the option to change.
    • unity build --create-profile
      refuses an architecture it doesn't know, from
      --architecture
      or
      UNITY_ARCHITECTURE
      , with the same usage error as every other
      unity build
      .
    • unity projects clone --vcs uvcs
      ,
      unity projects link vcs --vcs uvcs
      and
      unity projects create --vcs uvcs
      download the Unity Version Control client only from the vendor's own download servers when it isn't installed, and stop if the download redirects anywhere else. The client is checked against its published checksum before it is installed.
    • unity editor module list
      and
      add
      on macOS report Visual Studio as installed when
      Visual Studio.app
      is in
      /Applications
      or
      ~/Applications
      , without asking macOS for permission to control it.
    • unity editors default <version>
      and
      unity editors default --unset
      fail with exit code 6, and change nothing, when your saved settings file holds a number too large to read or text that cannot be decoded. Fix or remove the file, then try again.
    • unity editors upgrade
      with no editor named no longer asks which one to upgrade on a terminal. It stops and asks you to name an editor or pass
      --all
      , as it already did in scripts.
    • unity editor module add
      (and
      unity editors module add
      ) no longer asks you to accept module license terms on a terminal. Pass
      --accept-eula
      to accept them; without it, a module with license terms is not installed.
    • unity install
      ,
      unity install-modules
      and
      unity modules list
      report a clear error when a Unity Hub file or an answer from Unity's release service can't be read, when the install lock can't be used, or when the computer's architecture can't be told. In that last case, pass
      --architecture
      .
    • unity
      now ships as a native Rust binary on macOS, Linux and Windows, with no .NET runtime inside.
    • unity open
      and
      unity projects open
      no longer ask on a terminal which of several matching projects or Editors to use, or whether to install a missing Editor first. They stop with the same message a script gets: pass the project's full path,
      --architecture
      or the exact version, or run the suggested
      unity install
      command.
    • unity collab
      delete commands no longer ask for confirmation on a terminal. Pass
      --non-interactive
      to confirm the deletion.
    • unity pipeline install
      no longer asks which running Editor to install into when several could take the package. Pass
      --project-path
      to choose one.
    • unity projects create
      and
      unity projects new
      download a template that isn't on disk yet and verify it against the checksum the template catalog lists before using it. A template whose catalog entry lists no checksum is refused.
    • unity projects create --open
      ,
      unity projects new --open
      and
      unity projects upgrade --yes
      no longer ask on a terminal which of several matching Editors to open the project in, or whether to install a missing one.
      create
      and
      new
      still create the project and warn that it did not open;
      upgrade
      stops.
    • unity close
      ,
      unity projects close
      ,
      unity projects require
      ,
      unity projects upgrade
      ,
      unity projects create
      and
      unity projects new
      stop with a clear error, before anything is changed, when Unity Hub's project list, a project's files or the Hub's settings hold a value the CLI can't read.
    • Commands that reach the network, among them
      unity license
      ,
      unity collab
      ,
      unity hub install
      ,
      unity templates
      ,
      unity plugin
      ,
      unity projects create
      ,
      unity editors
      and
      unity install
      , now run behind a proxy set through
      HTTPS_PROXY
      ,
      HTTP_PROXY
      ,
      ALL_PROXY
      ,
      UNITY_PROXY
      or
      unity config proxy
      , a SOCKS or credentialed proxy,
      NODE_EXTRA_CA_CERTS
      , or a macOS automatic proxy configuration (PAC), and with
      --log-proxy
      on.
    • --proxy <url>
      and
      --proxy-disable
      now take precedence over proxy environment variables, so
      --proxy <url>
      works while a proxy variable is also set.
    • Commands that reach the network now read proxy variables per scheme, as curl does:
      HTTPS_PROXY
      covers
      https://
      requests and
      HTTP_PROXY
      covers
      http://
      ones, while
      UNITY_PROXY
      and
      ALL_PROXY
      cover both. Before, the first variable found was used for every request.
    • On Windows, a system proxy set only for HTTP is no longer used for
      https://
      requests, matching other Windows apps. Set a proxy for secure connections too, or one proxy for all protocols, to keep routing them through it.
    • unity shell
      on a terminal uses a simpler line editor: the usual editing keys work, and Up and Down recall commands from the current session. Tab completion and history from earlier sessions aren't available.
    • unity templates list
      ,
      info
      ,
      delete
      and
      edit
      stop with a clear message, and leave the file alone, when Unity Hub's saved template data holds a value the CLI can't read.
      unity templates edit
      no longer edits a template whose
      package.json
      holds such a value.
    • Every curated tool command, such as
      unity uvcs
      ,
      unity cm
      ,
      unity plastic
      and
      unity ugs
      , hands the terminal straight to the tool. A first-run analytics consent question waits for the next
      unity
      command instead.
    • On Windows,
      unity projects clone --vcs uvcs
      ,
      unity projects link vcs --vcs uvcs
      and
      unity projects create --vcs uvcs
      work again, downloading the Unity Version Control client on first use. The first check-in keeps files whose names use characters outside your system code page.
    • unity projects create --vcs
      ,
      unity projects link vcs
      and
      unity vcs setup
      create the repository on a self-hosted host through
      tea
      ,
      bkt
      or
      az
      when it is the signed-in tool, with no change to how you sign in. A repository that Azure DevOps created but whose reply
      az
      printed unreadably is now reported as left behind, with its URL when there is one.
    • unity projects unlink vcs
      no longer asks for confirmation on a terminal before it removes a Unity Version Control workspace that holds other projects. Pass
      --unlink-workspace
      to remove it, as in a script.
    • unity projects unlink cloud --cascade-vcs
      no longer asks for confirmation on a terminal before it removes the Unity Version Control workspace:
      --cascade-vcs
      confirms it. A workspace that holds other projects also needs
      --unlink-workspace
      .
    • unity vcs setup
      ,
      unity projects link vcs
      and
      unity projects create --vcs
      no longer ask for a missing provider token or offer to install Git LFS on a terminal. A missing token is reported with the option to pass, and the Git LFS install offer prints the command to run instead of asking.
    • On Windows,
      unity uninstall
      ,
      unity editors prune --remove
      and
      unity editors upgrade --replace
      remove an Editor you own without asking for administrator rights. An Editor installed with its own uninstaller, or one in a folder you can't change such as Program Files, is removed after one administrator prompt per command, and setting
      UNITY_NO_ELEVATE
      refuses it with nothing removed.
    • unity projects create
      and
      unity projects new
      default to the Editor version's own URP template (
      com.unity.template.urp-blank
      ) instead of the Built-in Render Pipeline 3D template, and
      --template 3d
      or
      --template 2d
      picks that version's 3D or 2D URP template. When the version doesn't offer it, the command fails with
      TEMPLATE_NOT_FOUND
      and lists the templates it does offer.
    • unity docs
      now uses only docs.unity.com, since docs.unity3d.com is being shut down. A class name finds its real page through the site's page index, so
      unity docs AdaptivePerformancePackageMetadataStore
      and
      unity docs GameObject.activeSelf
      open the right page instead of a 404, and a name two pages share goes to search rather than a guess.
    • Giving an old and a new option spelling different values prints a warning naming the value used, the last one typed. For
      status --project
      beside
      --project-path
      the last one now wins; before,
      --project-path
      always did.
    • unity collaboration
      takes the Unity Cloud organization and project as
      --cloud-org <id>
      and
      --cloud-project <id>
      , like the rest of the CLI.
      jira server
      ,
      jira project add
      ,
      delete
      and
      update
      , and
      jira issues list
      use
      UNITY_CLOUD_ORG
      , then the default organization (
      unity cloud org set-default
      ), when you don't pass
      --cloud-org
      .
    • In
      unity collaboration
      , an empty or blank
      --cloud-org
      ,
      --cloud-project
      ,
      UNITY_CLOUD_ORG
      or
      UNITY_CLOUD_PROJECT
      counts as not set, so the next source is used, as
      unity pipeline cloud-build
      does.
    • --since
      now always takes a revision, as it does on
      vcs summarize
      ,
      vcs affected
      and
      test
      .
      vcs git migrate-lfs
      bounds its scan with
      --after <date>
      , and
      releases
      filters from a year with
      --from-year <year>
      .
    • Four options take the spelling every other command uses:
      --git-token-from-stdin
      on
      projects create
      ,
      projects clone
      ,
      projects link vcs
      and
      vcs setup
      ;
      --local
      on
      collaboration annotations create
      and
      update
      , as on spatial attachments;
      --group-by
      on
      command
      ; and
      --long
      on
      editors
      and
      projects list
      to show every column. The old spellings (
      --git-token-stdin
      ,
      --local-space
      ,
      --group_by
      , and
      -v
      on
      projects list
      ) still work and print a warning naming the new one.
    • Every
      --timeout
      , and
      UNITY_BUILD_TIMEOUT
      ,
      UNITY_RUN_TIMEOUT
      and
      UNITY_TEST_TIMEOUT
      , now takes a whole number of seconds written as digits, such as
      --timeout 30
      ; any other value is a usage error (exit code 2) that quotes it. Scripts may need updating:
      30s
      or
      5m
      on
      build
      ,
      run
      ,
      test
      ,
      watch test
      and
      recompile
      used to wait 30 and 5 seconds,
      1e3
      and
      0x10
      on
      status
      ,
      open
      ,
      projects open
      ,
      close
      ,
      projects close
      and
      job wait
      waited 1000 and 16 seconds, and
      command --timeout 1.5
      waited one and a half seconds.
    • unity install
      ,
      unity install-modules
      and
      unity projects require
      bound the wait for another install with
      --timeout <seconds>
      , the spelling every other command uses for a time limit. The old
      --wait-timeout
      still works and prints a warning naming
      --timeout
      .
    • Under
      --format json
      , a command that reports an error on stderr now writes the plain
      Error: ...
      line there, as every other format does, instead of a
      {"error": ...}
      object. Read the outcome from the envelope on stdout (
      success
      and
      errors
      ), not from stderr.
    • unity auth status --format json
      signed out now reports
      success: false
      with a
      NOT_SIGNED_IN
      error (
      SESSION_EXPIRED
      for an expired session), matching its exit code
      3
      . The status report stays in
      data
      .
    • unity auth login --format json
      now writes its
      auth_url=
      progress frame, and the
      adoptable=
      frame, to stderr, so stdout holds only the result envelope.
    • unity skill install --format json
      now writes one envelope whose
      data
      is an array with a record per skill it considered, instead of one envelope per skill, so its stdout parses as a single JSON document.
      --format ndjson
      writes the same records as its result frame.
    • unity skill list
      ,
      unity skill enable
      ,
      unity skill disable
      and
      unity skill install --list
      now end
      --format ndjson
      output with a
      {"type":"result"}
      frame carrying the same data as
      --format json
      , instead of writing nothing.
    • Status commands that answer no now report
      success: false
      in
      --format json
      , so
      success
      agrees with the exit code:
      unity cloud status
      when signed out (
      NOT_SIGNED_IN
      or
      SESSION_EXPIRED
      ),
      unity license status
      with no active license (
      LICENSE_NOT_ACTIVE
      ), and
      unity license server status
      with no server or an unreachable one (
      LICENSE_SERVER_NOT_CONFIGURED
      ,
      LICENSE_SERVER_UNREACHABLE
      ). Their exit codes and
      data
      are unchanged.
    • tsv
      headers now use the same keys as the
      --format json
      rows (
      version
      ,
      upgradeTo
      ,
      genesisId
      ), whatever your language, instead of the translated column titles. A flag that adds information only appends columns, so
      unity editors --verbose
      keeps the same columns and order.
    • An empty
      tsv
      result prints the header row instead of nothing or a sentence (any "no results" hint goes to stderr), and lists that printed bare rows (
      unity projects list
      , the
      vcs
      tables) now lead with a header row too.
    • Piped
      unity projects list
      now prints a header row and the project name before its path, where it printed bare paths. A script that reads each line as a path, such as
      unity projects list | xargs
      or a
      while read
      loop, needs
      --no-header
      and the second column, for example
      unity projects list --no-header | cut -f2
      .
    • Piped
      unity projects list
      has a fixed column set:
      name
      ,
      path
      ,
      version
      ,
      modified
      ,
      cloudProjectId
      ,
      pipeline
      ,
      vcs
      . A column flag such as
      --cloud
      fills its column, which stays empty without it, so adding a flag never moves a column.
    • Boolean
      tsv
      columns print
      true
      or
      false
      : the
      default
      column of
      unity cloud org list
      and
      unity cloud project list
      and the
      active
      column of
      unity context list
      no longer print
      *
      , and the
      removed
      column of
      unity editors prune
      prints
      true
      or
      false
      instead of a translated status.
    • An unset value is an empty
      tsv
      cell:
      unity context list
      ,
      unity context current
      and
      unity context save
      no longer print
      (not set)
      .
    • tsv
      keeps stdout for data: messages, hints and failures such as "You are not signed in" from
      unity auth status
      and the
      unity cloud
      commands now go to stderr.
    • --quiet
      now hides warnings in human and tsv output, and no longer changes json output. With
      --format ndjson --quiet
      , every listing now keeps its rows except
      editors upgrade
      ,
      editors module list
      ,
      install-modules
      ,
      build --list-targets
      ,
      build --list-profiles
      and
      env
      , which still leave them out.
    • In
      --format ndjson
      , warnings appear only in the final result line's
      warnings
      , no longer on stderr. In
      --format json
      , a warning that was only printed to stderr before now appears in
      warnings
      .
    • unity projects info
      now names the project's Unity Cloud organization when you are signed in, for example
      Acme (1001 / <uuid>)
      , whether Unity Hub, the CLI, or the Unity Editor last wrote the link. With
      --format json
      it adds
      organizationName
      ,
      organizationGenesisId
      , and
      organizationUuid
      after
      organizationId
      , which still holds the stored value.
    • unity cloud org current
      now names your default organization when your session is held by the auth broker, and it no longer starts the auth broker to do so. With no broker running on macOS or Linux, it prints the stored value as before.
    • unity self-update
      now runs when
      --no-log-proxy
      is passed.
    • unity commands --grep <term>
      and
      unity command --query <term>
      are now one search over the CLI's commands, its plugins and the Pipeline commands of the connected Editor, best match first. Pipeline matches show as kind
      pipeline
      , and every row says how to run it (
      --format json
      adds an
      invoke
      field).
    • unity vcs setup
      now refuses a preset file that repeats a key or holds a broken text escape as invalid, with
      VCS_PRESET_INVALID
      , instead of failing with an internal error. The
      unity vcs hooks run pre-commit
      check reports a staged
      Packages/manifest.json
      that is not valid JSON, a repeated key included, as "the file is not valid JSON".
    • unity vcs setup --vcs
      and
      unity projects link vcs --vcs
      now refuse an IPv6 address and a host name with non-ASCII letters as an unsupported provider, as
      unity projects create --vcs
      already does.
    • unity commands --grep
      now reads regular-expression patterns the way .NET does. Patterns .NET refuses, such as
      a++
      and
      (a|b)+??
      , are refused,
      [[:alpha:]]
      and
      \11
      match as they do in .NET, a regular-expression pattern longer than 4096 characters is refused, and an invalid pattern's error ends with .NET's own wording, for example
      nested quantifier
      .
    • Breaking: failures that say what went wrong now exit with their own code instead of
      6
      , so a script can tell whether to retry.
      11
      : the path isn't a Unity project, or the release or module doesn't exist.
    • Ctrl-C and SIGTERM now end every command by the signal, which a shell reports as
      130
      and
      143
      and which stops a shell loop. Under
      --format json
      or
      ndjson
      the command first writes a failure with the code
      INTERRUPTED
      (Ctrl-C) or
      TERMINATED
      (SIGTERM), unless it had already started writing its own result.
    • Passing
      --json
      together with a different
      --format
      , such as
      --json --format tsv
      , now stops with a usage error (exit code 2) that names both flags, instead of quietly printing the
      --format
      output. Pass one of them.
    • unity mcp configure
      quotes arguments with spaces or other shell characters in the
      npx
      and
      claude
      command lines it shows and reports, so they can be pasted back. Quoting uses single quotes, which Windows
      cmd.exe
      does not read; a Windows path without spaces is shown unquoted.
    • unity --help
      now lists the top-level commands by area (Editor, Project, Editor Automation, Build and Test, Cloud and Account, Setup, and Help and Diagnostic) instead of one long list, so a command is easier to find.
    • On Linux, module downloads are checked against their published checksums again, as on macOS and Windows. A module that doesn't match fails to install instead of being installed unverified.
    • unity projects create
      and
      unity projects new
      create the project in a folder that already exists when that folder is empty, so
      mkdir MyGame
      then
      unity projects create MyGame
      works. A folder that holds anything, hidden files and
      .git
      included, is still refused.
    • When a command can't run because a proxy points to a PAC script, the error now names where that proxy came from (
      --proxy
      , the environment variable, or the saved proxy file) and how to fix it. A saved proxy file the CLI can't read is named too.
    • unity projects upgrade
      exits 3 when the Unity Cloud step is refused with a 401 or 403, or the session is signed out, and 7 when the Unity Cloud service can't be reached. These used to exit 6.
    • unity pipeline cloud-build
      accepts a Unity Cloud project name as well as an id in
      --cloud-project
      and
      UNITY_CLOUD_PROJECT
      , the way
      unity projects link cloud
      does. A name that matches no project, or more than one, is an error that names it.
    • Windows: links the CLI opens in your browser no longer pass through the command shell, so they open exactly as written.
    • unity setup claude
      installs Unity's plugin from Anthropic's official Claude Code marketplace, as
      unity@claude-plugins-official
      . A plugin you installed earlier from Unity's own marketplace still counts as installed.
    • The CLI now uses Unity Licensing Client 1.19.0. A client it downloaded under an earlier version is replaced the next time a
      unity license
      command or an Editor launch needs it.
  • Removed
    • The
      UNITY_CLI_FTUE
      variable and agent first-session ("paved") mode are removed. Machine output no longer carries
      "paved"
      , and
      unity projects create
      no longer writes
      UserSettings/UnityCliPaved.json
      or reports
      pavedSettings
      .
    • unity serve
      is removed; it existed for the retired Electron Hub.
  • Fixed
    • unity self-update
      no longer tells you to update to the version it just installed. The reminder is also gone after
      --check
      ,
      --rollback
      and
      --dry-run
      .
    • unity projects create
      no longer deletes a corrupt template archive that sits in a folder whose name differs from the templates folder only by letter case, on a case-sensitive volume. It reports the archive as unreadable and keeps it, so you remove or replace the file yourself.
    • On Linux, installing or repairing an Editor or module no longer fails with a process error when the installer finishes at the exact moment the CLI samples its progress. The CLI treats that as a missing reading and lets the install complete.
    • unity editors info
      now reports the installer and modules for your machine's architecture, or the platform's only build when there is none for it: on Linux arm64 that is the x86_64 installer, which runs only under FEX-Emu. On x64 Windows it used to show the Arm64 installer.
    • unity mcp configure <client> --format json
      and
      --format ndjson
      printed nothing and exited 0. They now print the result (client, scope, the config path written or that a dry run would write, and what happened), and a failed write is reported in that result with a non-zero exit.
    • On Windows,
      unity build
      ,
      run
      ,
      test
      ,
      status
      ,
      templates create
      and
      templates pack
      , and
      unity vcs switch
      ,
      sync
      and
      git worktree
      , no longer report a project as open in the Editor right after you quit that Editor. The check now waits up to a quarter of a second for the Editor's lock to clear, as the Unity Hub does.
    • On Windows 11, plugins and their runtimes installed by the CLI from the MSIX package (the winget install) are now visible to every other CLI install and to the Unity Hub, and they're kept when the package updates or is uninstalled. Before, they were private to the package and a package update could remove them.
    • unity build --args
      with an unclosed quote or a trailing backslash now gives the whole error in your saved language. The last part used to stay in English.
    • unity install-modules --non-interactive --editor-version 6000.4
      and
      unity editors path 6000.4
      now say what is ambiguous when several installed Editors match. With two patches installed, both name the matching versions and ask for the full version.
    • unity plugin install --help
      ,
      unity plugin remove --help
      and
      unity plugin changelog --help
      no longer list a fixed set of plugin IDs that left some out. They point to
      unity plugin list
      , which shows every plugin you can install.
    • Run from inside a Unity project with no Editor open,
      unity command
      ,
      list
      ,
      job
      and
      mcp
      no longer reach the Editor of another project. They fail and name the project, as
      --project-path
      does, so a command can't change the wrong project.
    • unity editors upgrade
      no longer installs Visual Studio Code or Visual Studio on the upgraded Editor. IDEs update themselves, and declining the VS Code license used to stop the whole upgrade.
    • unity watch test
      started in the project folder no longer re-runs the tests over and over. Each run's own
      test-results.affected.xml
      counted as a project change, so the next run started at once.
    • unity skill install
      with no terminal, or with
      --non-interactive
      , still exits 0 when it skips an outdated copy or a skill a plugin already provides. Its
      --format json
      result now carries
      skipped: true
      and a
      skipReason
      , so a script can tell a skip from an install.
    • unity ci init
      run from a directory that was deleted or moved now says it can't read the current directory and asks you to change to one that exists, instead of printing a raw system error.
    • unity command test run --async_tests true
      now shows the message telling you to poll
      test status
      in human and TSV output, instead of
      0/0 passed
      , with the Pipeline package versions that send an empty results list along with it.
    • unity list
      and
      unity command
      list parameter types as
      string
      ,
      integer
      ,
      number
      ,
      boolean
      ,
      array
      or
      object
      instead of .NET type names, and show a nullable parameter as optional.
    • unity projects link cloud
      and
      unity projects unlink cloud
      now warn when an open Editor has the project: it keeps the old cloud link until it restarts, and can write it back to the project. The warning names
      unity close <path>
      .
    • Commands that check whether the Editor has a project open, such as
      unity vcs switch
      ,
      unity run
      ,
      unity open
      and
      unity status
      , no longer hang or run out of memory when a project's
      Temp/UnityLockfile
      or
      Library/EditorInstance.json
      is a named pipe or a link to a device such as
      /dev/zero
      . They skip it, as they do any file that is not a regular file.
    • Commands run from a sandbox that can't inspect other processes no longer make a running Editor unreachable. Such an Editor is still listed, without its process ID.
    • unity status
      no longer reports an Editor as
      ready
      while a modal dialog freezes it, such as the URP Material upgrade prompt in a project made from a 6000.3 template: the row reads
      starting
      (
      STATUS_NOT_READY
      ), or
      unreachable
      once nothing has asked about it for 60 seconds, and
      unity status --until-ready
      keeps waiting. On an Editor that reports its dialogs (Unity 6000.7 or later), the row names the dialog with
      STATUS_BLOCKED_BY_DIALOG
      .
    • On Windows, a command that shares a settings file with another running Unity tool no longer fails with
      Access is denied
      when that tool is releasing its lock at the same moment. The command waits a moment and takes the lock.
    • On Windows,
      unity open
      and
      unity projects open
      now report the Editor's process ID in
      launchedPid
      with
      --format json
      and
      --format ndjson
      . They always reported
      0
      there.
    • unity test --allow-install
      now keeps the test settings from the project's
      UnityCliConfig.json
      and your saved defaults, such as the mode, report format and timeout, after it installs the missing Editor. It used to run the tests without them.
    • unity cloud org current
      now names your default organization when you are signed in, for example
      Acme (1001 / <uuid>)
      , whether Unity Hub, the CLI, or the Unity Editor last wrote it. With
      --format json
      it adds
      organizationName
      ,
      organizationGenesisId
      , and
      organizationUuid
      , and
      --format tsv
      still prints the bare stored value.
    • A sign-in request no longer fails with the connection closed when the auth broker had only just started.
    • unity projects link cloud
      no longer fails with
      ALREADY_LINKED
      when only the project's
      ProjectSettings.asset
      still names a cloud project, for example after an open Editor wrote back a link you removed. The link now goes ahead and records the new project in both the project file and the Hub's project list.
    • On Linux arm64 with
      UNITY_EXPERIMENTAL_FEX_EMU=1
      , the CLI now finds a standard FEX-Emu setup, with its config in
      ~/.config/fex-emu
      and its RootFS in
      ~/.local/share/fex-emu
      , when
      XDG_CONFIG_HOME
      and
      XDG_DATA_HOME
      are not set. It used to look only in
      ~/.fex-emu
      , so
      unity doctor
      reported no RootFS and the x86_64 Editor was started without FEX-Emu and failed.
    • An Editor opened with
      unity open
      on a machine without Unity Hub now gets the full Unity cloud configuration, so Asset Store links such as Open in Browser work instead of reporting that the Unity Connect configuration is invalid. The CLI downloads it once in the background and saves it where Unity Hub keeps it, and never replaces one Unity Hub saved.
    • unity projects info
      now reads a project's Unity Cloud link from the project's own settings file, the one the Editor loads, instead of the Hub registry's record. Before, a registry record that named an organization could outrank the file, so
      info
      reported a link the project no longer had, or mixed the registry's project with the file's name.
    • When the plain
      <version>
      folder for an editor already holds one,
      unity install
      no longer quietly writes a second full copy to a
      <version>-<arch>
      folder beside it. If the editor there is the same version and architecture you asked for, the install stops and names that folder, with a hint to run
      unity editors add
      if
      unity editors
      doesn't list it (
      --force
      still installs).
    • unity auth login --client-id
      now stops at once, with no network call, when the value is an email address.
      --client-id
      and
      --client-secret
      take a service-account key created in the Unity Dashboard, not a Unity ID email and password.
    • On macOS and Windows, when the same Unity version and architecture is installed in more than one folder, such as
      2022.3.62f2
      and
      2022.3.62f2-arm64
      , every command now uses the
      2022.3.62f2
      folder and warns about the other copy, naming both folders. Before, commands silently used the
      -arm64
      folder, so
      unity install-modules
      could add modules to a copy you weren't using.
    • On Windows,
      unity projects create --vcs uvcs
      and
      unity projects link vcs --vcs uvcs
      now check in the whole project when the project's folder path has accented or non-Latin characters, such as
      Câmera
      or
      日本語
      . Before, the first check-in added nothing.
    • When GitLab's search for Unity projects fails and
      unity projects clone
      falls back to listing the repository's files, it now reads at most 100,000 files and folders, so it can't keep asking a server that never stops answering. A project that sits only past that point isn't found.
    • unity vcs git worktree add
      and
      remove
      now put the real paths in
      --format json
      and
      --format ndjson
      output. They used to replace your home folder's account name with
      <user>
      , so a script or agent could not open the worktree it had just made.
    • unity cloud project link
      and
      unlink
      are not commands, because linking lives under
      unity projects
      . The error now says what to run instead,
      unity projects link cloud
      or
      unity projects unlink cloud
      , in the text and in the
      --format json
      message.
    • On Linux,
      unity install
      run with no
      HOME
      set now puts the Editor's desktop entry and icon in your account's home folder. It used to put them in a
      .local/share
      folder inside the folder you ran the command from.
    • Starting several apps at the same moment no longer leaves two auth brokers running, which could make sign-in requests fail.
    • unity editors upgrade
      now looks up newer releases for all your installed version lines at once. When the Unity Releases service doesn't answer, the command reports that after one request timeout (about 100 seconds) instead of one timeout per version line.
    • If
      unity editor add
      registers an editor but then can't read the installed editors back to list its modules, the error now says the editor was added and names the
      unity editor module refresh
      command to run, in your saved language. It used to print an internal note in English.
    • On Windows, a leftover lock from an earlier run is now cleared even when security software blocks the rename normally used to clear it. When folder permissions block it instead, the error now says the lock could not be created, which points you at those permissions.
    • A leftover lock that is a symbolic link, broken or not, no longer makes a command spin at full CPU, wait several minutes or fail. Like any other leftover lock it is held while it is fresh and cleared once it is stale, and its age is read from the link itself, whatever it points at.
    • A lock or write failure that the system gives no name, such as a disk error or a Windows sharing violation, now shows the system's code, such as
      os error 32
      , instead of the word
      Uncategorized
      . This covers
      unity editors install-path --set
      ,
      unity language --set
      , and the reads and writes of
      unity config
      's own store.
    • unity vcs uvcs
      commands and
      unity projects clone
      now recognize a Unity Version Control workspace whose selector names its repository with the short
      rep
      keyword, such as
      rep "Game@acme@cloud"
      . Before, they treated the project as not being in a workspace.
    • On Linux, retrying
      unity install
      after an Editor install ran out of disk space now reinstalls into the same folder, instead of adding a second copy in a folder named
      <version>-x86_64
      or
      <version>-arm64
      . Such a copy now shares its version's menu entry, removing an Editor removes every menu entry that still opened it, and an Editor whose program file is empty gets no menu entry.
    • On Windows,
      unity doctor
      no longer reports one Unity install twice when your
      PATH
      spells it two ways. An entry written with an 8.3 short name, such as
      C:\PROGRA~1\Unity\Hub\Editor
      , is now read as the same folder as
      C:\Program Files\Unity\Hub\Editor
      , and an entry that reaches a folder through a junction is read as the folder it ends at, however that junction's own target is written.
    • When
      unity install
      or
      unity install-modules
      can't download a file, the reason is now in your language: a server error, a lost connection, a timeout or a full disk reads as a translated sentence in the
      --verbose
      summary and in the
      reason
      of
      --format json
      and
      --format ndjson
      failures. The CLI log keeps the English.
    • On Windows,
      unity templates
      now packs with the
      tar.exe
      that ships in Windows' System32 folder even when Windows isn't installed in
      C:\WINDOWS
      , instead of the first
      tar.exe
      on your
      PATH
      , and plugin installs no longer pick a different
      tar.exe
      when
      SystemRoot
      is changed.
    • On Windows,
      unity collab jira server add
      ,
      update
      and
      test
      with
      --key-from-stdin
      now read a key with non-ASCII characters the way your console's input code page encodes it.
    • On Windows, when two registered projects share a name,
      unity projects info
      and
      unity projects size
      now name each one's parent folder in the list of matches.
    • unity test --filter
      no longer crashes on a regular expression it can't evaluate. Such a pattern now matches no tests, like any other pattern that can't be used.
    • A command no longer signs you out when Unity Hub or another
      unity
      command refreshed your sign-in at the same moment. You are signed out only when your sign-in has really expired.
    • unity editors upgrade
      and
      unity install
      no longer offer you an Editor your license doesn't cover, such as an extended LTS build.
      unity install 2021.3
      now picks the newest patch your license covers.
    • unity open
      and
      unity projects open
      no longer start a second Editor on a project that's already open, which used to fail with
      OPEN_EDITOR_EXITED
      . They now report the open project with its Editor version and process id and exit 0;
      --format json
      and
      --format ndjson
      return
      data.alreadyOpen: true
      and
      data.pid
      .
    • unity plugin install
      ,
      unity plugin remove
      and
      unity plugin upgrade
      now include
      errors
      and
      warnings
      in their
      --format json
      and
      --format ndjson
      output, as every other command does, so a script that reads them no longer finds them missing. When
      install
      or
      upgrade
      can't install a plugin, that plugin's row still reports it in
      outcome
      , and
      errors
      stays empty.
    • unity analytics status
      now says the one-ping-per-run telemetry is off when
      UNITY_NO_CLI_INVOKED_TELEMETRY
      is set. It used to always say the ping was on, even with that variable set, which was already stopping the ping itself.
    • unity doctor --ci
      runs its checks again on a machine with no licensing client installed, such as a fresh CI runner, instead of failing with "isn't supported with these options or in this environment". It downloads the licensing client when it needs one.
    • unity open
      ,
      unity projects open
      and
      unity context
      report a Unity Hub or project file they can't read with one clear message, instead of an internal error.
    • unity publish play
      names a build folder it can't read, instead of printing an internal error.
    • unity doctor
      reads a
      cli-log.json
      saved as UTF-16 or UTF-32, and shows a log line it can't parse as written, instead of failing.
    • unity license
      and the floating-license checks of
      unity install
      and
      unity uninstall
      read a
      services-config.json
      that holds an invalid escaped character, instead of failing.
    • unity auth
      commands keep working when a sign-in saved by an older CLI version, or the CLI's saved settings, hold text they can't decode.
    • unity projects upgrade
      asks for confirmation on a terminal before it upgrades a project, and
      unity projects require
      asks before it installs a missing Editor. The upgrade question defaults to no and the install question to yes;
      --yes
      skips either.
    • unity projects link vcs --rollback --delete-remote
      asks before it deletes the remote repository, once the provider says the repository is empty. The answer defaults to no, and a no keeps the repository.
    • unity vcs setup
      asks which provider to use when you don't pass
      --vcs
      , with the one that is ready to use first.
    • unity editors info
      and
      unity editors upgrade
      report a clear error when Unity's release service sends an answer the CLI can't read, instead of an internal error.
    • unity install --resume
      skips a damaged entry in the paused downloads list instead of stopping with an internal error.
    • unity editors add
      and
      unity editor add
      report a clear error when the editor list can't be read or written, or when a relative path is given from a folder that no longer exists.
      unity uninstall
      with no version does the same for a folder that no longer exists.
    • Commands that find an installed Editor keep working when an Editor's
      modules.json
      or
      metadata.hub.json
      , or your saved settings, repeat a key or hold text they cannot decode. The last value of a repeated key wins.
    • unity editors add
      and
      --editor-path
      on macOS reject an Editor whose signature check does not answer within 30 seconds, instead of waiting for it.
    • On macOS and Linux,
      unity uninstall
      ,
      unity editors prune --remove
      and
      unity editors upgrade --replace
      stop before deleting anything when an Editor's folder holds a file marked immutable or append-only (
      chflags uchg
      on macOS,
      chattr +i
      or
      +a
      on Linux). They used to remove everything around that file, fail on it, and leave a half-removed Editor that was still listed.
    • unity doctor --ci
      runs on macOS and Windows, and with
      --format github
      .
      unity doctor
      reports an account database it can't open as a warning row instead of stopping, and
      unity doctor
      and
      unity diagnose accelerator
      report a working directory or a Unity Hub file they can't read with one clear message.
    • unity diagnose proxy
      runs on macOS when a proxy is configured.
    • unity auth login
      reports a sign-in service it can't reach as a failed sign-in, and
      unity collab jira server
      commands with
      --key-from-stdin
      check their other options before reading the key.
    • unity open
      opens a project whose
      ProjectSettings.asset
      it can't fully read, and
      unity pipeline list-versions
      reports a registry it can't reach.
    • unity mcp configure --help
      and the help of the
      unity pipeline automation
      and
      unity pipeline cloud-build
      commands work.
      unity self-update
      and
      unity self-install
      report an extra argument or an invalid option as a usage error.
    • unity projects link vcs --vcs uvcs
      and
      unity vcs setup --vcs uvcs
      on a terminal ask which Unity Version Control region to use the first time an organization uses it, and ask before they create billable resources (the answer defaults to no, and a no leaves nothing created).
      unity projects link cloud
      on a terminal asks whether to link the project that
      UNITY_CLOUD_PROJECT
      or the saved default names, or to create a new one.
    • On Linux and macOS,
      unity uninstall
      ,
      unity editors prune --remove
      and
      unity editors upgrade --replace
      remove an Editor that you can't delete yourself, such as one installed with
      sudo
      . They ask for administrator rights once per Editor, and declining leaves it untouched.
    • With
      UNITY_INSTALL_MISSING_TOOLS
      set to
      1
      ,
      true
      or
      yes
      , a command that needs Git LFS and can't find it installs it through your package manager, then goes on. On Linux that is one administrator prompt for
      apt
      ,
      dnf
      ,
      pacman
      ,
      zypper
      or
      apk
      , which a run that is already root skips.
    • unity collaboration
      commands given a JSON value that repeats a key, such as
      --camera '{"x":1,"x":2}'
      , now name the option and the key instead of printing an internal error.
    • unity projects create
      on a terminal asks whether to link the new project to Unity Cloud, which Editor to use when the installed Editors span more than one release, and which Unity Version Control region to use the first time an organization uses it. The cloud-link, Editor and template questions are not asked in scripts, with
      --quiet
      or with
      --non-interactive
      .
    • unity projects create
      and
      unity projects new
      work again when Unity Hub has a default projects folder saved and no
      --path
      is given (the project goes in that folder), and when the new project's path belongs to a registered project whose folder was deleted (the project is created and its entry updated).
    • unity projects report
      works again: it groups your registered projects by the Editor version each one needs, shows whether that Editor is installed and whether its stream is LTS, lists projects with no readable
      ProjectVersion.txt
      , and counts installed Editors no project needs, in every output format.
    • unity projects verify
      works again: it checks a project for missing or orphaned meta files, duplicate GUIDs, conflict markers and an invalid package manifest without launching the Editor, and exits with a non-zero code when it finds an error. Pass
      --check
      to run only some checks,
      --expect-editor <version>
      to flag an Editor version drift, and
      --strict
      to treat warnings as errors.
    • unity projects clone --vcs github|gitlab
      ,
      unity projects link vcs
      ,
      unity vcs setup
      and
      unity vcs sync
      now work with a repository, namespace or branch whose name has a non-ASCII character, a space or a percent sign, and with a git remote whose address has non-ASCII characters, instead of stopping with an unsupported-state error.
    • unity projects clone
      ,
      unity projects link vcs
      ,
      unity vcs setup
      and
      unity vcs sync
      now pass the proxy the CLI resolved (
      --proxy
      ,
      --proxy-disable
      , the proxy variables, the saved proxy setting, or the system proxy) to git, for the clone, the push, the pull and the Git LFS transfer, instead of stopping with an unsupported-state error when a proxy is configured. A proxy with a user name and password is handed to git through its environment, never on its command line, and is never written to the repository's config.
    • unity vcs sync --verify
      works again: after the pull it checks the project for missing or orphaned meta files, duplicate GUIDs, conflict markers and an invalid package manifest, and reports the error and warning counts.
    • unity vcs
      commands run from a folder that no longer exists now say
      Unable to read the current directory.
      and ask you to change to one that exists, instead of printing a raw system error. Most of them still run when you pass an absolute project path, since that path doesn't depend on the current folder.
    • unity install
      ,
      unity install-modules
      and the installs that
      unity run
      ,
      unity test
      and
      unity projects require
      start work on Windows again. When the install needs administrator rights, Windows asks for permission once, before the download starts.
    • unity modules list
      and
      unity install --list-modules
      work on Windows again, and show whether Visual Studio is installed.
    • unity install 6000.0.11f1
      no longer fails with a checksum mismatch.
    • unity install-modules
      and
      unity editor module add
      no longer fail with a checksum mismatch when Unity corrected a module's release data after the Editor was installed, as for Windows Build Support (Mono) on 6000.5.3f1. When a module doesn't match the checksum saved with the Editor, the CLI checks it against the current release data before giving up.
    • unity projects create --vcs uvcs
      and
      unity projects link vcs
      no longer fail the project's first Unity Version Control check-in when an open Unity Editor puts some of the project's files under version control first. The CLI now adds only the files still waiting to be added and checks the project in, as Unity Hub does.
    • unity docs toc
      and topic lookup in
      unity docs
      work again after docs.unity.com started listing an empty sitemap, instead of failing with
      DOCS_TOC_INVALID
      .
    • unity projects add
      ,
      projects clone
      ,
      projects create --vcs
      and
      projects link vcs
      now record a GitLab project in a subgroup by its whole path, as Unity Hub does:
      gitlab.com/group/sub/game
      is organization
      group
      , repository
      sub/game
      . They used to record repository
      sub
      .
    • unity cloud org list
      ,
      unity cloud project list
      , their
      current
      ,
      clear-default
      and
      set-default
      commands, and
      unity auth status
      now end
      --format ndjson
      output with a
      {"type":"result"}
      frame, including when you are signed out or the request fails, instead of writing nothing or plain text to stdout. The
      list
      commands write their rows first, then that frame with the row count.
    • unity pipeline list-versions --format ndjson
      now ends its rows with one
      {"type":"result"}
      frame whose
      data
      holds the row count, which
      --quiet
      keeps.
    • unity pipeline list
      ,
      unity build --list-profiles
      and
      unity build --list-targets
      now end
      --format ndjson
      with one
      {"type":"result"}
      frame whose
      data
      holds the row count, which
      --quiet
      keeps.
      unity changelog
      and
      unity diagnose accelerator
      answer
      --format ndjson
      with that frame alone, its
      data
      matching
      --format json
      , instead of plain text.
    • unity version
      ,
      unity --version
      ,
      unity language
      ,
      unity analytics
      ,
      unity config proxy
      ,
      unity config accelerator
      and
      unity cache
      now answer
      --format ndjson
      with one
      {"type":"result"}
      frame whose
      data
      matches
      --format json
      , instead of a bare object or plain text.
      unity env
      writes its rows and then that frame with the row count, which
      --quiet
      keeps.
    • unity plugin install
      and
      unity plugin upgrade
      now list each plugin they could not install in the envelope's
      errors
      , with a code such as
      PLUGIN_UNSUPPORTED_PLATFORM
      and the same sentence the terminal shows, instead of failing with an empty
      errors
      .
    • An invalid
      --format
      or
      UNITY_FORMAT
      value now produces the
      INVALID_COMMAND_ARGS
      envelope when the command also asks for JSON (
      --json
      , or a valid
      UNITY_FORMAT
      behind an invalid
      --format
      ), instead of plain text on stderr.
    • unity doctor --tail
      with an invalid value now produces the
      INVALID_COMMAND_ARGS
      envelope under
      --format json
      and
      --format ndjson
      , exiting
      2
      like other invalid option values.
    • unity changelog --format json
      now says why it failed when no release notes are published for the version:
      errors
      carries one entry with the code
      CHANGELOG_NOT_FOUND
      and the same message the other formats print. A download that fails still reports its own code,
      ERR_NETWORK
      or
      COMMAND_FAILED
      , so a script can tell the two apart.
    • An unknown command, subcommand or option is now reported in the language set with
      unity language --set
      , together with the hint lines that follow it. English output is unchanged.
    • unity help <command> --help
      now prints the command's help, as
      unity help <command>
      does, instead of failing with
      unknown command 'help'
      .
    • unity build run
      no longer hangs when the build it would launch is a named pipe: it reports that the path is not a build, as for any file that is not one. A
      Library/UnityCli/last-build.json
      that repeats a key now reads as no previous build, with the hint to run
      unity build
      , instead of an internal error.
    • unity collab
      now checks local files before it sends a request: an upload from a pipe, a device or a file you can't read, or a download or export whose folder doesn't exist or that names a folder, fails at once with a message naming the path, instead of hanging or failing after the request. A Unity Cloud address in your settings that isn't an http or https URL is named in the error too.
    • On Windows, if
      unity editor add
      or
      unity editor module refresh
      registers an Editor through the administrator prompt but then can't save the Editor list, the error now reads in your saved language. The OS reason in parentheses stays as Windows words it.
    • A command group run on its own with
      --json
      , such as
      unity cache --json
      , now prints its subcommands as JSON instead of the help text: the group's name and description and, under
      data.subcommands
      , each subcommand's name, aliases, description and whether it is a group itself.
      --format ndjson
      prints the same as one result line.
    • Command help no longer shows a placeholder default for
      --architecture
      : the
      (default: "unknown")
      note is gone, since leaving the option out uses this computer's architecture.
      unity command --help
      shows
      --timeout
      as
      (default: 30)
      instead of
      (default: "30")
      , and no longer lists the analytics-only
      --caller
      and
      --skill
      options, which still work.
    • A Plastic install or upgrade that verifies the download against Plastic's published checksum file no longer fails when that file is served through a redirect.
    • unity plugin changelog --format json
      and
      unity self-update --changelog --format json
      now say why they failed when no release notes are published:
      errors
      carries one entry with the code
      CHANGELOG_NOT_FOUND
      and the message the other formats print.
      unity self-update --changelog
      also exits 6 in that case instead of 0, in every format.
    • unity mcp
      now says why no Editor tools are listed when it can't find or reach a Unity Editor with the Pipeline package. Your MCP client lists one
      unity-cli-status
      tool whose description gives the reason, and calling it checks again.
    • unity assets inspect
      and
      unity assets import
      given an extra argument, and
      unity pipeline list
      given any argument, now print a usage error and exit 2 instead of failing with an unsupported-state error and exit 1.
    • unity vcs resolve
      and
      unity vcs merge-setup
      on Windows find
      UnityYAMLMerge.exe
      in the Editor's
      Data\Tools
      folder. Before, they looked for a file with no
      .exe
      and always reported the tool as missing.
    • unity vcs merge-setup
      ,
      unity vcs git worktree add
      and
      unity vcs git worktree remove
      now run on Windows. Before, they stopped with a message that the command isn't supported in this environment.
    • unity vcs git worktree add --install-editor
      installs the Editor the new worktree needs, after asking, instead of refusing to run.
      unity run --command <name> --allow-install
      installs a missing Editor before it runs the command.
    • unity projects clone
      and
      unity projects link vcs
      accept a repository URL with an IPv4 host (
      https://10.0.0.5/team/game.git
      ) and a path that holds
      +
      ,
      @
      ,
      ,
      , a
      %20
      -style escape, a query or a fragment. Before, each was refused as unsupported.
    • unity projects clone
      into a folder that holds a project you already registered, such as one whose files you deleted, now clones instead of stopping with "isn't supported with these options or in this environment". When the clone lands exactly on a registered project, its existing entry is updated.
    • unity pipeline install
      and
      unity pipeline upgrade
      now explain a failure they couldn't handle before. Offline, they name the registry host they couldn't reach and how to set a proxy.
    • unity mcp configure
      and
      unity bug mcp
      now explain why they stop when a client config is a symlink, or when the config can't be read or isn't valid JSON, instead of refusing with a generic "isn't supported" error. The message names the path, and nothing is written.
    • A damaged settings file no longer turns usage data off for every run or blocks saving your usage data choice. The CLI keeps a copy of the damaged file and starts a fresh one, and restores the file from the backup an interrupted repair left behind.
    • unity doctor --ci
      runs on Linux arm64 machines that start the licensing client through FEX-Emu, instead of failing with "isn't supported with these options or in this environment". It prints the FEX-Emu notice the other commands print.
    • On Windows,
      unity build
      and
      unity collab
      accept projects and paths on a network share (
      \\server\share\...
      ) or spelled as device paths (
      \\?\C:\...
      ), instead of refusing them.
    • On Windows,
      unity uninstall
      ,
      unity editors prune --remove
      and
      unity editors upgrade --replace
      now name the Editor folder whose files are in use and ask you to close the Unity Editor and any other app using it, instead of reporting that the removal isn't supported. A file that antivirus or indexing software holds for a moment no longer refuses the command.
    • unity install
      and the module commands,
      unity templates list
      and
      unity releases
      now say when your account can't read the Unity Editor install folder, and name that folder, instead of reporting unreadable Hub data or an unsupported state.
    • unity uninstall
      and
      unity editors prune --remove
      now say an Editor can't be safely uninstalled when its folder is a link or a file, and leave it in place, instead of reporting that the removal isn't supported.
    • unity editors
      commands that can't finish because the machine changed mid-run now show the standard translated "isn't supported" message instead of an English-only one.
    • The background update check now refreshes its cache for users behind a proxy, so the "new version available" notice no longer goes stale there.
    • unity doctor
      no longer lists a .NET runtime and NuGet packages among its open-source components, since the CLI ships neither.
    • unity diagnose proxy
      reports that it can't read the proxy settings, instead of crashing, when
      proxy.json
      changes while the command starts.
    • Editor commands run from inside a project reach that project's Multiplayer Play Mode clone when the main Editor is closed, instead of reporting that no Editor is open for the project.
    • A
      unity pipeline automation
      or
      unity pipeline cloud-build
      command run with
      --cloud-org
      and no value now names the option
      --cloud-org <id-or-name>
      in its error, as its help does, since an organization name works there as well as an id.
    • The install script's closing hint on macOS reads
      source ~/.zshrc
      again, instead of
      source \~/.zshrc
      , which failed when pasted into a terminal.
    • The install script's env-file hint now reads
      . "$HOME/.unity/env"
      , which works when pasted. It printed a quoted
      ~
      path, which the shell does not expand.
    • Switching accounts with
      unity auth switch
      while another command is renewing your sign-in no longer saves that sign-in under the account you switched to. If the account is removed or signed out while its sign-in renews, the command now asks you to sign in again.
    • On zsh,
      unity self-install
      now adds the CLI to your PATH in
      .zshenv
      , so
      unity
      is found in non-interactive shells such as the ones coding agents use, not only in a terminal window.
    • New shells no longer print
      no such file or directory: .../.unity/env
      after
      unity self-uninstall
      .
    • unity vcs blame
      ,
      vcs diff
      ,
      vcs explain
      ,
      vcs resolve
      and
      vcs summarize
      given an empty path now say that no path was given and exit with code 2 (error code
      VCS_PATH_EMPTY
      ). They used to report that the command isn't supported with these options.
    • unity vcs setup
      and
      unity projects link vcs
      , when adopting a repository while Unity Hub's
      projects-v1.json
      holds no project list, now say the project list is damaged and how to fix it, instead of a generic error. Nothing in the repository changes.
    • unity projects add
      ,
      remove
      ,
      pin
      and
      unpin
      , when Unity Hub's
      projects-v1.json
      holds no project list, now say the project list is damaged and how to fix it (
      PROJECT_REGISTRY_MALFORMED
      , exit 6), instead of a generic unsupported-state error. Your project list is not changed.
    • unity projects create
      and
      unity projects new
      refresh your sign-in before they start the Editor. Before, an expired session made the Editor's package downloads fail with "You are not signed in", even though
      unity status
      showed you signed in.
    • On Windows,
      unity hub install
      works when the temporary folder path contains a typographic apostrophe, such as a profile named O’Brien.
    • unity templates delete
      no longer removes the whole folder the template's archive sits in. It now deletes the archive, its preview images and, once no other archive in that folder uses it, the template's
      package.json
      , and removes the folder only when it is a per-template folder inside the templates folder that holds nothing else.
    • unity mcp
      no longer returns a screenshot of every display when a capture tool can't reach the Editor, for example while a dialog is open. It now reports that the Editor could not be captured.
    • Inside a project you pinned to an account with
      unity auth default <account>
      , cloud, collaboration, pipeline and version-control commands now act as that account, the one
      unity auth status
      shows, instead of your active account.
    • unity auth logout
      now always clears your session on this machine, and a session refreshed while you sign out no longer comes back afterwards.
    • unity license server list
      no longer passes terminal control sequences in the configured server address through to your terminal.
    • unity self-update
      no longer installs an older version on its own. When the channel's latest version is lower than the one you run, it reports that and changes nothing (exit 1), even with
      --yes
      , piped output or
      --format json
      .
    • unity mcp --tools
      and
      --exclude-tools
      now match a command under every name it answers to, so excluding
      test.run
      or its older flat name hides
      test run
      and refuses a call under any of those names. Write a grouped command with a dot, such as
      test.run
      .
    • A project's
      m_EditorVersion
      is now accepted only when the whole value is a Unity version, and the
      unity install ...
      commands that
      unity open
      ,
      unity doctor ci
      and
      unity editors verify
      suggest now quote the version.
    • The anonymous usage ping the first-run analytics prompt describes now actually sends: one event per run with the CLI version, the kind of caller, whether it looks like CI, whether it ran interactively, and the project's Unity version. It carries no account, device or project identity, and no IP address.
    • A
      unity
      plugin now gets the account the CLI is signed in to, instead of the account the Unity Hub app last signed in to. With two Unity IDs on one machine, a plugin's calls could go out as the other account and be refused for a missing seat.
    • On macOS, hosts on the system proxy bypass list ("Bypass proxy settings for these Hosts & Domains" and "Exclude simple hostnames") now connect directly when a manual proxy is set, instead of going through the proxy.
  • Deprecated
    • Old option spellings the CLI still accepts now print a warning naming the one to use:
      status --project
      (use
      --project-path
      ),
      install --list-components
      (
      --list-modules
      ),
      --childModules
      ,
      --no-childModules
      and
      --install-dir
      on
      install
      and
      install-modules
      (
      --child-modules
      ,
      --no-child-modules
      ,
      --download-directory
      ),
      --template-version
      ,
      --hub-version
      and
      --package-version
      (
      --version
      ), and
      -a
      on
      projects list
      and
      projects size
      (
      --all
      ). In
      --format json
      the warning is in the envelope's
      warnings
      .
    • --organization-id
      and
      --project-id
      on
      unity collaboration
      still work, and print a warning naming
      --cloud-org
      or
      --cloud-project
      . In
      --format json
      the warning is in the envelope's
      warnings
      .
    • --since
      on
      vcs git migrate-lfs
      and
      releases
      still works, and prints a warning naming
      --after
      or
      --from-year
      . In
      --format json
      the warning is in the envelope's
      warnings
      .
    • --verbose
      on
      editors
      and
      projects list
      still shows every column, and also prints the full error details on a failure as on every command. It now warns that
      --long
      is the spelling for the columns.
    • The
      modules
      string in the
      --json
      and
      --format ndjson
      rows of
      unity editors
      is deprecated and will be removed in a later beta. Read
      moduleNames
      instead, since a module name can contain a comma.
    • The
      project
      and
      version
      keys in the
      --json
      and
      --format ndjson
      rows of
      unity status
      , and the
      unityVersion
      key in those of
      unity editors running
      , are deprecated and will be removed in a later beta. Read
      projectPath
      and
      editorVersion
      instead.

October 07, 2026

1.0.0-beta.13

  • Security
    • unity install
      with
      --changeset
      , and
      unity editors add
      and
      unity editor module refresh
      when they read an Editor's build from the download server, now refuse a changeset that is not letters and digits, and a manifest file name from the server that is not a plain file name. Both went into the download address unchecked, so a value with
      /
      ,
      ?
      or
      ..
      could point the request somewhere else.
    • A development-only setting that relaxes the peer code-signature check no longer weakens your real sign-in: a broker started that way runs as a separate dev broker with its own address and its own sign-in, never reads yours, and on macOS and Windows refuses Unity-signed applications. It is meant only for apps you build yourself, which sign in from the app that uses it, since
      unity auth login
      signs in your normal sign-in.
    • The CLI now checks that the sign-in service it talks to is genuine Unity software and that it checks the apps that connect to it. If the check fails, commands that need your sign-in stop with an error, and
      unity build
      ,
      unity run
      ,
      unity test
      and
      unity open
      start the Editor signed out with a warning; run with
      UNITY_NO_AUTH_BROKER=1
      to read your saved sign-in directly.
    • When
      unity projects create
      ,
      unity projects link vcs
      or
      unity vcs setup
      looks up your GitLab groups for
      --git-namespace
      , it now follows further pages of results only on GitLab itself, so your token isn't sent to another host. The lookup also stops after 100 pages of groups.
    • When
      unity auth login
      sends your service account credentials or finishes a browser sign-in and the server redirects the request to another host, the CLI no longer follows the redirect. It stops and reports the request as failed, so your credentials and the sign-in request body are not sent on to that host.
    • unity build
      ,
      unity run
      and
      unity test
      no longer print your Unity access token. The Editor writes its full command line into its log, including the
      -accessToken
      value the CLI passes it, and the CLI streamed that log to your terminal or CI output.
    • On Linux, verifying a connecting peer's identity (for the auth broker's enforced peer-allowlist mode, and for the hardened tier's consent cache) now confirms the peer process is still alive before trusting what was read about it. On a shared Linux host, a narrow race let another local process grab a just-exited peer's process id before the identity check finished reading it, which could make that unrelated process pass the check instead of the one that actually connected.
    • When
      unity projects clone
      ,
      unity projects create
      ,
      unity projects link vcs
      or
      unity vcs setup
      calls GitLab with your token and GitLab redirects the request to another host, the CLI no longer sends the token on to that host.
    • A repository URL whose password contains
      @
      no longer shows part of that password. When
      unity projects clone
      ,
      unity projects link vcs
      ,
      unity vcs setup
      or a git error printed such a URL, it removed only the text up to the first
      @
      , so the rest of the password stayed visible.
    • Before installation,
      unity install
      and
      unity install-modules
      check whether they can write to the destination folder by creating and removing a test file there. That file now has an unpredictable name and is never created through a link someone else placed in the folder, and a file that was already there is left alone.
    • A quoted credential value in the Editor's log is now masked in full. A line such as
      -password "two words"
      used to show as
      -password "*** words"
      , printing everything after the first space.
    • On Linux, the auth broker's check for a debugger or tracer attached to a connecting process can no longer be misled by that process's name.
  • Added
    • unity mcp
      now reads
      UNITY_PROJECT_PATH
      when you don't pass
      --project-path
      , as
      unity command
      ,
      list
      ,
      job
      , and
      status
      already do. Set it once per worktree or agent session and the MCP server talks to that project's Editor, not whichever Editor the client's working directory happens to sit in.
    • unity setup codex
      and
      unity setup grok
      install Unity's agent plugin, with its Unity skills, into Codex and Grok Build in one step, as
      unity setup claude
      does for Claude Code. Each runs the agent's own plugin commands for you and reports the plugin's version and where its skills are.
  • Changed
    • On a Mac with Apple silicon running macOS 28 or later,
      unity releases
      no longer lists Intel (x86_64) Editor builds, which can't run without Rosetta 2. Earlier macOS versions still list both, as
      unity install
      and
      unity editors upgrade
      already did.
    • unity projects upgrade
      into Unity 6.7 or later now needs a Unity Cloud choice when the project isn't linked:
      --cloud
      links it to a new Unity Cloud project,
      --cloud-project <id-or-name>
      links an existing one, and
      --no-cloud
      upgrades without linking. Without one, the upgrade stops before it installs or opens anything.
    • unity open
      and
      unity projects open
      no longer move a project onto Unity 6.7 or later. If the Editor you pick, with
      --editor-version
      , with
      --editor-path
      or at the missing-Editor prompt, is 6.7 or later and the project was saved with an older version, the command stops with
      PROJECT_UPGRADE_REQUIRED
      before installing or launching anything.
  • Fixed
    • unity config set proxyRequestLogging true
      now works. The setting was already read by
      --log-proxy
      's persisted tier, but
      unity config
      had no way to actually set it, so
      config set proxyRequestLogging true
      failed with an unknown-key error.
    • unity serve
      's session no longer exits with an error when the host writes a line that parses as JSON but isn't a request object (an array, a bare number,
      null
      , or a
      method
      that isn't a string). That line is now dropped silently instead of crashing the whole session.
    • unity serve
      now answers a request line that contains an escaped unpaired surrogate, such as
      \uD800
      , with a parse error. Before, such a line could go unanswered, or end the whole session with an error.
    • On Windows, a console Ctrl-C during a
      unity license
      command that had just started the Unity Licensing Client no longer also stops the client. The client is a user-level service that is supposed to outlive the CLI; it now leads its own process group, so it is excluded from the console's Ctrl-C delivery, matching the behavior already in place on macOS and Linux.
    • unity projects create
      and
      unity pipeline install
      now show two messages in your language instead of English: the one saying the Unity registry lists no published version of the Pipeline package, and the one saying Unity Cloud returned no project when a cloud project was created.
    • unity status
      now tells you when a dialog open in the Unity Editor is blocking it, such as a save prompt. The Editor still reads
      starting
      , with a line naming the dialog, and the error is
      STATUS_BLOCKED_BY_DIALOG
      instead of
      STATUS_NOT_READY
      ;
      --format json
      adds a
      blockedBy
      field with the dialog's level and title.
    • A project whose build settings file in
      Library/
      is malformed in a deeply nested way no longer crashes the
      unity projects
      commands that read it. The file is treated like any other unreadable build settings file: the project keeps the build target it last had, or shows none if it never had one.
    • On macOS,
      unity templates create
      no longer adds hidden
      ._*
      entries to the template archive for files that carry extended attributes, such as downloaded or Finder-tagged files. Archives created on macOS now match the ones created on Windows and Linux.
    • unity templates
      commands and
      unity projects create --template
      no longer hang when a named pipe or a device sits where a template file is expected, such as a template archive, a
      package.json
      in your templates folder or
      --output
      for
      unity templates pack
      . Such a file is now treated as unreadable, and
      unity templates pack --output <pipe> --overwrite
      fails with "Operation not permitted".
    • When the CLI can't save your sign-in because it can't write to its credential folder, the warning it records in
      cli-log.json
      is now filed under
      SealedCredentialStore
      rather than
      AuthBroker
      , and a folder the CLI isn't allowed to write to is named
      UnauthorizedAccessException
      rather than
      IOException
      . Only the log line changes; signing in behaves as before.
    • unity mcp
      screenshots (
      capture_game_view
      and
      capture_scene_view
      ) no longer try to close a display library that failed to load. On a machine where the display library can't be loaded, such as Linux without
      libX11
      , the capture now just reports that it couldn't load it.
    • unity command run_tests --async_tests true
      no longer shows a misleading "0/0 passed" in TSV and other table output the instant an async PlayMode or EditMode run starts. It now shows the server's own message telling you to poll
      test_status
      for the real result.
    • When
      unity projects link vcs
      refuses a URL combined with repository or cloud options, the error now names
      --coppa
      too. In languages other than English it also names
      --git-description
      , which the translated message left out.
    • On Windows, the CLI now installs the licensing client from Git Bash too. With Git for Windows on
      PATH
      ,
      unity license
      and the other commands that download the licensing client failed with
      tar: Cannot connect to C: resolve failed
      and left it uninstalled.
    • unity cloud org create
      works again: it failed with a 404 for every request. It now asks for the same company profile as the Unity Dashboard, which replaced the industry field: pass
      --first-name
      and
      --last-name
      for an individual or
      --company-name
      for a company, plus
      --country
      , and
      --region
      for organizations in the US, Canada, and Mexico.
    • unity auth logout
      now accepts
      -y
      and
      --yes
      , which its help has always listed. Signing out never asks for confirmation, so the flag changes nothing; it no longer fails as an unknown option.
    • When
      unity install
      or
      unity install-modules
      fails with
      --format json
      , the output now lists which modules failed and why in
      data.failedUids
      and
      data.failures
      , as
      --format ndjson
      already did. Before,
      data
      was
      null
      and the only error said how many items failed.
    • The warning you get when only one of
      UNITY_SERVICE_ACCOUNT_ID
      and
      UNITY_SERVICE_ACCOUNT_SECRET
      is set now appears in your CLI language. It used to print in English in every language, saying that service-account sign-in won't activate and which variable to set or unset.
    • unity editors module remove
      now shows its refusals in your display language. They used to print in English regardless of your selected language.
    • A corrupt template archive whose header claims gigabytes of data no longer crashes
      unity templates list
      and the other commands that read your templates, or makes them set that much memory aside first. The archive is skipped like any other unreadable one.
    • unity editors module
      (also
      unity editor module
      ) now says what to pass when several installed Editors match your version: the full version when they are different patches, or
      --architecture
      when one version is installed for several architectures. It used to say "No editor found", including when
      --architecture
      still left several patches.
    • unity editors module
      now honors
      -a
      and
      --architecture
      , as
      unity editor module
      does. It used to ignore the value, so a version installed for several architectures could not be chosen there.
    • unity editors install-path --set
      now says another program is using the setting, and that the install path was not changed, when a leftover lock from an earlier run could not be cleared. It used to say the lock file could not be created and send you to check folder permissions.
    • unity install-modules --non-interactive
      now tells you what to pass when several installed Editors match your
      --editor-version
      : the full version when they are different patches, or
      --architecture
      when one version is installed for several architectures. A version that exactly matches an installed Editor now wins over a longer one that contains it, such as
      6000.3.0a1
      beside
      6000.3.0a12
      .
    • unity uninstall
      ,
      unity editors verify
      and
      unity editors path
      now pick the installed Editor whose version exactly matches the version you pass, so
      6000.3.0a1
      selects that Editor instead of being ambiguous with
      6000.3.0a12
      . A partial version still matches every installed Editor that contains it, and
      --architecture
      now picks only among the exact version's installs, so it no longer swaps in
      6000.3.0a12
      .
    • unity open
      and
      unity projects open
      now say what to pass, in your display language, when they install an Editor for you and then find several installed Editors that match. That is the full version when they are different patches, or
      --architecture
      when one version is installed for several architectures.
    • In every language except English,
      unity self-update
      on Windows no longer tells you to close other running
      unity
      processes after it stages an update or a rollback. A failed binary replacement in
      unity self-install
      now suggests checking for software that holds the file open, such as antivirus.
    • On Windows, the cross-process install lock of an install that has exited no longer holds up
      unity install
      ,
      unity install-modules
      or
      unity projects require
      while another program still has that process open. Once the lock goes stale, the CLI takes it over instead of waiting, or instead of exiting
      9
      with
      INSTALL_LOCK_BUSY
      under
      --no-wait
      .
    • unity open
      and
      unity projects open
      now say what to pass when several installed Editors match and nothing can ask you, such as under
      --non-interactive
      : the full version for different patches, or
      --architecture
      for one version installed for several architectures. They used to name
      --architecture
      every time, which can't separate two patches of one architecture.
    • unity open
      and
      unity projects open
      now use
      -a
      and
      --architecture
      to choose between the installs that a partial
      --editor-version
      matches. With
      6000.0.32f1
      installed for both arm64 and x86_64,
      unity open --editor-version 6000.0 -a arm64
      opens the arm64 Editor.
    • unity projects create
      and
      unity projects new
      now use
      -a
      and
      --architecture
      to choose between the installs that a partial
      --editor-version
      matches. With
      6000.0.32f1
      installed for both arm64 and x86_64,
      unity projects new MyGame --editor-version 6000.0 -a arm64
      creates the project with the arm64 Editor.
    • If two installs of one Editor version have architectures the CLI can't read, the error from the commands that pick an Editor, such as
      unity run
      ,
      unity build
      and
      unity install-modules
      , now points to
      unity editors list --installed --verbose
      to find the incomplete install. It used to suggest
      unity editors verify
      , which refused both installs.
    • On macOS and Linux,
      unity uninstall
      now asks for your administrator password when the Editor sits in a folder you can't write to, such as
      /opt
      or
      /Applications
      , instead of failing with "The Editor … could not be uninstalled." If the removal still fails, the error code is now
      UNINSTALL_FAILED
      .
    • unity uninstall
      ,
      unity editors prune --remove
      and
      unity editors upgrade --replace
      now say in your CLI language that an Editor could not be uninstalled, when the removal fails for a reason the CLI can't name. The message printed in English regardless of your selected language.
    • unity projects import
      now shows its warning for an entry with no usable path, and its error for more than 50 MB on stdin, in your display language. Both printed in English regardless of your selected language.
    • unity projects import
      now stops reading piped input as soon as it passes the 50 MB limit and fails with the same error. It used to read the whole stream into memory before checking the size, so a very large or endless pipe could use up memory or never finish.
    • Commands that change your project list, such as
      unity projects add
      ,
      pin
      and
      import
      , no longer fail, or save the change where Unity Hub doesn't look, when Unity Hub or another
      unity
      command is creating that list at the same moment. This could happen on a new installation when both start together on a busy machine.
    • If git refuses a
      unity vcs sync
      pull, the error no longer lists git's download progress (
      Counting objects
      ,
      Receiving objects
      ), so git's explanation (the diverged branch, the conflicted files, or the untracked file in the way) is easier to find.
    • If the CLI ends a git command that made no progress, the error now names the command, such as
      git clone
      ,
      git pull
      or
      git push
      . It used to name the first setting the CLI passes to git, such as the proxy address or the credential helper config, so a stalled
      unity projects clone
      or
      unity vcs sync
      pointed at the wrong thing.
    • unity config proxy <url>
      and
      unity config proxy --unset
      now protect the shared proxy settings file the way the other shared files already were. When the file can't be read or lists the same name twice, the change is refused with the same error the other settings files give, and the file stays as it was.
    • unity templates delete
      and
      unity templates edit
      now print their "Path doesn't exist" error in your display language, and its grammar is fixed (previously it read "doesn't exists"). It appears only if the templates folder disappears while the command runs.
    • unity cache clean
      now explains in your CLI language why it refuses to clean a cache folder that is a symbolic link. The message printed in English regardless of your selected language.
    • unity command
      ,
      unity list
      and the other commands that connect to a running Editor now tell you in your CLI language when no Editor is available to them, and when a
      --project-path
      isn't a Unity project. These errors printed in English regardless of your selected language.
    • unity status --project-path
      no longer matches a sibling project whose path starts with the one you named, so
      unity status --until-ready --project-path /x/MyGame
      no longer ends on an Editor open on
      /x/MyGame-lighting
      . A value that is an existing directory now matches that project only, so a parent folder no longer matches the projects inside it (run
      unity status
      without the flag to list them all).
    • On Windows, sign-in now refuses to talk to the shared authentication process's communication channel if it's owned by a different local account than yours. On a shared or multi-user Windows machine, this closes a narrow window where another account could stand up a channel under the same name before yours starts and have the CLI unknowingly connect to it; your own sign-in session is never affected.
    • unity pipeline install
      and
      unity pipeline upgrade
      now show their two target errors in your CLI language: a
      --project-path
      that isn't a Unity project, and a run from a folder that isn't one when no Editor is open. Both printed in English regardless of your selected language.
    • unity build --format json
      now writes exactly one JSON document to stdout, so you can parse it whole. The progress lines and the streamed Editor log used to come first; they now go to stderr.
    • unity install-modules --force
      no longer hangs on Windows for the full install timeout when reinstalling over an already-installed module. A stuck antivirus file scan could make the reinstall wait retry itself forever; it's now bounded and retried automatically instead.
    • unity build
      now shows its
      --args
      errors in your CLI language: a forwarded flag that the command already sets itself, such as
      -projectPath
      , and a quote that is never closed. Both printed in English regardless of your selected language.
    • On macOS,
      unity
      no longer crashes partway through a command when a program that handles signals itself, such as
      gh
      or another tool written in Go, starts it. Commands that read a lot of data were affected, such as
      unity vcs diff
      on a large scene, and so was the auth broker the CLI starts in the background.
    • On macOS, the Unity Licensing Client that
      unity
      starts no longer crashes when another program sends it a
      SIGUSR1
      signal. The CLI no longer passes a leftover signal setting to the programs it starts.
    • Help for some options no longer shows their default twice.
      unity releases --help
      , for example, listed
      --limit
      with
      (default: 20) (default: 20)
      , and
      unity build
      ,
      unity command
      ,
      unity doctor
      and
      unity logs
      repeated a default the same way.
    • unity mcp configure
      now writes a project-local config when you run it from a drive or filesystem root, such as
      C:\
      or
      /
      . It used to refuse the write.
    • On Windows, the warning that an update didn't finish installing now appears in your CLI language, the one you set with
      unity language
      , instead of always in English. It stays in English when no language is saved.

September 30, 2026

1.0.0-beta.12

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

September 22, 2026

1.0.0-beta.11

  • Security
    • unity bug
      now redacts the log files it collects before uploading them, masking home-directory paths, user names, tokens, and email addresses. Files you add with
      --attachments
      are uploaded as-is.
    • On Linux, extracting a
      .pkg
      module no longer writes through an existing symlink, so an archive can't place files outside the install folder.
    • 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
    • unity recompile
      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 docs <topic>
      opens the Unity documentation for a class or topic, matched to your project's Unity version. Use
      --manual
      for the Manual instead of the Scripting API,
      --search
      for search results,
      --url
      to print the address, or
      --editor-version
      to choose a version.
    • unity assets import <file.unitypackage>
      imports a
      .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.
    • unity assets export <asset-path...> --output <file.unitypackage>
      exports assets and folders to a
      .unitypackage
      . Dependencies are included unless you pass
      --no-dependencies
      .
    • unity cloud org create <name>
      creates a Unity Cloud organization. Pass
      --industry
      or pick one when prompted, and add
      --set-default
      to switch to the new organization.
    • unity pipeline cloud-build
      and
      unity pipeline automation
      list 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 mcp configure --server issue-tracker
      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 run --log-file <path>
      writes the Editor log to a file, including with
      --command
      , and streams it to the console like
      unity build
      . Add
      --no-tail
      to write the file only.
    • unity editors prune
      now reports registered editors whose install folder is gone, and
      --remove-missing
      removes them from your editor list.
    • install.sh
      and
      install.ps1
      now install the latest beta when you don't choose a release channel, until the CLI has a stable release.
  • 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 as
      build_status
      for
      build
      ,
      unity job wait
      now 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 build run
      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.
    • Usage errors, such as an unknown option or a missing value, now follow
      --format json
      and
      --format ndjson
      and return the standard result envelope with the
      INVALID_COMMAND_ARGS
      code. The exit code is still 2.
    • unity open
      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.
    • On Windows, when
      unity uninstall
      can'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
      UNINSTALL_REMOVAL_FAILED
      error code, and read-only files no longer block removal.
    • On Windows,
      unity self-update
      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.
    • Running
      install.ps1
      through
      irm <url> | iex
      no longer closes your PowerShell window when the install fails.
    • install.sh
      now works on machines without
      jq
      , 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.
    • 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
      http=proxy1:8080;https=proxy2:8443
      , each request now uses the proxy for its own scheme.
    • unity pipeline install
      and
      unity pipeline upgrade
      no longer crash when
      Packages/manifest.json
      lists
      com.unity.pipeline
      more than once.
    • unity projects
      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.
    • cli-log.json
      no longer gets corrupted lines when two
      unity
      commands write to it at the same time.
    • unity templates list
      now lists custom templates in the same order as Unity Hub.
    • unity status
      and the Pipeline connection error now recognize an OpenAI Codex sandbox on Windows, as they already did on macOS.

September 14, 2026

1.0.0-beta.10

Security and privacy
  • unity mcp configure
    no longer follows a symlinked path component when it writes a client's config file. A
    --local
    write, 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.
  • 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
    cm
    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.
  • On Linux,
    .deb
    and
    .rpm
    installs 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.
  • unity mcp configure <client> --dry-run
    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 codex
    no longer risks corrupting
    config.toml
    when 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.
  • unity mcp configure codex
    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.
  • 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
    tpm2-tools
    on Linux. When no hardware-backed key is available, it falls back to the same in-memory key as before.
  • unity projects link vcs
    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
    credential.helper
    can no longer substitute its own credential.
  • 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
    systemd-creds
    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
    unity doctor
    reports the active tier.
  • The auth broker now protects itself against memory dumps as soon as it starts. It refuses
    ptrace
    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.
  • unity auth consumers
    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 revoke
    still only affects the revocation list; it does not yet stop that application from receiving a new token.
  • 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
    UNITY_NO_AUTH_BROKER
    to restore the previous direct-keyring behavior.
  • 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
  • unity self-update
    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-update
    instead 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.
AI and Editor integration
  • A mistyped command or flag now points you to
    unity skill show
    for a task-oriented CLI guide when no "Did you mean" suggestion appears. This applies to top-level commands and mistyped subcommands.
  • unity skill install
    now also installs agent skills shipped with an installed plugin, alongside the CLI's own skill.
    unity skill refresh
    re-renders them from the plugin's current copy.
    unity plugin install
    and
    unity plugin upgrade
    point you to
    unity skill install
    when the installed copy ships with a skill.
  • unity command <name>
    and
    unity run --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 command <name> --result-only
    prints only the Editor's own result value, without the CLI's
    command
    ,
    parameters
    ,
    target
    ,
    success
    ,
    errors
    , and
    warnings
    envelope fields. The option implies JSON output on its own and cannot be combined with
    --detach
    .
  • The
    capture_game_view
    and
    capture_scene_view
    tools in
    unity mcp
    now 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.
Automation and CI
  • unity commands --format json
    emits a machine-readable manifest of every command, subcommand, argument, and option. This lets agents and tooling discover the CLI surface without parsing
    --help
    .
    unity commands
    alone prints a compact grouped listing.
  • unity watch test
    re-runs
    unity test --affected
    every time a project file changes. A debounce combines a burst of changes into a single run.
    Library/
    ,
    Temp/
    ,
    Logs/
    ,
    Build/
    , and
    obj/
    are ignored by default. Use
    --ignore <pattern>
    to add more patterns. The command refuses to start under
    --non-interactive
    or in a detected CI environment.
  • A committed
    ProjectSettings/UnityCliConfig.json
    now declares
    unity build
    and
    unity test
    defaults 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 config resolve <key> [project]
    prints the resolved value and the layer that supplied it: flag, environment variable, this file, global config, or the CLI default.
Build automation
  • unity build --create-profile <target>
    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
    --profile
    .
  • Unity Accelerator support is now available.
    unity config accelerator <host:port>
    persists an endpoint. A bare host defaults to port
    10080
    .
    unity run
    ,
    unity test
    , and
    unity build
    inject the cache-server flags automatically.
    --accelerator <host:port>
    and
    --no-accelerator
    override or suppress the setting for an individual invocation.
    UNITY_ACCELERATOR
    takes precedence over the persisted setting but is overridden by the command-line flags.
    unity diagnose accelerator
    reports the resolved endpoint and whether it responds.
    unity doctor
    and
    unity doctor --ci
    now include a non-blocking Accelerator check.
  • unity build --list-targets
    lists every valid
    --target
    value and exits. It identifies each target as zero-code or as requiring
    --execute-method
    or a Build Profile through
    --profile
    . It supports
    --format human
    ,
    --format tsv
    ,
    --format json
    , and
    --format ndjson
    .
  • unity build --list-profiles
    lists a project's Build Profile assets and exits. Use it to discover platforms such as Meta Quest that build only through
    --profile
    .
    BUILD_INVALID_TARGET
    now directs you to
    --profile
    when you specify a target outside the classic catalog.
  • unity build run
    launches the project's most recent recorded build without rebuilding. A successful
    unity build
    with a known output path now records the path, target, architecture, and Editor version. An
    --execute-method
    build without
    --output-path
    records nothing and keeps the previous record, so launch it with
    --path <path>
    instead. A desktop player launches natively. A WebGL build is served from a local, loopback-only HTTP server and opens in your default browser.
CLI behavior
  • unity command
    and
    unity cmd
    now render
    recompile
    ,
    recompile_status
    ,
    test_status
    , and
    run_tests
    results as short, readable text in the default Result column instead of a compact JSON blob. Other Result cells and
    --format json
    ,
    --format ndjson
    , and
    --format human
    output remain unchanged.
  • unity command --project-path <path>
    now starts faster by skipping work it does not need for that invocation, such as display-language detection.
Project management
  • unity context
    saves and applies named bundles of your account, default organization, default cloud project, default Editor, and install path.
    unity context save <name>
    records the current set,
    unity context use <name>
    applies one, and
    unity context list
    and
    unity context current
    show 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 open --wait
    , as well as
    unity projects open --wait
    and
    unity projects upgrade --wait
    , blocks until the launched Editor exits and reports its actual outcome. It exits with
    6
    on failure or
    0
    on a clean exit. This option is currently available only on macOS and Linux. Windows refuses it with exit code
    2
    instead of silently falling back to the previous bounded watch.
  • unity open
    ,
    unity projects open
    , and
    unity projects upgrade
    now report when the launched Editor was killed by a signal instead of reporting success, both during the ordinary bounded watch and with
    --wait
    .
  • unity assets inspect <file.unitypackage>
    lists the contents of a
    .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.
Source control
  • unity vcs blame <scene|prefab>
    reports who last changed each GameObject and component in a Unity asset, along with the commit, author, and date. Use
    --object <name>
    to narrow the result to one object,
    --field <name>
    to narrow it to one serialized field,
    --at <ref>
    to blame as of another revision, and
    --max-revisions <n>
    to limit how far back the command searches.
Licensing
  • unity license status
    now reports
    floatingServer
    , the licensing server configured for the machine, and
    machineId
    , 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 in
    --format json
    and
    --format ndjson
    output, and in human-readable and
    tsv
    output only when a floating server is configured.
Issues fixed
  • On Windows on Arm,
    unity
    no longer misreports a working Git installation as missing or broken.
    unity doctor
    and
    unity vcs providers
    are fixed by the same change.
  • 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.
    unity projects close
    now confirms the exit over the same channel instead of signaling a process ID that could belong to another process.
    unity status
    now identifies the WSL networking setting to change when the port does not respond.
  • A running Editor whose project layout hides the Unity Pipeline package, such as a Multiplayer Play Mode virtual player's partial clone or a
    Packages
    folder reached through a symlink or permissions issue, is no longer reported as unreachable or missing by
    unity status
    or
    unity pipeline list
    .
  • Concurrent writes to the shared
    user-settings.json
    no longer drop each other's changes. Settings writes now take a short cross-process lock on the file.
  • 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
    ,
    unity job
    , and
    unity list
    , 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.
  • 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
    ,
    unity status
    , and
    unity job
    , no longer resolve the OS proxy configuration up front. They resolve it only when a command first needs it.
  • unity status
    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 templates pack
    and
    unity templates create
    on Windows now also check for a Windows byte-range lock on a project's
    Library
    cache before copying it, alongside the existing Linux protection.
  • unity self-update
    and
    unity self-install
    on 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 close
    and
    unity projects close
    now also check with the daemon immediately after closing an Editor instead of waiting through its full idle window.
  • unity mcp
    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 doctor
    '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.
  • 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.
  • unity install
    no longer fails with an
    INSTALL_FAILED
    database 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.
  • 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
    .
  • unity status
    no longer reports a Unity Editor as
    ready
    while it is still starting. It now probes the Editor's main thread directly and reports
    starting
    instead in human-readable,
    --format json
    ,
    --format ndjson
    , and
    --format tsv
    output, with a matching exit code.
  • unity test
    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
    --filter
    ,
    --shard
    ,
    --rerun-failed
    , or
    --affected
    , from a genuine problem and always fails the run instead of risking a false pass.
  • unity bug --share-project
    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.
  • 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
    ,
    reply
    , and
    resolve
    now 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.
  • 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
    ,
    unity projects link vcs
    , and other commands.
  • unity install
    ,
    unity install-modules
    , and
    unity editor module add
    no 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 command --caller plugin
    no longer misreports Unity's own third-party-agent plugin as
    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.
  • unity mcp configure codex
    now also relaxes Codex's sandbox network policy, not only the MCP server entry. This allows
    unity mcp
    and direct
    unity command
    calls from Codex's shell tool to reach the Editor through localhost.
  • unity status
    ,
    unity editors running
    , and
    unity command
    no 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.
  • On Windows,
    unity self-install
    and
    unity self-update
    no 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.
  • 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.
  • unity install <version> -a x86_64
    no longer reports "No editor version matched" on an Apple Silicon Mac that supports Rosetta 2. The install catalog now offers
    x86_64
    on Apple Silicon through macOS 27.
  • unity plugin install
    ,
    unity plugin upgrade
    , and
    unity plugin remove
    no 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 projects link vcs
    and
    unity projects create --vcs …
    now 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 status
    no longer sends a crash report or suggests running
    unity bug
    when every discovered Unity Editor instance is unreachable.
  • unity license activate
    now points you to
    unity doctor
    when 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.
  • Commands that automatically discover an Editor without
    --project-path
    , including
    unity command
    and
    unity run --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 that
    --project-path
    already reports.
  • On Windows, the CLI no longer crashes with
    Decoder ran into invalid data
    when an HTTP response is corrupt or its embedded translation bundle cannot be decoded. Both cases now use the CLI's normal error handling.
  • unity open
    ,
    unity projects open
    , and
    unity projects upgrade
    no 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 install --resume
    can now recover an interrupted module download, such as an SDK component, in addition to an interrupted Editor installer.
  • unity self-install
    on Windows can now target a directory other than
    %LOCALAPPDATA%\Unity
    by setting
    UNITY_CLI_HOME
    , matching macOS and Linux.
    install.ps1
    honors the same variable.
  • The long-lived Editor identity daemon started by
    unity open
    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.
  • 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
    unity doctor
    instead of the generic sign-in prompt.
  • 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.
  • unity projects list
    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.
  • The Linux
    .deb
    and
    .rpm
    packages now install the hardened auth-broker tier's assets: the
    unity-auth-broker
    systemd units, the
    unity-broker
    system account, and the polkit consent policy. These assets existed in the package for months but were not referenced.
  • unity command <name> --format json
    no longer prints two separate
    success
    fields. The envelope now contains exactly one
    success
    field, derived from the same check the CLI uses to determine whether the command fails.
  • unity vcs setup
    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.
  • Git-owned files that the CLI rewrites directly, including
    .git/config
    ,
    .git/packed-refs
    , and
    .git/HEAD
    during
    unity projects link vcs
    and
    unlink vcs
    , no longer race with a concurrent
    git fetch
    ,
    git gc
    , or another CLI invocation that accesses the same file. Each write now takes the file's own lock and commits through an atomic rename.
  • unity install
    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-modules
    , controlled by
    UNITY_INSTALL_RETRIES
    .
  • unity mcp configure continue
    no longer writes an entry to
    ~/.continue/config.json
    , which Continue no longer reads. It now prints setup instructions for
    ~/.continue/config.yaml
    instead.

September 08, 2026

1.0.0-beta.9

  • Installs and updates
    • unity install
      and
      unity install-modules
      now use
      --child-modules
      /
      --no-child-modules
      , which matches
      unity editor module add
      . The previous camelCase options (
      --childModules
      /
      --no-childModules
      ) and the
      --cm
      /
      --no-cm
      shorthand continue to work.
    • unity install --list-components
      is now
      unity install --list-modules
      , which matches the
      -m
      /
      --module
      terminology. The previous name remains available as a hidden alias.
    • unity modules list
      and
      unity install --list-modules
      now label their last column
      Aliases
      instead of the downloader name. The
      --format json
      field also changes from
      downloaderName
      to
      aliases
      .
    • The CLI now warns you when both a self-installed
      unity
      and a Homebrew-managed version appear on your
      PATH
      . In this state,
      which unity
      continues to resolve to the self-installed copy, while
      brew upgrade
      updates the Homebrew copy, so the versions can diverge. The background update check now directs you to
      unity self-uninstall -y
      to remove the self-installed copy and let Homebrew manage updates.
  • AI and Editor integration
    • unity skill show
      now prints the CLI's agent skill to standard output without installing anything, so you can read the skill without changing the filesystem. Use
      --path <file>
      to print a reference file,
      --list
      to list all files in the skill, or
      --format json
      to return each file's content with its index.
    • unity --help
      now mentions the agent skill on its last line and directs you to
      unity skill show
      and
      unity skill install <client>
      .
  • Automation and CI
    • unity plugin upgrade
      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,
      upgrade
      downgrades to the newest non-yanked version and explains why.
    • unity plugin changelog <id>
      now displays a managed tool's release notes, rendered from Markdown and paged like
      unity changelog
      . Use
      --version <version>
      to display notes for a specific version, or
      plugin upgrade --changelog
      to display the full notes before the upgrade.
    • A global
      --color <auto|always|never>
      flag now controls colored output directly. Use
      --no-color
      as shorthand for
      --color never
      . The flag affects only human-readable output and no longer relies only on the
      NO_COLOR
      and
      FORCE_COLOR
      environment variables.
    • unity version
      is a new command that displays the CLI version, release channel, commit, platform, architecture, and runtime in any output format.
      --version
      also honors
      --format
      . A bare
      unity --version
      continues to print only the version string.
    • unity doctor
      now lists the CLI's bundled third-party components with their versions and SPDX license identifiers, along with the .NET runtime.
    • A generic
      unity config get|set|list|unset <key>
      interface now provides access to the CLI's existing settings:
      proxy
      ,
      proxy.bypass
      ,
      accelerator
      , and
      update-check
      . 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.
  • 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
      systemd-creds
      and falls back to the Secret Service keyring. On macOS, it uses the Keychain. A local key file provides the fallback on all platforms.
      unity doctor
      now reports which protection is active.
    • unity auth consumers
      now lists the applications that have used your Unity sign-in on the current machine. Use
      unity auth revoke <application>
      to prevent an application from using it. Use
      --restore
      to undo a revoke.
    • The CLI now sends one
      cli telemetry
      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
      UNITY_NO_CLI_INVOKED_TELEMETRY=1
      to disable it.
  • Build automation
    • unity test --affected --since <ref>
      now runs only the tests that a change can affect, based on the impact graph from
      unity vcs affected
      . Selection is opt-in, and results go to
      test-results.affected.xml
      so 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. Use
      --affected-compare
      to 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.
  • 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
      unity license activate --serial
      and
      unity projects new
      to fail their licensing handshake on these machines.
    • 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.
    • unity cache key
      no longer crashes on Windows when the project path points to a file instead of a directory.
    • On Windows,
      unity pipeline list
      and
      unity status
      no 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.
    • On Windows,
      unity skill install
      now updates an earlier installation when the recorded and computed installation paths differ only in slash direction or letter casing.
    • unity doctor
      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 templates create
      and
      unity templates pack
      now 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 install 6000.5
      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 open
      ,
      unity projects open
      , and
      unity projects upgrade
      now report a failure when the Editor they start exits with an error instead of always reporting success.
    • unity build
      now tells you when a project is already open in an Editor instead of reporting what appears to be a licensing error.
    • Release notes that
      unity changelog
      and
      unity self-update --changelog
      render now retain bold and italic styling when the same line contains a link.
    • On Windows,
      unity open <name>
      and
      unity projects open <name>
      no longer print paths that mix forward and backslashes when the registered folder is not a valid project.
    • 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.
    • unity projects verify
      and the
      unity vcs hooks
      pre-commit gate no longer report a missing
      .meta
      file for files inside native plug-in folders (
      .bundle
      ,
      .framework
      ,
      .androidlib
      ,
      .plugin
      ). These folders do not have their own
      .meta
      files.
      unity vcs status
      no longer reports these files either.

September 02, 2026

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.
  • Breaking changes
    • 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.
    • 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.
    • New projects created with
      unity projects create
      are cloud-enabled by default. Pass
      --no-cloud
      , or set
      UNITY_NO_CLOUD
      , to opt out.
    • An Editor that exits with code
      198
      is now reported as a licensing failure instead of a bare exit code.
    • 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
    • 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.
    • 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.
    • 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.
    • unity vcs conflicts
      ,
      unity vcs explain
      , and
      unity vcs resolve
      turn a Unity merge conflict from a list of numeric IDs into actionable information.
    • unity vcs diff <path>
      reads a scene or prefab change by GameObject and component name instead of
      fileID
      .
      unity vcs summarize --since <ref>
      turns an entire branch into a readable summary.
    • 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.
    • unity vcs switch <branch>
      changes branches without causing unnecessary reimports and tells you the expected cost before it switches branches.
    • unity vcs hooks install
      adds Unity integrity checks to your commits. Use
      uninstall
      to remove them.
    • unity vcs git worktree add <branch> [path]
      makes a Git worktree usable with a Unity project.
      unity vcs git worktree remove <path>
      removes it.
    • 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.
    • 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.
    • 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.
    • Repository creation now works with Bitbucket and Azure DevOps, in addition to GitHub, GitLab, and Gitea.
      unity projects create --vcs <host>
      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.
    • 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.
    • 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.
    • 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.
    • 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
    • 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.
    • --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.
    • unity close <path-or-name>
      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
    • 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.
    • 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.
    • unity install <version> --changeset <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.
    • 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.
    • 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.
    • 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
    • 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.
    • unity skill install <client> --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.
    • unity mcp
      no longer reports every numeric, array, and structured tool parameter as a string.
  • Automation and CI
    • 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.
    • 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.
    • unity doctor
      now checks whether the machine's credential store can store a sign-in and reports which backend it selected.
    • 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
    • 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
      /
      n
      , matching the other questions in the CLI.
  • Issues fixed
    • 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.
    • unity editor module refresh <version>
      now repairs an Editor that an earlier install left unregistered. Use this command if you encountered the issue above before this release.
    • 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
      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.
    • 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.
    • Backticks in a path, project name, Editor version, or any other value you type are no longer deleted from the CLI's messages.
    • 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.
    • 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.
    • 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.
    • On Linux,
      unity install-modules
      now puts the iOS, WebGL, Linux-IL2CPP, and Linux-Server playback engines where the Editor expects them.
    • 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.
    • 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
      unity projects list
      and the Kind column in
      unity plugin list
      now use your display language.
    • unity bug --share-project
      no longer uploads a Unity 6000.6+ project's
      Library/DataStore
      folder.
    • 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.
    • --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.
    • unity install <arg>
      now rejects an argument that is not a Unity version with an
      INVALID_VERSION
      error before sending it to the release catalog.
    • 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
      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.
    • 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
      .
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.

August 21, 2026

1.0.0-beta.6

  • Breaking changes
    • unity bug
      now requires you to be signed in, and exits with code
      3
      instead of
      0
      when you aren't. Previously a signed-out run reported nothing and appeared to succeed. Authenticate first, or pass service-account credentials, before a script or CI job calls
      unity bug
      .
    • unity test
      now uses exit code
      8
      specifically for a run whose tests failed. Every other way a test run fails to reach a verdict — a compile error, an expired license, an editor crash, or
      --timeout
      — keeps exit code
      6
      . If a script treats exit code
      6
      as "tests failed," point it at
      8
      instead.
  • Source control
    • unity projects create
      and
      unity projects link vcs
      can now create the new repository through
      gh
      ,
      glab
      , or
      tea
      when the CLI's own REST clients can't reach the host: a GitHub Enterprise Server, a self-managed GitLab, or a self-hosted Gitea or Forgejo instance.
      --vcs
      accepts a bare hostname for these. No token passes through the CLI on this path; the provider CLI's own signed-in session does the work. A new
      --git-description <text>
      flag sets the repository's description.
    • unity projects clone
      and
      unity projects link vcs
      now accept a plain git URL —
      ssh://
      ,
      git@host:path
      , or
      https://
      — as an optional positional argument, so any git host works, including Bitbucket, Azure DevOps, and a self-hosted server. This form uses your machine's own ambient git authentication rather than a provider API call.
    • Both commands, and
      unity projects create --vcs
      , now work fully over SSH, including host-key verification and passphrase-protected keys. Use
      --git-remote-protocol ssh
      on the flag form to switch the transport.
    • Signing in to github.com no longer implies anything on a self-hosted host. When a self-hosted or enterprise host needs its own sign-in, the CLI now names the exact command to run for whichever provider CLI you have installed.
    • Git credential prompts no longer hang. Without a terminal, in CI, under a machine-readable
      --format
      , or with
      --non-interactive
      , the CLI now fails immediately with exit code
      4
      naming the credential it needed, instead of waiting on a prompt nobody could answer.
    • Git operations under
      unity projects
      now respect your own git configuration (
      core.sshCommand
      ,
      includeIf
      rules, credential helpers) instead of ignoring it, and credential lookups resolve per organization when your credential helper supports it (set
      git config --global credential.useHttpPath true
      to opt in).
  • Project management
    • Added
      unity projects verify
      , a fast check for the things version control breaks in a Unity project: orphaned or missing
      .meta
      files, duplicate GUIDs from a bad merge, and unresolved conflict markers. It needs no Editor, license, or network access, so a broken checkout fails in seconds instead of after a full build. Pass
      --strict
      to fail on warnings too, and
      --expect-editor <version>
      to also check for editor-version drift.
  • Build automation
    • unity build
      now writes a build provenance manifest next to its output, recording the editor version, resolved package set, build target, git revision, and timestamps that produced the build. It's written for failed builds too. Paths, credentials, and machine-identifying details are deliberately left out, so it's safe to publish alongside the artifact. Use
      --provenance-path
      to choose where it's written, or
      --no-provenance
      to turn it off.
    • unity build
      now prints a periodic heartbeat during a long build, tracking both elapsed time and how long since the editor's log last grew, so silence in the log no longer looks the same as a hang. A new
      --timeout <seconds>
      flag (also
      UNITY_BUILD_TIMEOUT
      ) aborts a build that runs too long.
  • Unity Collaboration
    • unity collaboration
      (
      unity collab
      for short) is now part of every build, instead of development builds only. It covers Unity Collaboration's annotations end to end — create, list, update, resolve, reply, and react — plus attachments, thumbnails, and a Jira integration that creates and links issues from the CLI. Run
      unity collab --help
      for the full command tree.
  • Automation and CI
    • Added
      --format github
      , a global output format that reports command failures as GitHub Actions annotations instead of plain text, so a red step in a workflow points at what went wrong in its summary.
    • Added
      unity cache key
      , which prints a deterministic cache key for a Unity project's
      Library
      folder, derived from the editor version, the resolved package set, and the build target. Use it as the key for a CI cache step.
    • Added
      unity doctor --ci
      , a fast preflight that checks whether a machine can actually finish a build or test run — an activatable license, the project's required editor, disk space, and network reachability — and exits non-zero when it can't, so a pipeline fails in seconds instead of partway through a build.
    • unity test
      gained
      --shard N/M
      to split a suite deterministically across parallel CI jobs,
      --retries N
      to re-run only the tests that failed and report which ones were flaky, and
      --rerun-failed
      to re-run just the failures from a previous run's report.
  • Security and privacy
    • Shell completion scripts (
      unity completion bash
      ,
      fish
      , and
      powershell
      ) now escape the strings they interpolate, closing a defense-in-depth gap where an unescaped value could have run as a command or broken out of its quoting.
    • Progress spinners and the background update check are hardened against a tampered update manifest smuggling terminal control sequences into the spinner label.
  • Issues fixed
    • Editor and module install progress bars are back in the terminal. A large download previously printed nothing at all until it finished, which looked indistinguishable from a hang.
    • A stale Unity Licensing Client is now detected and replaced automatically, instead of silently rejecting every
      unity license
      command until it was deleted by hand.
    • The Android module on Linux, the Android NDK on macOS, Windows modules that need administrator elevation, and language packs all had install paths that were broken outright; all are fixed.
    • Headless or wrapped editors (running under
      xvfb-run
      ,
      dbus-run-session
      , or a CI runner) are counted correctly again by
      unity status
      , instead of appearing as duplicates or "ambiguous."
    • The loop where signing in with
      unity auth login
      eventually signed you out of the Unity Hub is fixed for good.
    • Installing the CLI on Windows no longer corrupts your user
      PATH
      . PowerShell tab completion now actually registers (it never took effect before).
      unity command
      now catches malformed or misspelled arguments instead of silently running on default values.

August 13, 2026

1.0.0-beta.5

  • Security and privacy
    • unity bug
      no longer uploads your account name or email address. The CLI's log file records paths under your home directory on nearly every line, and a bug submission attaches that file as-is, so on a machine where the account name is your real name, submitting a report sent it too. Both are now redacted as each line is written: the account name becomes
      <user>
      wherever it appears, and email addresses become
      <redacted-email>
      . Nothing else about the line changes, so an install failure stays diagnosable. Logs written before this release are unaffected; delete them if you'd rather not send them.
  • Issues fixed
    • A retried module download in
      unity install-modules
      now resumes the partial file it already has instead of starting that module again from the beginning. A module that failed and then succeeded within the same run previously left one numbered file per attempt, such as
      android (1).pkg
      and
      android (2).pkg
      ; it now leaves a single file and downloads its bytes once. The retry count and the exit code are unchanged.
    • unity build
      ,
      unity test
      , and
      unity run
      now report an Editor killed by a signal as
      stopped with signal SIGSEGV
      , naming the signal, instead of reporting
      exited with code 1
      .
      SIGILL
      ,
      SIGTRAP
      ,
      SIGFPE
      , and
      SIGBUS
      are recognized too, where they previously surfaced as a bare number such as 132. An Editor that exits normally still reports its own exit code.
    • Routine outcomes no longer suggest you report a CLI bug. Declining a module's license terms, being told to pass
      --accept-eula
      in a non-interactive shell, running
      unity modules <version>
      for an Editor you haven't installed, setting an invalid path with
      unity install-path --set
      , a
      unity build
      whose build fails, and a
      unity install
      that waits on another install's lock all stopped printing "Run
      unity bug
      to report this issue". The messages, the exit code (6), and the
      --format json
      envelope, including the
      BUILD_FAILED
      error code, are unchanged, so scripts that branch on them keep working. An Editor that crashes mid-build is still reported as a fault.
    • unity --help
      ,
      unity -h
      ,
      unity help
      , and bare
      unity
      show the Unity logo header again. The header still stays out of the way when you pipe the output, pass
      --quiet
      or
      --no-banner
      , or ask for a machine-readable format, and subcommand help such as
      unity install --help
      is unchanged.
    • unity completion zsh
      now produces a script that registers itself with zsh, so pressing Tab completes commands, subcommands, and flags. The script previously defined the completer without telling zsh about it, and Tab fell back to plain filename completion with no error to explain why. Save it to a directory on your
      $fpath
      :
      mkdir -p ~/.zsh/completionsunity completion zsh > ~/.zsh/completions/_unity
      Then make sure your
      ~/.zshrc
      has
      fpath=(~/.zsh/completions $fpath)
      followed by
      autoload -Uz compinit && compinit
      . bash, fish, and PowerShell completion are unaffected.
    • The
      --proxy
      help text shows its credentialed example as
      http://<user>:<pass>@host:8080
      , so it's clear which parts you substitute. In Spanish, the username in that example is no longer mistranslated.

August 12, 2026

1.0.0-beta.4

  • Breaking change
    • Linux now requires glibc 2.34 or newer. This drops support for Ubuntu 20.04 and earlier, Debian 11, RHEL and CentOS 8, and Amazon Linux 2. RHEL 9 and Ubuntu 22.04 are the oldest supported releases. The
      .deb
      and
      .rpm
      packages declare the requirement, so
      apt upgrade
      and
      dnf upgrade
      refuse the update on an affected system and leave your working CLI in place, and
      install.sh
      checks before it downloads. If you're on an affected distribution, stay on 1.0.0-beta.3. macOS and Windows are unaffected.
  • Installation and updates
    • Added winget as an install source on Windows:
      winget install Unity.CLI
      , then
      winget upgrade Unity.CLI
      to stay current.
    • Added Homebrew as an install source on macOS and Linux:
      brew install --cask unity-cli
      , then
      brew upgrade unity-cli
      .
    • Added self-updating Windows installs.
      unity upgrade
      now updates an MSIX install directly instead of deferring to winget, downloading only the parts of the package that changed. It also registers the install with Windows, which then keeps the CLI current in the background. Rollback remains unavailable on MSIX.
    • Added
      unity diagnose update
      , which reports the version and channel the install resolved, the manifest it reads, and the exact command that updates it. On Windows it also shows the update feed Windows is registered against.
  • Editor and project management
    • Added
      unity projects exec -- <command>
      , which runs one command across every registered project. Narrow the set with repeatable
      --filter
      terms, raise concurrency with
      --parallel <n>
      , and use
      --continue-on-error
      to run the whole fleet regardless.
    • Added
      unity projects clean [project]
      to delete a project's regenerable cache folders and reclaim disk space. Use
      --dry-run
      to list the targets and sizes without deleting.
    • Added
      unity editors prune
      to find installed Editors no registered project uses, with the disk space each would reclaim. Report-only by default;
      --remove
      uninstalls them after confirmation.
    • Added
      unity editors verify <version>
      to check that an installed Editor's binary and modules are present and non-empty, catching installs left broken by antivirus quarantine or a failed extraction.
    • Added
      unity templates pack <project-path> --output <file>
      to pack an existing project into a portable template archive.
  • Build automation
    • unity build
      no longer requires
      --execute-method
      . On Unity 6 and newer,
      --profile <path-or-name>
      builds a Build Profile, and on every version the desktop targets build without a method, so
      unity build --target StandaloneWindows64 --output-path Build/MyGame.exe
      works with no project-side C# code.
      --execute-method
      keeps working and takes precedence.
  • Authentication
    • Added multi-account support.
      unity auth login
      adds an account without dropping existing sessions,
      unity auth list
      shows every stored account,
      unity auth switch <account>
      changes the active one, and
      unity auth logout <account>
      signs out one account while preserving the rest.
    • Added per-project default accounts with
      unity auth default <account>
      , so cloud-authenticated commands run from inside that project resolve it automatically.
  • AI agent integration
    • Added
      unity skill install <client>
      to install the Unity CLI agent skill into an AI client's rules or skills directory, in that client's native format. The skill is embedded in the binary, so it works offline and matches the running version.
      unity skill refresh
      re-renders previously installed skills after an upgrade.
  • Automation and CI
    • Added CI-native test reports and code coverage to
      unity test
      , so it drops into a GitHub Actions or GitLab pipeline without a converter step.
    • Added detached Editor command jobs:
      unity command <name> --detach
      and
      unity eval <expr> --detach
      return a job ID immediately, and
      unity job wait
      ,
      unity job status
      , and
      unity job cancel
      manage it. Requires a Unity pipeline package with job support.
    • Added live Editor task progress to
      unity command
      and
      unity run --command
      , rendered as a progress bar on an interactive terminal and as
      {"type":"progress"}
      frames under
      --format ndjson
      .
    • unity command
      ,
      unity list
      ,
      unity job
      , and
      unity mcp
      now find the right Editor on their own when several are open, by matching the directory you run them from against the registered projects. Explicit
      --project-path
      still takes precedence.
    • Added the full query surface to
      unity command
      listings:
      --query
      ,
      --tag
      ,
      --group_by
      ,
      --sort
      ,
      --order
      ,
      --offset
      ,
      --limit
      , and
      --detail
      .
    • unity bug
      can now attach files with
      --attachments <paths...>
      and a stripped copy of the project with
      --share-project <path>
      .
  • Output and integration
    • --format ndjson
      failures are now machine-readable: a failed command ends the stream with a terminal
      {"type":"result","success":false,…}
      frame carrying the same fields as the
      --format json
      envelope, instead of reporting only on stderr.
    • Long human-readable output now scrolls in a pager on an interactive terminal, using
      $UNITY_PAGER
      ,
      $PAGER
      , or
      less
      . Machine formats, piped output, and
      --quiet
      never page. Opt out with
      --no-pager
      or
      UNITY_NO_PAGER
      .
  • Interactive shell
    • Added full line editing to the
      unity shell
      prompt: Up and Down recall previous commands across sessions, Tab completes commands, subcommands, flags, and values, and Left, Right, Home, and End move within the line.
    • Tab completion now completes pipeline command names live from the connected Editor.
  • Issues fixed
    • unity upgrade
      now verifies that the downloaded binary starts on your system before replacing the one you have, and no longer cancels itself where the temporary directory is mounted
      noexec
      .
    • unity upgrade
      no longer overwrites an npm-managed install; it now defers to
      npm i -g @unity/cli@latest
      the same way it defers to apt, rpm, and Homebrew.
    • unity open
      no longer causes the Editor to open Unity Hub, and the Editor now picks up the account you signed in with.
    • unity license
      commands and Unity Version Control commands now work on a machine that has never run Unity Hub.
    • unity editors upgrade
      no longer hides upgrades for Apple silicon and Arm Windows Editors, no longer offers an older patch than the newest in the line, and no longer reports prerelease Editors as up to date when a newer prerelease exists.
    • unity editors info <version>
      now finds releases on entitlement-gated lines, such as extended LTS.
    • unity install <version>
      now distinguishes an unreachable release service from a version that doesn't exist, retrying briefly and exiting with the new code 7 rather than blaming the version.
    • unity hub install
      works again on macOS and Linux, and
      --hub-version
      works again for Hub 3.20.0 and newer.
    • Running a command with
      sudo
      no longer leaves root-owned directories that break every later command.
    • unity install
      failures now report the underlying reason instead of a bare
      Installation Failed
      , and interrupted downloads can be resumed with
      --resume
      .
    • Editor and module downloads are now verified against the release manifest's checksum, including downloads resumed across attempts.
    • unity mcp configure
      now writes the config key and file path each AI client actually reads, preserves comments and formatting in the files it edits, and the
      run_tests
      and
      recompile
      tools return as soon as the Editor answers instead of always failing at their poll timeout.
    • Running a command group without a subcommand now prints its help to stdout and exits 0 instead of reporting a usage error.
    • Editor Pipeline commands now work behind an HTTP proxy, and long-running Editor commands no longer hard-fail at 60 seconds.
  • Security
    • Values that come from Unity services, user-editable settings, or the licensing client are now 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. This covers table headers and cells, interactive prompt choices,
      unity license status
      ,
      unity editors default
      ,
      unity install-path
      , and
      unity config proxy
      .
    • A rejected
      --proxy
      value shaped like
      user:pass@host
      no longer echoes the password in the usage error.
    • unity uninstall
      on macOS and Linux now refuses an Editor whose stored location resolves to a filesystem root.
    • Updated the bundled HTTP client library, which now rejects header values containing CR or LF characters.

July 23, 2026

1.0.0-beta.3

  • Interactive shell
    • Added persistent command history to
      unity shell
      . Press the Up and Down arrow keys to recall previous commands. History is capped at 1,000 entries, and secret-bearing flag values are masked before they're written to disk.
    • Added tab completion to
      unity shell
      for command names, subcommands, option flags, and option values.
    • Added session context and defaults to
      unity shell
      :
      use project <path>
      and
      use org <id>
      set an active project or organization for later commands, and
      set format
      ,
      set verbose
      , and
      set banner
      set default global options for the session.
      unset <key>
      clears one setting and
      context
      displays the current state.
    • Added
      unity shell --protocol ndjson
      , a machine mode that runs a framed NDJSON request/response protocol over
      stdio
      so automated callers and agents can run many commands in one warm process and read one parseable result per command.
    • Updated piped and scripted
      unity shell
      sessions to exit with the code of the first failed command instead of always exiting
      0
      .
  • Editor and project management
    • Added
      unity editors running
      to list running Unity Editor instances with the open project, Editor version, and process ID.
    • Added
      unity projects size [project]
      to report a project's on-disk size broken down by top-level folder. Use
      --all
      to summarize every registered project, sorted largest first.
    • Added
      unity projects close [project]
      to close the running Editor that has a project open. Use
      --timeout <seconds>
      to bound the graceful wait and
      --force
      to terminate the process when it can't exit.
    • Added
      unity editor module remove
      to remove installed modules from an Editor by module ID.
    • Added
      unity install <version> --list-components
      as an alias for
      unity modules list <version>
      .
    • Added
      unity run --command <name>
      to run a registered
      [CliCommand]
      Editor command headlessly in a single invocation. The CLI starts the Editor in batch mode, runs the command, prints the return value, and shuts the Editor down. Requires the Unity pipeline package.
  • Automation and CI
    • Added
      --json
      as a global shorthand for
      --format json
      on every command.
    • Added support for the
      UNITY_PROJECT_PATH
      and
      UNITY_CLOUD_ORG
      environment variables.
    • Unified flag names across commands:
      --project-path
      is the canonical flag for a Unity project path and
      --cloud-org
      for a Unity Cloud organization. The previous
      --project
      and
      --org
      spellings keep working as hidden aliases.
    • Added non-interactive support to
      unity bug
      through the
      --title
      ,
      --description
      ,
      --steps
      ,
      --reproducibility
      , and
      --email
      options, so you can submit bug reports from scripts and CI.
    • Added the
      UNITY_NO_CONSENT_PROMPT
      environment variable to suppress the one-time first-run consent prompt without recording a choice.
    • Added terminal-integrated progress reporting through the
      OSC 9;4
      escape sequence. On Windows Terminal, the taskbar icon fills with download and install progress while
      unity install
      runs.
    • Updated the CLI to terminate on
      SIGTERM
      with the conventional exit code
      143
      instead of ignoring the signal.
  • Installation and updates
    • Updated
      install.sh
      on Linux to install the binary to
      ~/.local/bin/unity
      , which is on
      PATH
      by default on most distributions. Re-running the installer migrates an existing
      ~/.unity
      install.
    • Added publication of the
      .deb
      and
      .rpm
      packages to Unity's apt and rpm repositories on every beta and general availability (GA) release, so package-managed installs update through the system package manager.
    • Added in-place AppImage updates to
      unity upgrade
      , including checksum verification and
      --rollback
      support.
    • Updated the background update notice to suggest the owning package manager's exact upgrade command on package-managed installs.
    • Fixed the MSIX package never receiving updates because every release rendered the same package version.
    • Fixed the Windows install one-liner failing for every user with "The assignment expression is not valid".
  • Diagnostics and crash reporting
    • Added anonymous crash and error reporting through Sentry. Reports contain no IP address or hostname, and home-directory paths and token-like values are scrubbed before sending. Set
      UNITY_NO_CRASH_REPORT
      to disable reporting entirely.
    • Expanded the opt-in usage analytics to record which commands run (registered command names only, never arguments, paths, or project names) and the outcomes of key workflows. Nothing is sent when you're opted out, which is the default.
    • Updated the "Recent log" section of
      unity doctor
      to render readable log rows instead of raw NDJSON logger lines.
  • Localization
    • Updated
      unity language
      to share the Unity Hub's language catalog, with display names derived from CLDR data.
    • Updated
      unity lang --set
      to accept common spellings of a language code: BCP-47 (
      ja-JP
      ), locale (
      ja_JP
      ), bare language (
      ja
      ), or bare region (
      jp
      ).
    • Fixed non-English locales missing translations for newer commands, so CLI output renders localized instead of falling back to English.
  • Security
    • Hardened usage errors, the
      unity bug
      log-archive warning, and
      unity projects add
      and
      unity projects remove
      machine output against terminal escape-sequence injection.
    • Added GPG signing to the
      .rpm
      packages with the published Unity Technologies ApS key.
  • Issues fixed
    • Fixed
      unity upgrade
      on Windows flashing a console window about a second after the command exits.
    • Fixed an invalid
      --proxy <url>
      value being silently ignored. It now fails with a usage error (exit code
      2
      ).
    • Fixed editor and module downloads failing with a DNS error when the operating system proxy settings point at an unreachable proxy auto-config (PAC) URL.
    • Fixed
      unity auth login
      on Linux without
      xdg-open
      surfacing a confusing error. The command now prints the sign-in URL so you can open it manually. Under Windows Subsystem for Linux (WSL), the CLI now opens URLs through Windows interop.
    • Fixed
      unity open <path> --editor-version <version>
      failing with "Not a Unity project" when the project has no
      ProjectSettings/ProjectVersion.txt
      file.
    • Fixed
      unity open
      with
      --editor-version
      starting a multi-gigabyte Editor download without asking. A terminal session now confirms before installing, and a non-interactive session fails fast instead.
    • Fixed
      unity status
      and
      unity pipeline list
      not detecting a running Editor whose project path contains a space on macOS and Linux.
    • Fixed
      unity command eval
      and
      unity command eval_file
      exiting
      0
      when the Editor reported a compilation error. They now exit
      6
      and print the compiler diagnostics.
    • Fixed
      unity mcp
      reporting failed
      eval
      tool calls as successful, and fixed
      unity mcp
      breaking permanently after an Editor script recompile.
    • Fixed
      unity editors --installed
      stalling for minutes on Windows when antivirus real-time scanning intercepts a freshly installed Editor.
    • Fixed an intermittent crash at exit on Windows right after a command completed successfully.
    • Fixed
      unity upgrade
      failing with a cross-device link error when the system temporary directory is on a different filesystem than the install directory.
    • Fixed
      unity projects create
      handing a corrupt template archive to the Editor. Template downloads are now verified against their published checksum.
    • Fixed
      unity run --command
      launching a second Editor on Windows when the project path differed only by letter case.
    • Fixed the
      .deb
      package failing to install on minimal Debian and Ubuntu systems by declaring a dependency on
      ca-certificates
      , and fixed the Unity licensing client never installing on Linux systems without the
      unzip
      utility.
    • Fixed opted-out runs sending a single anonymous analytics request in some commands. Consent off now means zero analytics requests.
    • Fixed
      unity analytics opt-in
      and
      unity analytics opt-out
      not permanently answering the first-run consent prompt when run from a script.

July 16, 2026

1.0.0-beta.2

  • Interactive shell
    • Added
      unity shell
      , an interactive session that boots the CLI once and runs many commands in the same warm process. Enter any command without the
      unity
      prefix, and leave with
      exit
      ,
      quit
      , or Ctrl+D. Interactive prompts work inside the shell, and a change made by one command is visible to the next.
  • Proxy diagnostics
    • Added
      unity diagnose proxy
      to print a redacted, paste-safe proxy diagnostic report: the resolved proxy and its source, PAC configuration, CA bundle, and credential-store and Kerberos checks.
    • Added the global
      --log-proxy
      flag (or
      UNITY_LOG_PROXY=1
      ) to log one redacted entry per outbound request for reproducing proxy issues.
    • Fixed part of the CLI's HTTPS traffic bypassing the configured proxy. Sign-in, template and release lookups,
      unity bug
      , and
      unity upgrade
      traffic now route through the same proxy stack as downloads, and
      --proxy-disable
      now forces a direct connection.
  • Unity pipeline package
    • Added
      unity pipeline upgrade
      to upgrade the Unity pipeline package in a project when the registry has a newer version.
    • Added
      unity pipeline list-versions
      to list every published version of the package, and
      unity pipeline install --package-version <version>
      to install a specific version.
    • Updated
      unity pipeline list
      to show each project's installed package version and flag when a newer version is available.
    • Added
      unity list
      , a discovery command that queries the connected Unity Editor and prints every registered tool with its name, description, group, and parameter schema.
  • Editor and module installation
    • Added
      --reinstall
      and
      -f, --force
      to
      unity install-modules
      to repair modules that are already installed.
    • Added automatic retries for module downloads that fail intermittently. Tune or disable retries with
      --retries <n>
      or
      UNITY_INSTALL_RETRIES
      .
    • Added
      --no-elevate
      (or
      UNITY_NO_ELEVATE=1
      ) on Windows to skip the elevated (UAC) install helper for user-writable install locations and CI shells.
    • Updated
      unity install
      and
      unity install-modules
      to continue installing the remaining modules when one fails, and to report a per-item result for each Editor and module on both success and failure.
    • Added a desktop entry for installed Editors on Linux, so a launched Editor shows the Unity name and icon in the taskbar.
  • Diagnostics
    • Added environment health checks to
      unity doctor
      : whether the
      unity
      binary's directory is on
      PATH
      , whether multiple
      unity
      binaries shadow each other, and whether Windows long-path support is enabled.
  • Installation and updates
    • Updated
      unity upgrade
      to detect how the CLI was installed. On a package-manager install, it points you at the owning manager instead of replacing the binary in place.
    • Added GPG signing and AppImage-native update information to the Linux AppImage, so third-party updaters can check for and apply CLI updates.
  • CLI behavior
    • Added "Did you mean" suggestions for unknown commands that look like a typo of a real one.
    • Updated command modules to load only when their command runs, reducing startup time on every invocation.
    • Removed
      --instance <host:port>
      from
      unity command
      and
      unity mcp
      . The CLI now always discovers running Editors itself; run from the project directory or pass
      --project-path
      to target one.
    • Removed the regional display languages Spanish (Latin America), French (Canada), and Portuguese (Portugal) from
      unity language
      . Spanish, French, and Portuguese (Brazil) remain available.
    • Updated the first-run consent prompt to require an explicit
      y
      or
      n
      answer.
  • Security
    • Hardened the Editor and module installers against command injection through the configured install location.
    • Updated
      unity hub install
      to verify that the downloaded installer is signed by Unity specifically, instead of accepting any validly signed binary.
    • Extended escape-sequence hardening to more output surfaces, including
      unity projects list
      and the detail views.
  • Issues fixed
    • Fixed the
      lts
      version alias resolving to the newest Supported-stream release instead of the newest Long Term Support (LTS) release.
    • Fixed command hints showing literal markdown backticks. Commands now render in cyan on color terminals and as plain text elsewhere.
    • Fixed the CLI requiring the Microsoft Visual C++ Redistributable on Windows.
    • Fixed Unity 2021 and 2022 Editors failing to start when launched through the CLI on Windows.
    • Fixed the
      unity license
      commands not recognizing service-account sessions, and fixed
      unity license return
      not returning serial-activated licenses.
    • Fixed file sizes printing a literal
      undefined
      where the unit belongs.
    • Fixed installing the Visual Studio module opening the interactive Visual Studio Installer on Editor versions whose release manifest omits the install command.
    • Fixed
      unity templates list
      and
      unity templates info
      silently falling back to cached template data when the template registry is unreachable. The CLI now prints a warning when it shows cached data.
    • Fixed concurrent module installs corrupting the Editor's module state or failing with misleading permission errors.
    • Fixed the install scripts failing on systems without a shell startup file, and fixed the Windows install script failing to parse under Windows PowerShell 5.1 when saved to disk.
    • Fixed authentication failures in the
      unity cloud
      commands exiting with code
      6
      instead of
      3
      , and aligned operational failures in the cloud and auth commands on exit code
      6
      .
    • Fixed interrupted builds exiting with a generic
      1
      . Interrupting
      unity build
      now exits
      130
      for Ctrl+C and
      143
      for
      SIGTERM
      .
    • Fixed
      unity upgrade
      failing with a 404 error when the Unity Hub ran in a non-production environment on the same machine.

June 30, 2026

1.0.0-beta.1

The first 1.0 beta of the Unity CLI. This release marks the move to 1.0 versioning and rolls up the functionality shipped across the 0.1.0 betas.
  • Issues fixed
    • The CLI no longer logs your OAuth access token or Hub session ID in plaintext. Editor-launch commands previously wrote them to the log file that
      unity logs
      ,
      unity doctor
      , and
      unity bug
      read; they're now redacted.
    • Fixed detail commands printing nothing under
      --format tsv
      and
      --format ndjson
      , including
      unity editors info
      ,
      unity config update-check
      ,
      unity pipeline install
      ,
      unity license activate
      , and
      unity upgrade --dry-run
      .
    • Fixed
      unity run
      and
      unity test
      mixing the Editor's batch-mode output into machine-readable output. Under
      --format json
      and
      --format ndjson
      , the Editor's output goes to
      stderr
      so the result is the only thing on
      stdout
      .
    • Fixed
      unity projects list
      dropping its column flags (
      -v
      ,
      --cloud
      ,
      --editor-version
      ,
      --vcs
      ,
      -m
      ,
      --pipeline
      ) when piped.
    • Fixed
      unity templates create
      flattening dots in the stored template name, which made later lookups by name fail.
    • Fixed
      unity editors --installed
      hanging on Windows right after an install when antivirus scanning or a file lock delayed reading the Editor executable.
    • Fixed invalid
      unity upgrade --target
      and
      --channel
      values exiting with a generic error code instead of the standard usage-error code.

June 25, 2026

0.1.0-beta.8

  • AI agent integration
    • Added
      unity mcp
      to start a Model Context Protocol (MCP) server, built into the
      unity
      binary, that exposes the commands of a connected Unity Editor as MCP tools. AI agent clients connect over
      stdio
      and can list and run those commands.
    • Added
      unity mcp configure <client>
      to register the Unity MCP server in an AI agent's configuration in one step, for 16 supported clients including Claude, Claude Code, Cursor, and VS Code. Only the Unity entry is written; every other key in the file is preserved.
  • Editor management
    • Added
      unity editors upgrade [editor]
      to upgrade an installed Editor to the newest official patch in its same
      major.minor
      line, carrying the Editor's installed modules over to the new patch. Supports
      --all
      ,
      --dry-run
      ,
      --replace
      , and module and architecture flags.
    • Added an explicit
      unity editors list
      subcommand, matching the
      list
      verb used by other command groups.
    • Added an "Upgrade to" column to
      unity editors list --installed
      that flags installed Editors with a newer patch available in their line.
  • CLI behavior
    • Updated
      unity bug
      to collect the same diagnostic system information as the Unity Hub bug reporter, including GPU details.
    • Updated the Unity CLI and the Unity Hub to store their sign-in credentials separately, so each can stay signed in as a different account.
    • Updated
      unity projects clone
      to download Git LFS objects after cloning.
    • Added a background check for a newer
      unity
      version with an unobtrusive update notice. Turn it off with
      unity config update-check off
      or the
      UNITY_NO_UPDATE_CHECK
      environment variable.
  • Issues fixed
    • Fixed
      unity projects clone
      storing your Git access token in the cloned repository's
      .git/config
      .
    • Fixed the CLI hanging at exit after a command finished printing its output.
    • Fixed the bundled Unity licensing client failing its signature check on macOS and being re-downloaded on every run.
    • Fixed
      unity releases --limit
      not limiting the number of releases returned.
    • Fixed
      unity analytics
      ,
      unity language
      , and
      unity config proxy
      printing nothing under
      --format tsv
      and
      --format ndjson
      .
  • Removed
    • Removed the deprecated
      unity implode
      alias. Use
      unity self-uninstall
      instead.

June 16, 2026

0.1.0-beta.7

  • Licensing
    • Added
      unity license
      (
      unity license list
      ) to display active Unity licenses on the current machine, including product, license type, organization, and expiration date.
    • Added
      unity license status
      to display licensing status, sign-in state, and active license information.
    • Added
      unity license activate
      to activate licenses through serial, Personal, floating, offline file, or offline request workflows.
    • Added
      unity license return
      to return active licenses and free associated seats.
    • Added
      unity license server status
      and
      unity license server list
      to display floating license server status and availability.
  • Project management and source control
    • Added
      unity projects clone
      to clone and register Unity projects from GitHub, GitLab, and Unity Version Control repositories.
    • Added support for branch, commit, and changeset selection during project cloning.
    • Added
      unity projects link vcs
      and
      unity projects unlink vcs
      to connect or disconnect projects from source control repositories.
    • Added source control options to
      unity projects create
      and
      unity projects link vcs
      , including repository visibility, default branch, Git LFS, and Unity Version Control region settings.
  • Hub and Editor management
    • Added
      unity hub install
      to install Unity Hub.
    • Added support for architecture selection, silent installation, version selection, and installer signature verification.
    • Added
      unity editors path <version>
      to display the installation path of an installed Editor.
  • Build automation
    • Added Android signing options to
      unity build
      , including keystore, signing key, version code, symbol generation, and target SDK configuration.
    • Added support for exporting Android builds as APK, Android App Bundle (AAB), or Android Studio projects.
    • Added validation for Android signing parameters and warnings when sensitive information is provided through command-line arguments.
  • Testing
    • Added
      unity test [project]
      to run Edit Mode and Play Mode tests through the Unity Editor test runner in batch mode.
    • Added support for NUnit XML test reports through the
      --output
      option. The default output file is
      test-results.xml
      .
    • Added support for
      --mode
      ,
      --filter
      ,
      --editor-version
      ,
      --editor-path
      ,
      --architecture
      ,
      --allow-install
      , and
      --timeout
      options.
    • Added support for the
      UNITY_TEST_TIMEOUT
      environment variable.
    • Added exit code
      6
      when test execution completes but one or more tests fail.
  • CLI behavior
    • Added a dedicated
      cli-log.json
      log file for Unity CLI.
    • Updated
      unity logs
      ,
      unity bug
      , and
      unity doctor
      to use CLI-specific logs.
    • Added a branded Unity header for interactive CLI entry points, including
      unity
      ,
      unity help
      , and
      unity --help
      .
    • Updated the CLI to display usage information and return exit code
      0
      when users run
      unity
      without arguments.
  • Issues fixed
    • Fixed an issue where module installers always used the same installation command instead of honoring module-specific installation parameters.
    • Fixed an issue where
      --format ndjson
      was not supported by
      unity projects list
      and
      unity modules list
      .
    • Fixed an issue where
      unity bug
      could fail with an HTTP 400 error.
    • Fixed table output that could truncate identifier columns when terminal width was limited.
    • Hardened terminal output against control-character and escape-sequence injection from server-provided values.
    • Fixed session-state reporting in
      unity doctor
      and
      unity cloud status
      to match
      unity auth status
      .
    • Fixed architecture detection on Windows Arm64 systems running x64 emulation.

June 04, 2026

0.1.0-beta.6

  • Editor scripting and status
    • Added
      unity eval '<expr>'
      to evaluate C# expressions against a connected Unity Editor through the Pipeline server.
    • Added support for human-readable, JSON, TSV, and NDJSON output formats, timeouts, and instance targeting in
      unity eval
      .
    • Added
      unity status
      to display the status of connected Unity Editors, including port, project path, Unity version, process ID, and connectivity.
    • Added filtering options for Editor instances and support for automation workflows through structured output and exit codes.
  • Custom templates
    • Added
      unity templates create
      to package existing Unity projects as reusable custom templates.
    • Added
      unity templates edit
      to update custom template metadata.
    • Added
      unity templates delete
      to remove custom templates.
    • Added
      unity templates location
      to view, configure, or reset the custom template storage location.
    • Added support for filtering templates by type in
      unity templates list
      .
  • Unity Cloud
    • Added
      unity cloud status
      to display cloud sign-in status and the active organization.
    • Added commands to list, select, and manage Unity Cloud organizations.
    • Added
      unity cloud project list
      to display Unity Cloud projects in the active organization.
  • Project management
    • Added
      --cloud
      support to
      unity projects create
      to create and link a Unity Cloud project during project creation.
    • Added
      --cloud-project
      support to link a project to an existing Unity Cloud project.
    • Added
      unity projects link cloud
      and
      unity projects unlink cloud
      to manage Unity Cloud project associations.
    • Added support for creating projects from
      .tgz
      archives and directory paths in addition to registered template IDs.
  • Build versioning
    • Added
      --versioning-strategy
      and
      --build-version
      options to
      unity build
      .
    • Added support for deriving build versions from Git tags and repository history.
    • Added validation that prevents builds from using a modified working tree unless
      --allow-dirty-build
      is specified.
  • Authentication and analytics
    • Added shared authentication between Unity CLI and Unity Hub through the operating system keyring.
    • Added automatic migration of existing Unity Hub sessions to keyring-based storage.
    • Added
      unity analytics opt-in
      ,
      unity analytics opt-out
      , and
      unity analytics status
      commands to manage telemetry preferences.
    • Added a first-run consent prompt for telemetry collection.
    • Added support for shared telemetry preferences between Unity CLI and Unity Hub.
    • Set telemetry collection to opt out by default.
  • Networking and proxy support
    • Added support for HTTP, HTTPS, SOCKS, and PAC proxies.
    • Added support for authenticated proxies, including Kerberos and SPNEGO.
    • Added proxy configuration precedence through command-line arguments, environment variables, stored settings, and operating system settings.
    • Added
      unity config proxy
      to view, configure, or clear proxy settings.
    • Added proxy diagnostics to
      unity doctor
      and
      unity env
      .
    • Added
      --proxy-disable
      to bypass proxy settings for a single command invocation.
  • CLI behavior
    • Standardized command naming to
      unity <command>
      across the CLI, documentation, and shell completions.
    • Updated
      unity auth status
      to report actual session state through the Session Service.
    • Improved Windows upgrade messaging to provide clearer post-upgrade guidance.
  • Issues fixed
    • Fixed an issue where
      unity install
      could become stuck when resuming a corrupted partial download.
    • Fixed an issue where concurrent
      unity install
      commands could corrupt shared installation data.
    • Fixed an issue on Windows where Visual Studio modules could incorrectly appear as already installed.
    • Fixed an issue where
      unity auth logout
      did not reliably remove stored credentials.
    • Fixed interactive prompts on Windows for module installation confirmation and architecture selection.
    • Fixed an issue where
      unity open
      did not correctly forward
      --args
      to the Unity Editor on Windows.
    • Fixed validation and error handling for
      unity --instance host:port
      .
    • Fixed support for
      --format tsv
      and
      --format ndjson
      in
      unity editors
      .
    • Fixed an issue where unattended installations using
      unity install --accept-eula --non-interactive
      could fail.
    • Fixed template command error handling when no default Editor is configured.
    • Fixed structured output from
      unity status
      when no reachable Editor instances are available.
    • Fixed JSON output formatting inconsistencies for command failures.
    • Fixed JSON output handling for validation errors.
    • Fixed command execution flow to ensure handlers exit correctly after failures.

May 21, 2026

0.1.0-beta.5

  • Service account authentication
    • Added support for Unity service account authentication in
      unity auth login
      .
    • Added support for automatic bearer token generation when
      UNITY_SERVICE_ACCOUNT_ID
      and
      UNITY_SERVICE_ACCOUNT_SECRET
      are set.
    • Added support for unattended authentication workflows in CI environments and automation scenarios.
    • Updated
      unity auth logout
      to clear both service account and OAuth credentials.
    • Added a warning when only one of
      UNITY_SERVICE_ACCOUNT_ID
      or
      UNITY_SERVICE_ACCOUNT_SECRET
      is configured.
  • Unity Pipeline
    • Added
      unity pipeline install
      (
      unity pipe install
      ) to install the Unity Pipeline package into a Unity project.
    • Added automatic project detection for pipeline installation and support for the
      --project-path
      and
      --ssh
      options.
    • Added
      unity pipeline list
      (
      unity pipe list
      ) to display Unity Editor instances and Pipeline package status.
    • Added
      unity command
      (
      unity cmd
      ,
      unity request
      ) to execute commands against connected Unity Editor instances or list available commands.
  • Editor installation and management
    • Enhanced
      unity install --resume
      to recover orphaned partial downloads that result from interrupted installations.
    • Added module discovery support with
      unity install
      and
      unity install-modules
      for Editors registered with
      unity editors add <path>
      .
    • Added support for module discovery on Editors that Unity Hub did not install.
  • Output and integration
    • Added a
      phase: 'download' | 'install'
      field to NDJSON progress output for
      unity install
      and
      unity install-modules
      to distinguish download and installation phases.
    • Improved NDJSON output and CLI progress reporting by grouping module progress under the parent Editor installation.
  • Error handling
    • Standardized CLI error messages across commands.
    • Improved separation between user-actionable errors and internal errors.
    • Updated exit code behavior to align with the exit-code contract introduced in version
      0.1.0-beta.4
      .
  • Issues fixed
    • Fixed an issue where NDJSON progress output for
      unity install
      reset progress from 100 percent to 0 percent during installation.
    • Fixed an issue where
      unity editors --installed
      could hang indefinitely when the release feed was unavailable, such as on split-tunnel VPN connections.
    • Fixed an issue where
      unity install --resume
      could hang when the target Editor was already installed.
    • Fixed orphaned download discovery to detect partial downloads under all supported interruption scenarios.
    • Fixed an issue on Windows where
      unity install
      could incorrectly report that an Editor was already installed immediately after uninstalling it.
    • Fixed an issue where
      unity install -m
      and
      unity install-modules -m
      did not correctly process multiple space-separated module values after a single
      -m
      flag.

May 07, 2026

0.1.0-beta.4

A major release that adds core workflow commands for diagnostics, Editor management, project management, and automation.
  • Diagnostics and inspection
    • Added
      unity doctor
      to generate a diagnostic snapshot that includes platform information, CLI version, installation path, log directory, authentication status, installed Editors, and recent log entries.
    • Added
      unity completion <bash|zsh|fish|powershell>
      to generate shell completion scripts.
    • Added
      unity env
      to display environment variables used by Unity CLI and Unity Hub.
    • Added
      unity logs
      to view and follow Unity Hub log files.
    • Added
      unity editors info <version>
      to display detailed metadata for an installed Editor.
    • Added
      unity releases
      to list available Unity releases from the release feed.
    • Added
      unity modules list <version>
      to display available modules for an Editor version.
    • Added
      unity templates list
      and
      unity templates info <id>
      to list project templates and view template details.
  • Editor management and installation
    • Added
      unity editors add <path>
      to register an existing Editor installation with Unity Hub.
    • Added
      unity editors default [<version>]
      to get or set the default Editor.
    • Added
      unity editors install-path [<path>]
      to get or set the Editor installation path.
    • Added commands to list and install modules for an installed Editor.
    • Added
      unity install --dry-run
      to preview Editor installations.
    • Added
      unity install --force
      to reinstall an Editor that is already installed.
    • Added
      unity install --resume
      to resume interrupted downloads from the local cache.
    • Added
      unity install-modules --dry-run
      to preview module installations.
    • Added prompts to accept module license agreements before downloading modules.
    • Added
      unity cache info
      and
      unity cache clean
      to view and manage the download cache.
  • Project management
    • Added
      unity projects open [<query>]
      to open a project by using a fuzzy-matched project name when no exact path is provided.
    • Added
      unity projects new <name> --template <id> --editor-version <version>
      to create projects non-interactively for scripts and CI workflows.
    • Added
      unity projects pin <pattern>
      and
      unity projects unpin <pattern>
      to manage favorite projects.
    • Added
      unity projects export
      and
      unity projects import
      to export and import project lists in JSON format.
    • Added
      unity projects info <path>
      to display Editor, module, and cloud information for a project.
    • Added
      unity projects upgrade [<path-or-name>] --to <version>
      to upgrade a project to a different Editor version.
    • Added
      unity projects require <module>...
      to verify that required modules are installed for a project.
    • Added automatic Editor version detection for
      open
      ,
      install
      , and
      uninstall
      when no version is specified and the current working directory contains a Unity project.
  • CI and automation
    • Added
      unity run
      to execute projects in batch mode, stream logs, and return the Editor exit code.
    • Added NDJSON progress output for long-running commands, including
      unity build
      and
      unity projects new
      .
  • Output and integration
    • Added a standardized JSON output envelope that includes
      success
      ,
      command
      ,
      data
      ,
      errors
      , and
      warnings
      .
    • Added the
      ndjson
      output format for streaming progress updates from long-running commands.
    • Added documentation for the
      tsv
      output format alongside
      human
      and
      json
      .
    • Added global
      --non-interactive
      ,
      --quiet
      , and
      --no-banner
      options.
    • Added
      -y
      and
      --yes
      options for commands that require confirmation.
    • Added
      -w
      and
      --watch
      options to keep Editor and project lists updated automatically.
    • Added environment variables that mirror global CLI options, including
      UNITY_FORMAT
      ,
      UNITY_QUIET
      ,
      UNITY_NO_BANNER
      , and
      UNITY_NON_INTERACTIVE
      .
      HUB_FORMAT
      remains supported as an alias for
      UNITY_FORMAT
      .
    • Added searchable version selectors for interactive workflows.
    • Extended exit code support to include authentication, network, conflict, usage, and command-specific errors.
  • Platform and extensibility
    • Added
      unity <version> [path]
      as a shorthand command to launch an Editor with an optional project path.
    • Added plugin discovery for executables named
      unity-<name>
      , which Unity CLI exposes as
      unity <name>
      .
    • Added
      unity self-uninstall
      to remove the CLI binary, environment files, and stored credentials.
    • Added
      unity report-bug
      to launch the Unity Hub bug reporter or create a structured bug report.
    • Added
      unity upgrade --rollback
      to restore the previously installed CLI version.
  • CLI behavior
    • Deprecated
      unity implode
      in favor of
      unity self-uninstall
      .
    • Updated automatic update checks to run in the background without blocking command execution.
    • Enhanced
      unity editors list
      to display version aliases, identify the default Editor, and resolve installation paths.
    • Improved
      unity auth login
      for remote and headless environments by displaying the sign-in URL before attempting to launch a browser.
    • Added authentication progress events to JSON output so automation tools can capture sign-in URLs programmatically.
  • Issues fixed
    • Fixed an issue where
      unity auth
      could fail to start the sign-in flow after a fresh installation.
    • Fixed an issue on Windows where
      unity auth
      removed query parameters from the OAuth callback URL, which could prevent sign-in from completing.
    • Fixed an issue on Windows where
      unity upgrade
      could fail to replace the CLI binary.
    • Fixed issues in
      unity projects upgrade
      related to project name lookups, confirmation prompts, and short version aliases.
    • Fixed an issue where
      unity editors info
      did not expand short major-version aliases.
    • Fixed issues in
      unity install-modules
      that prevented correct handling of invalid Editor versions, version aliases, and ambiguous version matches.
    • Fixed an issue where
      unity install --dry-run
      reported incorrect download sizes when the Editor was already installed.
    • Updated
      unity projects require
      to accept a project name in addition to a project path.
    • Fixed an issue where the Windows installer could corrupt the system
      PATH
      .
    • Added ASCII fallback support for terminals that do not support Unicode characters.
    • Routed module installation errors to
      stderr
      to improve scripting and output redirection.
    • Fixed Linux configuration directory inconsistencies between Unity CLI and Unity Hub to keep settings, projects, and Editors synchronized.
    • Fixed startup failures in Bun runtimes that do not support
      mkdtempDisposable
      .
    • Fixed startup failures in packaged Bun binaries caused by an unnecessary runtime dependency on
      @vscode/proxy-agent
      .

April 24, 2026

0.1.0-beta.3

  • Fixed an issue where
    unity install
    ,
    unity install-modules
    , and
    unity auth
    failed with a service resolution error after a fresh installation.
  • Fixed an issue on Linux where the CLI used
    ~/.local/share/unityhub
    for Hub data. The CLI now reads and writes Hub data in
    ~/.config/unityhub
    , which matches the Unity Hub location and keeps projects, Editors, and preferences synchronized between the CLI and Unity Hub.

April 23, 2026

0.1.0-beta.2

  • Added
    unity implode
    to uninstall the CLI. This command removes the installed binary and environment files and clears stored credentials from the operating system keyring. In non-interactive shells, the command requires the
    --yes
    flag and only works on a CLI installed using the official installer.
  • Added
    unity projects create
    to create a Unity project from the CLI.
  • Added
    unity changelog
    to display the release notes for the installed CLI.
  • Added
    unity upgrade --changelog
    to preview release notes for an update without installing it.
  • Added
    unity upgrade --target <version>
    to upgrade to a specific published version instead of the latest version in your channel.
  • Added interactive
    unity upgrade
    which shows release note previews for the target version before confirmation.

April 04, 2026

0.1.0-beta.1

First public beta release of Unity CLI. This release provides a single executable for macOS, Linux, and Windows on x64 and Arm64 architectures. Install Unity CLI by using
install.sh
or
install.ps1
.
  • Authentication: Added
    unity auth
    with secure token storage in the operating system keychain:
    • Keychain on macOS
    • Credential Manager on Windows
    • libsecret on Linux
  • Editor management: Added the following commands:
    • unity editors
      ,
      unity install
      ,
      unity uninstall
      ,
      unity install-modules
      , and
      unity install-path
    • Supports Editor version aliases
    • Installs Editor versions with or without a changeset
  • Project management: Added the following commands:
    • unity projects
      to list, add, remove, and create projects
    • unity open <path>
      to open a project
    • Supports bare-path syntax, such as
      unity ./MyProject
  • Upgrade management: Added
    unity upgrade
    . Automatically selects the appropriate update channel based on the installed version (stable or prerelease).
  • Localization: Added the
    unity language
    command.
    • Added support for 13 locales
  • Output formats: Added the global
    --format <human|json|tsv>
    flag for machine-readable output. Suppresses the interactive banner for JSON and TSV output and when output is piped.
  • Verifiable downloads: Added SHA-256 checksums for all platform binaries