Documentation

Unity command-line interface (CLI)

Download Unity Hub

Unity command-line interface (CLI)

Unity CLI release notes for October 2026

Learn about the Unity CLI releases in October 2026.
Read time 119 minutesLast updated a day ago

This page contains the release notes for the Unity CLI versions released in October 2026, from newest to oldest.

1.0.0-beta.15

Release date: October 29, 2026
  • Security
    • Linking a project to Unity Version Control now sends the repository request only to the organization it names, even when the organization's name contains a slash, a question mark or dots.
    • The CLI no longer runs a program found through a relative
      PATH
      entry such as
      node_modules/.bin
      . Only absolute
      PATH
      entries are searched, so a cloned repository cannot put its own
      unity
      ,
      claude
      ,
      zip
      or
      tar
      ahead of the real one.
    • Skill installs and refreshes (global and
      --local
      ) now refuse a skill folder that contains a symbolic link or junction as a subfolder, on every platform. Before, a repository could use one to make the install write or delete files outside the project.
    • unity install --resume
      no longer resumes a paused Editor download on Windows, or as root (for example under
      sudo
      ), when the current Unity release data doesn't list that Editor or gives no checksum for it. Start a fresh install instead.
    • unity install-modules
      ,
      unity editor module add
      and
      unity install --resume
      now check a module's download against the current Unity release data before installing it on Windows, and on every platform when the module runs its own installer command. A module that can't be checked, for example while offline, isn't installed.
    • unity install --resume
      now takes a paused Editor download's address from the current Unity release data when it lists that version, and on Windows doesn't resume one it can't check.
    • unity install
      and
      unity install-modules
      no longer reuse or resume a file already in the download folder for a download the release data gives no checksum for. They download it again from the start, so a file someone else placed there is never installed in its place.
    • sudo unity install
      and
      sudo unity install-modules
      on macOS and Linux now check and install a copy of each download kept in a folder only root can open, so another program running as you can no longer swap the file between the checksum check and the install. As root, archives no longer restore their own file owners or permissions, and
      tar
      and
      unzip
      come only from the system folders, never from your
      PATH
      .
    • unity ci init
      workflows now run
      unity license activate
      with the serial in the step environment, and mask it in the GitHub Actions log, so the serial no longer appears in the process list. The service-account secrets are set only on the steps that use them, not on the whole job.
    • unity build
      reads the Android keystore and key alias passwords from
      UNITY_ANDROID_KEYSTORE_PASSWORD
      and
      UNITY_ANDROID_KEY_ALIAS_PASSWORD
      when you pass no
      --android-keystore-password
      or
      --android-key-alias-password
      . The flags still work and take precedence.
    • The Unity Editor that
      unity build
      ,
      unity test
      and other batch commands start no longer inherits
      UNITY_GITHUB_TOKEN
      or
      UNITY_GITLAB_TOKEN
      .
    • Crash reports no longer include your account name, your project's name, or the folders of a file outside your home directory. A path outside your home keeps only its file name, and your home directory reads as
      ~
      wherever it is.
    • unity mcp
      now cleans every text in the tool schemas it passes from the Unity Editor to your AI agent, not only the tool descriptions, and caps their size. It also refuses a call to a tool the Editor did not list, and stops reading an oversized tool catalog.
    • Unity Version Control workspace names made from a repository name now replace control characters and drop leading dashes, so a crafted repository name can no longer be read as a command option.
  • Added
    • unity bug
      can file an issue against a plugin:
      --area
      takes a plugin's name, such as
      ugs
      or
      plastic
      , and on a terminal the area question offers each plugin you have installed. A plugin area attaches that plugin's newest log files, redacted like the other logs, and every report now lists your installed plugins and their versions.
    • unity doctor
      names where each installed plugin writes its logs, under the external components, and as
      logDirectories
      in
      --format json
      .
    • unity license server health
      asks your floating license server how it is, directly on its
      /v1/status
      endpoint. It needs no sign-in and no licensing client.
    • Plugins now receive what
      unity
      knows when it runs them: the output format, whether they may prompt, the current Unity project and its Editor version, the active Unity Cloud organization and project, the signed-in user (never a token), whether a person, a CI system or an AI agent is running it, and the analytics and crash-report settings, as
      UNITY_CLI_CTX_*
      environment variables and one
      UNITY_CLI_CTX_JSON
      document.
      UNITY_CLI_INVOKED_AS
      and
      UNITY_CLI_CORE_VERSION
      now reach every plugin, not only built-in tools.
    • unity projects audit
      opens Project Auditor in your project's running Editor, ready for you to run the analysis. It first installs or updates Project Auditor and its rules package when the Editor needs them, then opens the window on the page for
      --workflow
      (
      upgrade
      by default, or
      optimization
      ,
      urp
      or
      coreclr
      ).
    • unity setup qwen
      installs Unity's agent plugin into Qwen Code by running
      qwen extensions install Unity-Technologies/unity-agent-plugin:unity --consent
      , then
      qwen extensions enable unity
      . Like
      unity setup codex
      , it reports an existing install instead of reinstalling (one Qwen Code has disabled for the current folder counts as not installed, and is turned back on), takes
      --dry-run
      and every output format, and fails with
      QWEN_NOT_FOUND
      when
      qwen
      isn't on your PATH.
    • unity skill install opencode
      installs the Unity skills into OpenCode, in
      ~/.config/opencode/skills
      , or
      .opencode/skills
      with
      --local
      . OpenCode also loads
      .claude/skills
      and
      .agents/skills
      , so when one of those already holds a skill, it warns and skips it rather than loading two copies; pass
      --yes
      to install it anyway.
    • unity install --download-only
      downloads and verifies an Editor and its modules into the Hub's download folder without installing anything. With
      --operating-system
      , it can fetch another operating system's Editor, which
      unity install
      refused before.
    • unity auth token
      prints an access token from your CLI sign-in, alone on stdout, so a script or another tool can call Unity services without its own sign-in flow:
      TOKEN=$(unity auth token)
      . An expired token is refreshed first, a service account gets a token for its credentials, and
      --json
      adds the expiry.
    • unity mcp --cli-tools
      adds read-only tools for status, installed editors, projects, releases and doctor to the MCP server, so a client with no shell, such as Claude Desktop, can call them with no Editor running. Each answers with the command's JSON output.
    • unity mcp
      lists four tools for detached Editor jobs next to the Editor's own, so an agent can run work that takes longer than a tool call may wait:
      job_start
      starts one of the Editor's tools as a job, the way
      unity command <name> --detach
      does,
      job_status
      reads the job,
      job_wait
      waits up to
      timeout
      seconds (30 by default, at most 45) and says whether it is still running, and
      job_cancel
      asks the Editor to cancel it.
      --exclude-tools "job_*"
      hides them.
    • install.sh
      and
      install.ps1
      now set up the coding agents they find on your machine right after installing, then show your account, license and Unity Editors. In an interactive terminal they first list the agents found, all selected, so you can untick any to leave alone.
    • unity skill install <client>
      installs the
      new-unity-project
      skill beside
      unity-cli
      , so clients that read only skills can guide a new project from an idea to a running one. A client whose plugin already provides
      unity-cli
      keeps leaving
      new-unity-project
      to the plugin too when that plugin also ships it, unless you pass
      --yes
      .
    • unity setup all
      sets up every coding agent it finds, bare
      unity setup
      on a terminal lets you pick which ones from a checklist, and both finish with a state block showing your account, license, editors and connectivity, with the next command for anything blocking (machine formats carry each blocker as a
      notifications
      entry).
    • unity projects create --install-editor
      installs the Editor version when it isn't installed, waits for the install, then creates the project.
      --module
      and
      --accept-eula
      pass modules and their license agreements to that install.
    • unity projects create
      adds Cinemachine to every new 3D project, at the newest release that supports the project's Unity version. 2D projects and templates that already include it are left as they are.
      --bare
      leaves it out.
    • unity projects create
      turns on Run In Background in the new project's Player settings, so Play mode keeps running while the Editor is not focused.
      --bare
      leaves it out.
    • unity projects create
      sets up anonymous player sign-in when it links the project to Unity Cloud. It adds the Authentication package and a startup script that signs the player in before the first scene loads, so cloud save, telemetry and other services have a player ID.
    • unity docs cache add
      downloads a version's documentation as Markdown for offline use: the manual by default, and the scripting API reference too with
      --api
      .
      unity docs --content
      then reads cached pages without the network, and
      unity docs toc
      and topic lookup use the cached page list when docs.unity.com can't be reached.
    • unity setup copilot
      installs Unity's agent plugin, with its Unity skills, into GitHub Copilot CLI by running
      copilot plugin marketplace add Unity-Technologies/unity-agent-plugin
      , then
      copilot plugin install unity@unity-agent-plugin
      . Like
      unity setup codex
      , it reports an existing install instead of reinstalling, and takes
      --dry-run
      .
    • unity assets import --include <glob>
      imports only part of a package: the entries whose path matches, everything under a matching folder, and the folders above them. Repeat
      --include
      to select more, with a glob (
      *
      and
      ?
      stay inside one folder,
      **
      spans folders) or a plain path such as
      Assets/Art/Hero.png
      .
    • The
      --help
      of every
      unity collaboration
      command now ends with examples you can copy.
    • The
      --help
      of every
      unity vcs
      and
      unity pipeline
      command now ends with examples you can copy.
    • The Linux deb and rpm packages now install a
      unity
      man page, so
      man unity
      lists every command, its options and the exit codes. Each release also publishes it next to its downloads as
      unity.1.gz
      .
    • unity commands --json
      now reports each command's
      stability
      :
      stable
      ,
      preview
      or
      deprecated
      . A bare command group's
      --json
      answer carries it too.
    • A project can pin the unity CLI versions it supports with
      cli.version
      in
      ProjectSettings/UnityCliConfig.json
      , an npm-style range such as
      "^1.0.0"
      . A command run in the project with a CLI outside that range prints a warning, and in CI it stops before doing anything, with exit code 1 and error code
      CLI_VERSION_OUT_OF_RANGE
      .
    • unity assets inspect
      says whether a package is signed:
      signed
      in
      --format json
      and
      ndjson
      , and a
      Signed:
      line in the human output. It checks that a signature is present, not that it is valid.
    • unity assets import
      warns when a package has no signature and reports
      signed
      in
      --format json
      and
      ndjson
      . Pass
      --require-signed
      to refuse an unsigned package before the Editor starts.
    • unity mcp configure
      now finds entries left by the deprecated Unity MCP server from the AI Assistant package and offers to replace them, so the client keeps one Unity server.
      --replace-legacy
      replaces them without asking,
      --dry-run
      shows what would change, and
      claude-code
      prints the
      claude mcp remove
      command to run.
    • unity install <version> --set-default
      makes the installed Editor the default once the install succeeds, so
      unity install latest --set-default
      replaces running
      unity install latest
      and then
      unity editors default latest
      . The json and ndjson result report the stored version as
      data.defaultVersion
      .
    • unity doctor --ci --skip-license
      skips the license check, for runners that get a license another way.
    • On macOS, each release now also publishes a notarized installer,
      unity-darwin-arm64.pkg
      and
      unity-darwin-x64.pkg
      , with the notarization ticket attached. It is the installer the Homebrew cask will use, and the cask moves to it in a follow-up.
    • unity plugin install
      and
      unity plugin upgrade
      show a plugin's license terms and ask you to accept them before anything downloads, for a plugin that has terms. A run that cannot ask, such as one with
      --non-interactive
      , stops with an error that names
      --accept-eula
      .
    • unity setup claude
      ,
      unity setup codex
      ,
      unity setup grok
      and
      unity setup copilot
      offer to install the Unity skills instead when the agent's CLI is missing or its plugin can't be installed.
      --yes
      installs them without asking.
    • unity skill install <client>
      installs every Unity skill from the Unity-Technologies/skills repository, at the commit this CLI release pins, beside the
      unity-cli
      skill. Each skill is checked against the pin before anything is written, and the source can't be redirected.
    • unity skill show --skill new-unity-project
      prints the new-unity-project skill the CLI embeds, the same way
      unity skill show
      prints the unity-cli skill.
      --path
      and
      --list
      work with it too.
    • unity pipeline cloud-build
      and
      unity pipeline automation
      now start, follow and act on work:
      builds start
      ,
      cancel
      ,
      steps
      ,
      failures
      ,
      artifacts
      ,
      log --follow
      and
      download
      , and
      pipelines trigger
      ,
      jobs watch
      ,
      logs
      ,
      terminate
      ,
      resume
      ,
      approve
      and
      reject
      .
      builds cancel
      ,
      jobs terminate
      and
      jobs reject
      ask first unless you pass
      --yes
      .
  • Changed
    • unity command
      reaches the Editor through the Pipeline package's own connection when the Editor offers one, and over HTTP otherwise. An Editor whose Pipeline HTTP server is turned off now answers too.
    • unity status
      reports an Editor whose Pipeline HTTP server is turned off instead of showing it as unreachable, and
      unity pipeline editors
      shows each way to reach the Editor, with a
      pipelineServer.endpoints
      array in its JSON.
    • unity pipeline upgrade
      now moves a project to the Pipeline package's latest published version, so a new release is available as soon as it is published, without a CLI update.
      unity pipeline install
      ,
      unity pipeline list-versions
      ,
      unity pipeline editors
      and the Pipeline step of
      unity projects create
      resolve versions the same way.
    • When
      unity cloud org
      ,
      unity cloud project
      or
      unity cloud status
      fails, it now prints the usual error details (the error code, the log file, and how to get more detail) and records the failure in the log, so it shows up in
      unity logs
      and
      unity bug
      . JSON output and exit codes are unchanged.
    • When a
      unity collab
      command fails, it now prints the usual error details in
      --format human
      (the error code, the log file, and how to get more detail) and records the failure in the log, so it shows up in
      unity logs
      and
      unity bug
      . JSON output and exit codes are unchanged.
    • When
      unity pipeline automation
      or
      unity pipeline cloud-build
      fails, it now prints the usual error details (the error code, the log file, and how to get more detail) and records the failure in the log, so it shows up in
      unity logs
      and
      unity bug
      . JSON output and exit codes are unchanged.
    • unity skill install
      now recommends
      unity setup all
      to set up every agent client on the machine, in place of
      npx skills add Unity-Technologies/skills
      .
    • Without
      --editor-version
      ,
      unity projects create
      uses the default Editor version, else the newest installed Editor, else the latest Unity release when no Editor is installed.
      --editor-version latest
      and
      lts
      now name the newest official and LTS releases rather than the newest installed Editor.
    • unity projects create
      checks its prerequisites before it asks anything, downloads a template or starts the Editor: an active license always, and, while the project links to Unity Cloud, a signed-in account, a reachable network and a chosen organization when you belong to several (pass
      --cloud-org
      to choose).
      --no-cloud
      removes the Unity Cloud ones;
      --bare
      does not.
    • unity auth login
      now ends with a short summary of your machine: your account, organization, license, installed Editors and the next command to run. With
      --format json
      or
      --format ndjson
      , anything that blocks you from creating a project, such as no installed Editor or an unreachable network, is listed in the result's
      notifications
      .
    • More commands take the project as
      --project-path
      :
      assets export
      ,
      assets import
      and
      auth default
      take it instead of
      --project
      , and
      templates create
      ,
      templates pack
      ,
      projects link
      ,
      projects unlink
      and the
      vcs
      commands that act on a project accept it next to their path argument. These commands, and
      recompile
      , also read
      UNITY_PROJECT_PATH
      when no path is given.
    • build run
      takes the build to launch with
      --build-path
      , and
      projects clone
      takes the folder of the project to register with
      --subpath
      .
    • pipeline install
      and
      pipeline upgrade
      report a folder that isn't a Unity project with the same message as the other commands that connect to an Editor.
    • unity templates
      ,
      unity templates info
      ,
      delete
      and
      edit
      take the Editor version as
      --editor-version
      , like the rest of the CLI, and resolve
      lts
      and
      latest
      through the release catalog as
      unity install
      does.
    • unity pipeline cloud-build targets
      ,
      tooling os
      and
      tooling platforms
      filter by Editor version with
      --editor-version
      .
    • -e
      means
      --editor-path
      on every command.
      unity vcs merge-setup
      and
      unity vcs resolve
      now accept it too.
    • UNITY_EDITOR_VERSION
      sets the Editor version on every command that takes
      --editor-version
      :
      build
      ,
      docs
      ,
      install-modules
      ,
      projects create
      ,
      templates
      ,
      vcs merge-setup
      and
      vcs resolve
      now read it as well. The
      pipeline cloud-build
      filters don't.
    • An exported
      UNITY_EDITOR_VERSION
      or
      UNITY_ARCHITECTURE
      now steers
      unity build
      , as it already steered
      run
      and
      test
      : the flag wins, then the variable, then the project's version.
      build
      prints one line naming the variable when it does.
    • Passing a version to
      --editor-path
      fails with a hint to use
      --editor-version
      .
    • releases
      and
      cloud projects
      take
      --offset <n>
      to start a page part way through the results, the spelling every offset-paged list uses. The
      releases
      footer now says
      Use --offset <n> to see more
      .
    • Every short flag now means one option on every command:
      -f
      is
      --force
      ,
      -i
      is
      --installed
      ,
      -l
      is
      --list
      ,
      -m
      is
      --module
      ,
      -o
      is
      --output
      and
      -r
      is
      --releases
      . Options that used those letters for something else show only their long name in help:
      --follow
      ,
      --input
      ,
      --log-file
      ,
      --modified
      ,
      --reset
      and
      --output-path
      .
    • Every
      --format ndjson
      stream now ends with one
      {"type":"result"}
      frame. Single-record commands such as
      unity env
      ,
      unity doctor
      ,
      unity context current
      ,
      unity editors default
      ,
      unity install-path
      and
      unity diagnose update
      answer with that frame alone, its
      data
      the same as
      --format json
      , and listings such as
      unity logs
      ,
      unity skills
      ,
      unity command
      and
      unity install-modules --list
      write their rows and then the frame.
    • Every row in an ndjson listing now starts with
      "type":"row"
      , so a script can tell a row from a
      progress
      or
      result
      frame.
      unity templates
      rows keep their own
      type
      (the template type) and carry no
      "row"
      marker.
    • Under
      --format tsv
      , the default when stdout is redirected, single-record commands such as
      unity env
      ,
      unity doctor
      ,
      unity config proxy
      ,
      unity install-path
      and
      unity editors default
      print a
      key<TAB>value
      table with one row per field, named as in
      --format json
      . A script that reads
      unity install-path
      from a pipe now gets that table, with the path on the
      path
      row; use
      --format json
      and read
      data.path
      instead.
    • unity logs --format tsv
      and
      unity skills --format tsv
      now start with a header row, and
      unity skills --format tsv
      lists your installs instead of printing nothing.
    • The
      command
      field of
      --format json
      and
      --format ndjson
      output is now the full command path, such as
      projects list
      or
      cloud org list
      , the same in both formats and on success and failure. A script that matched on the old short names, such as
      projects
      or
      proxy
      , needs the full path instead.
    • Every listing now returns its rows in one shape. In
      --format json
      ,
      data
      holds the rows as
      items
      , with
      total
      (
      null
      when the service doesn't report one),
      nextPage
      or
      nextCursor
      for the next page (
      null
      on the last), and
      partial
      (
      true
      when the listing stopped before it finished).
    • unity doctor
      ,
      unity env
      ,
      unity diagnose proxy
      ,
      unity diagnose accelerator
      and
      unity diagnose update
      show their status as aligned label and value lines, in every language. The copy that
      unity diagnose proxy
      writes to the logs directory keeps its layout.
    • unity pipeline editors
      lists the open Unity Editors in a table, with any notes and the next step under it. When no Editor is open, it says so and suggests what to do.
    • With
      --format tsv
      , which is also the default when output is redirected,
      unity cache info
      prints one
      key
      and
      value
      line per field, named like its JSON fields, and
      unity license status
      prints the active licenses as a table with a header row, instead of sentences.
    • unity cache info
      ,
      unity auth status
      ,
      unity license status
      ,
      unity analytics status
      ,
      unity config update-check
      ,
      unity config proxy
      and
      unity language
      show their status as aligned label and value lines, in every language.
      unity license status
      lists active licenses in a table, and
      unity language
      lists the available languages in one.
    • unity projects
      prints a table with a header in human output, also when its output is redirected with
      --format human
      . The columns that
      --verbose
      ,
      --editor-version
      ,
      --modified
      ,
      --cloud
      ,
      --pipeline
      and
      --vcs
      turn on are now table columns.
    • The anonymous once-per-run usage ping now stops when you turn analytics off (
      unity analytics opt-out
      , answering no at the first-run prompt, or turning it off in the Hub while signed in) and when
      DO_NOT_TRACK
      is set to any value but empty,
      0
      or
      false
      .
      UNITY_NO_CLI_INVOKED_TELEMETRY
      still stops it too.
    • The install scripts now install the latest stable release and no longer fall back to the latest beta. To install a beta, set
      UNITY_CLI_CHANNEL=beta
      before running the installer.
    • unity self-update
      keeps the last 3 versions it replaced instead of only one, and
      unity self-update --rollback <version>
      restores a specific one.
      --rollback
      on its own still restores the most recent.
    • unity projects create
      ,
      unity projects link
      and the
      unity language
      picker no longer ask questions under
      --non-interactive
      , with
      UNITY_NON_INTERACTIVE
      set, or in CI, even on a terminal.
      unity projects create --vcs uvcs
      without
      --vcs-region
      then fails with an error naming
      --vcs-region
      instead of showing the region picker.
    • On a terminal,
      unity editors upgrade
      with no Editor named asks again which installed Editor to upgrade,
      unity editor module add
      asks you to accept a module's license terms (as
      unity install-modules
      does),
      unity open
      and
      unity projects open
      ask which project or Editor to use when several match, and the
      unity collab
      delete commands ask you to confirm. In CI nothing asks, even on a terminal:
      unity install-modules
      and
      unity editor module add
      then need
      --accept-eula
      , and a collab delete needs
      --non-interactive
      .
    • unity mcp
      now lists a title and MCP behavior hints for every Unity tool, so an agent client can run reads such as
      scene get_hierarchy
      without asking and still ask before anything destructive. A tool that deletes or clears data, takes
      confirm
      , saves a capture to a path you pick, or runs your code (
      script eval
      ,
      script eval_file
      ,
      script run
      ) is marked destructive.
    • Unity CLI now tells you once, on its first run, that it sends crash reports and an anonymous usage ping, how to turn each off, and where to read the privacy policy. Runs in CI, scripts and agents get the same notice as one line on stderr.
    • Listing no longer needs a
      list
      word:
      unity projects
      ,
      unity templates
      ,
      unity config
      ,
      unity modules <version>
      and
      unity editors modules <version>
      list on their own, with the same options and output, where they used to print their help. Bare
      unity modules
      and
      unity editors module
      now exit 2 with the missing
      <version>
      error instead of printing help at exit 0.
    • The same goes for
      unity auth accounts
      (the stored accounts),
      unity pipeline editors
      (the running Editors),
      unity cloud orgs
      ,
      unity cloud projects
      ,
      unity docs cache
      ,
      unity vcs uvcs reviews
      ,
      unity collab annotations
      ,
      unity collab attachments <annotationId>
      ,
      unity collab jira issues
      , and the
      unity pipeline automation
      and
      unity pipeline cloud-build
      listings, such as
      unity pipeline automation jobs
      and
      unity pipeline cloud-build builds
      . Bare
      unity collab attachments
      now exits 2 with the missing
      <annotationId>
      error.
    • unity projects link cloud
      now describes itself as linking or connecting a local project to Unity Cloud, so
      unity commands --grep "connect project cloud"
      and
      unity command --query "connect project cloud"
      find it first.
    • A search that finds nothing (
      unity commands --grep
      and
      unity command --query
      ) now ends with a line saying that multi-step workflows are documented in the
      unity-cli
      skill, and that
      unity skill show
      reads it.
      --format json
      carries the line in
      hint
      , and the exit code stays 0.
    • unity recompile --format json
      and
      --format ndjson
      now write the top-level
      errors
      and
      warnings
      arrays every other command writes. Each error is
      {code, message}
      with the compiler code (such as
      CS1002
      ), and each warning is a
      file(line,col): message
      string, so a script can read compile results the same way for every command.
    • unity projects create
      no longer adds the Pipeline package on Unity 6000.5.0 to 6000.5.2, where it can't start, and tells you to update the Editor to 6000.5.3f1 or later.
      unity status
      on a project open in one of those Editors says the same instead of telling you to wait.
    • unity plugin install
      and
      unity plugin upgrade
      now install the agent skill a plugin ships into every AI client that already has the Unity skill, from
      unity skill install
      or the Unity agent plugin. Before, they only printed a hint to run
      unity skill install
      .
    • unity setup all
      gives clients that take only skills the full set of Unity skills, not just
      unity-cli
      .
  • Removed
    • The
      list
      subcommand of these groups is gone.
      unity projects list
      ,
      unity editors list
      ,
      unity cloud org list
      and the rest now fail as an unknown command, exit 2, and suggest the bare group instead.
    • Breaking:
      unity projects new
      is removed. Use
      unity projects create <name> --no-cloud
      , which also never links to Unity Cloud.
    • Breaking:
      unity list
      is removed. Use
      unity command
      , which lists the tools the connected Editor offers.
  • Fixed
    • unity auth login
      now stays signed in on a Linux container or headless machine that has no Secret Service and blocks the kernel keyring, such as a Docker container with the default seccomp profile. The CLI saves the sign-in to a protected file in your user data directory, readable only by your user, and tells you once when it does.
    • The Windows file properties, the Linux deb and rpm packages and the npm packages now name Unity Technologies as the copyright holder and carry the Unity Terms of Service license.
    • On a machine without Unity Hub, a
      cloudConfig.json
      left by an older Hub or CLI no longer leaves the Editor on built-in default service URLs (the
      environment-mismatch
      warning in the CLI log). The CLI now tags and refills a cache that has no environment tag, keeping any keys it does not know.
    • unity open
      and the other Editor-launching commands now give the Editor the
      seatinfourl
      ,
      unauthenticatedurl
      ,
      perf-events
      and
      socialdashboard
      service entries, as Unity Hub does. The CLI used to refuse them as unsafe URLs even though Unity's own service config serves them that way.
    • While the Editor service is running, the CLI now fetches Unity's service config again every 15 minutes, as Unity Hub does, so the
      cloudConfig.json
      it wrote on a machine without Hub no longer goes stale. A cache Unity Hub wrote is still never touched.
    • unity cloud orgs
      ,
      unity cloud org set-default
      and
      unity cloud projects
      no longer fail with "Unity-token exchange failed (Request failed with status code 401)" for a signed-in user whose access token the server stopped accepting before it expired. The CLI now refreshes the session and tries once more, and only asks you to run
      unity auth login
      when that fails too.
    • unity vcs conflicts
      no longer lets color or hide codes inside a file path change how the human and tsv tables look. The codes are removed from the path.
    • unity shell --protocol ndjson
      answers a request line with a repeated key or an unpaired surrogate escape with a
      BAD_REQUEST
      frame and keeps reading, instead of ending the session with an error.
    • Commands no longer pause for up to two seconds on their way out when usage data is turned on and the network is slow or unreachable. Sending usage data now gives up after half a second, and
      DO_NOT_TRACK
      skips it entirely.
    • unity skill install claude-code
      and
      unity skill install codex
      now install the skills your installed plugins ship even when an agent plugin already provides the Unity CLI skill. Before, a non-interactive run, such as an agent's headless mode, skipped those skills without saying so.
    • unity shell
      on a terminal remembers your commands across sessions again: press Up to recall them. Secret option values and secrets in URLs are never saved.
    • unity shell
      on a terminal completes commands, options and values with Tab again (press Tab twice to list the choices), and suspends with Ctrl-Z on macOS and Linux.
    • unity install
      refuses a module whose install or rename paths point outside the Editor's install folder, and an Editor version that is not a single folder name. A catalog can no longer make an install write or delete elsewhere.
    • Catalog, manifest and API responses over 64 MB are refused instead of being read into memory, and the Android license page is scanned in one pass.
    • unity build
      ,
      unity run
      ,
      unity test
      ,
      unity assets export
      ,
      unity assets import
      ,
      unity templates create
      and
      unity templates pack
      no longer refuse a project as already open because of a leftover
      Library/EditorInstance.json
      whose process ID now belongs to another program, which happened in containers after an Editor was killed. When the refusal comes from that file, the message names it so you can delete it if no Editor is running.
    • unity build
      and
      unity batch build
      no longer run programs named by a project's git configuration (
      core.fsmonitor
      , hooks, the pager, file filters other than Git LFS, and an ssh command reached by fetching objects a partial clone lacks) when they read its revision and version. They never fetch, and they check each submodule with the same safe read, so a submodule at an unrecorded commit or with uncommitted edits still counts as a change.
    • With usage analytics turned on, creating a project from a downloaded or custom template no longer reports the template's file path. It reports the template's package name, or
      custom
      when the template has none.
    • On Linux,
      unity vcs
      conflict and diff staging, UVCS check-ins, and
      unity publish
      now keep their temporary files readable only by you, and refuse a folder or link another account planted in the shared temp directory.
    • unity install --download-directory
      and
      unity install-modules --download-directory
      on Windows now use an absolute path such as
      C:\ws\editor
      or
      C:/ws/editor
      as given, instead of joining it onto the current folder.
    • unity build --create-profile
      reads
      UNITY_ARCHITECTURE
      when
      --architecture
      isn't given, and refuses an architecture it doesn't know with the same usage error as the flag, instead of starting the Editor.
    • unity --version
      honors a
      --format
      or
      --json
      typed after it, as
      unity version
      does:
      unity --version --format ndjson
      now prints one result frame instead of the bare version line.
    • unity docs --package <name> --content
      prints the package's local Markdown, the same as
      unity docs <name> --content
      , instead of trying to open a browser.
    • On a machine licensed by a floating license server,
      unity license status
      and
      unity doctor --ci
      no longer report that no license is available before the Editor has leased a seat. When the server answers as healthy, both succeed and say the Editor leases a seat when it starts.
    • unity license server status
      reports a floating license server as reachable when the server answers as healthy but the licensing client cannot read its seat usage, which happens when nobody is signed in.
    • A successful
      unity build
      no longer lists the Editor's "Access token is unavailable" licensing line as an error.
    • unity command --query
      with a listing option such as
      --limit
      and no connected Editor now ends
      --format ndjson
      output with its result frame, which carries the search hints. It used to print nothing.
    • unity mcp
      now lists every Editor tool under a name of its own: the full command name with each space and dot written as
      _
      , such as
      settings_player_get
      and
      script_eval
      . On
      com.unity.pipeline
      0.9, several groups shared one name (
      get
      ,
      set
      ,
      add
      ), so clients dropped tools, a call could fail with "names several commands", and some clients rejected the whole server.
    • unity close
      now explains why it could not close an Editor when its output is redirected, for example that the project needs the
      com.unity.pipeline
      package or
      --force
      , instead of reporting only that the Editor was not closed.
    • A
      cloud
      ,
      collab
      ,
      pipeline automation
      or
      pipeline cloud-build
      command that fails because the server rejected your input (HTTP 400, 404, 409 or 422) no longer sends a crash report or points you at
      unity bug
      . The error message, the exit code and the json and ndjson output are unchanged.
    • A command that fails because you are signed out or your session expired no longer sends a crash report. The error message, the sign-in hint and the exit code are unchanged.
    • unity projects
      and
      unity recompile
      JSON and NDJSON output now escapes the C1 control characters (U+0080 to U+009F) like the other control characters, so a project path or compiler message cannot send an escape sequence to a terminal that honors them. Parsed values are unchanged.
    • unity pipeline
      no longer reports a Unity token exchange that returned an empty token, or got no answer, as being signed out. An empty token, or an answer it could not read, now offers the
      unity bug
      report like any other unexpected failure.
    • unity plugins
      no longer shows an out-of-date version for a plugin such as
      ugs
      when its saved copy of the plugin registry is more than a week old and this CLI already knows a newer version. The CLI's background refresh now also renews that saved copy once a week when no plugin is installed.
    • On Windows,
      unity
      now sends a crash report when it crashes, as it does on macOS and Linux. It was silent there before, so Windows crashes never reached us.
    • unity projects info
      shows the active platform for projects saved by Unity 6000.7 betas and newer Editors. Before, the platform was missing for those projects.
    • On Windows,
      unity
      stays signed in after a restart when the Hub you first signed in with was 3.21 or older.
    • unity build
      now shows why a player build failed, such as an output path that already exists as a folder, instead of listing only licensing log lines.
    • On Linux,
      unity status
      ,
      unity editors running
      and
      unity pipeline editors
      list an Editor that Unity Hub 3.21 or older started through its per-version launch link.
    • unity projects export --format ndjson
      prints one JSON line with
      "type":"result"
      , so an ndjson reader can parse the export.
    • unity install-modules
      with no Editor installed now points you to
      unity install <version>
      instead of a command that does not exist.
    • unity releases --limit
      and
      --offset
      now refuse a value that is not a whole number, such as
      1.5
      or
      5abc
      , with a usage error instead of reading it as 1 or 5.
  • Deprecated
    • --project
      on
      assets export
      ,
      assets import
      and
      auth default
      ,
      --path
      on
      build run
      , and
      --project-path
      on
      projects clone
      still work, and print a warning naming the new spelling.
    • --editor
      and
      -e
      on
      unity templates
      ,
      -e
      on
      unity install-modules
      , and
      --unity-version
      on the
      pipeline cloud-build
      filters still work, and print a warning naming
      --editor-version
      . In
      --format json
      the warning is in the envelope's
      warnings
      .
    • --skip
      on
      releases
      and
      cloud projects
      still works, and prints a warning naming
      --offset
      . In
      --format json
      the warning is in the envelope's
      warnings
      .

1.0.0-beta.14

Release date: October 21, 2026
  • Security
    • The recent log in
      unity doctor
      now shows only the command you ran, such as
      projects open
      . Also, every argument you passed reads
      <redacted>
      , so paths, project names and option values stay out of a report you paste. The log file itself doesn't change.
    • 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 and links to files inside the project are skipped.
    • 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, plug-ins, 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's 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's made with the same key that signs the CLI on Windows, so the Unity auth broker can confirm it's 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 and no longer follow 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 its run.
    • 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
      now only accept gzipped (
      .tgz
      ) template archives. A plain
      .tar
      that used to work is refused as corrupt.
    • Template downloads ignore catalog entries whose name or version isn't 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 it found no trusted
      pkexec
      .
    • 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 is unreachable, 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 and doesn't stop at the Editor's upgrade dialogs. As a result, 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, and doesn't change the install path or add 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 plug-in 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 plug-in 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 rather than make a guess. 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's 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 plug-in'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 the Editor in batch mode, 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 plug-in 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 plug-in.
  • 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 plug-ins 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 isn't 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 aren't 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 isn't 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're 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're 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 it only affects a damaged or hostile archive.
    • 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 can't 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 wasn't saved, and change nothing. They also refuse when
      user-settings.json
      repeats a key or can't be read.
    • unity skill install codex
      now checks for the Unity plug-in that
      unity setup codex
      installs. When the plug-in 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 isn't 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 plug-in 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 plug-in, 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, or when its list of downloaded templates can’t be reset or repeats a key, instead of printing a raw system error. For example, a folder they can’t create now shows
      Could not create the templates folder (PermissionDenied).
      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, 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's 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's 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's not installed, and stop if the download redirects anywhere else. The client is checked against its published checksum before it's 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 can't 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 isn't 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's not 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 didn't 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's 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's 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
      don't change.
    • 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're 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 you pass
      --no-log-proxy
      .
    • unity commands --grep <term>
      and
      unity command --query <term>
      are now one search over the CLI's commands, its plug-ins 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's 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
      doesn't 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.
    • On 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 plug-in from Anthropic's official Claude Code marketplace, as
      unity@claude-plugins-official
      . A plug-in 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
    • Removed the
      UNITY_CLI_FTUE
      variable and agent first-session ("paved") mode. Machine output no longer carries
      "paved"
      , and
      unity projects create
      no longer writes
      UserSettings/UnityCliPaved.json
      or reports
      pavedSettings
      .
    • Removed
      unity serve
      ; 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's none for it: on Linux arm64 that's 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, plug-ins 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 plug-in IDs that left some out. They point to
      unity plugin list
      , which shows every plug-in 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 plug-in 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 deleted or moved directory 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's 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're 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
      aren't 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 in that folder 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
      aren't 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's 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's held while it's fresh and cleared once it's 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 plug-in 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're signed out only when your sign-in has 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 plug-in, that plug-in'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's 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 can't decode. The last value of a repeated key wins.
    • unity editors add
      and
      --editor-path
      on macOS reject an Editor whose signature check doesn't 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's one administrator prompt for
      apt
      ,
      dnf
      ,
      pacman
      ,
      zypper
      or
      apk
      , which a run that's 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 aren't 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're 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 plug-in they can't 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 isn't a build, as for any file that's 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's not 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's 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 were unable to handle before. Offline, they name the registry host they can'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 doesn't 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 isn't 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's 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 afterward.
    • 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
      plug-in 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 plug-in'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.

1.0.0-beta.13

Release date: October 07, 2026
  • 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.