Documentation

Unity command-line interface (CLI)

Download Unity Hub

Unity command-line interface (CLI)

Unity CLI release notes for November 2026

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

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

1.0.0

Release date: November 12, 2026
  • Security
    • Each release now publishes
      SHA256SUMS.asc
      , a GPG signature over
      SHA256SUMS
      by the Unity Technologies ApS key, so you can verify a download with
      gpg --verify SHA256SUMS.asc SHA256SUMS
      .
    • unity vcs blame
      no longer prints terminal escape sequences from a commit author name or an object name in the table and tsv output. A crafted author name could move the cursor or retitle the terminal.
    • Sign-in no longer falls back to storing your tokens in a plain file when the system credential store (the macOS Keychain, Windows Credential Manager, or the Linux Secret Service and kernel keyring) is unavailable. To keep using the file, sign in with
      unity auth login --insecure-storage
      , as
      gh auth login --insecure-storage
      works.
  • Added
    • unity vcs uvcs review create
      opens a code review of a changeset or a branch,
      review reviewers
      lists who was asked to review and where each stands, and
      review request
      asks more people. They work on Unity Cloud and self-hosted servers through the local
      cm
      client (11.0.16.10512 or later).
    • unity vcs uvcs review
      lists, reads, answers and resolves code review comments on self-hosted Unity Version Control servers, through the local
      cm
      client and with no Unity sign-in (
      cm
      11.0.16.10616 or later; listing reviews works from 11.0.16.10512).
    • unity plugin install <id>
      installs a Unity tool published after your CLI version, and
      unity <id>
      runs it, with no CLI update. Such a tool downloads only from Unity's CLI plugin CDN and is checksum-verified, like every plugin.
    • unity command <name> --help
      prints that Editor command's usage and parameters, read from the connected Editor. A group name alone lists the group's commands.
    • Tab completion after
      unity command
      offers the connected Editor's commands and the chosen command's parameters, in every shell and in
      unity shell
      . Regenerate your completion script with
      unity completion <shell>
      to get it.
    • unity commands --include-editor
      adds the connected Editor's commands to the manifest, each marked
      "source": "editor"
      .
    • unity mcp --exclude-annotations <list>
      hides the Editor commands whose MCP annotations include any of
      read-only
      ,
      destructive
      ,
      idempotent
      or
      open-world
      , and refuses a call to one. For example,
      --exclude-annotations destructive
      keeps an agent from deleting assets or running C# in the Editor.
    • unity mcp --exclude-tool-groups <list>
      hides whole Editor command groups, every command in them, and refuses a call to any of them. For example,
      --exclude-tool-groups "scene,editor.*"
      hides the scene and Editor commands.
    • unity mcp --tool-groups
      lists one tool per Editor command group instead of one per command, so a full Editor catalog fits under the tool limits of clients such as VS Code, Cursor and Windsurf, and takes less of the agent's context. A group tool takes the command's name in
      command
      and its parameters in
      args
      , and its description lists every command's parameters.
    • UGS_CLI_TELEMETRY_DISABLED
      turns off the CLI's usage data and anonymous telemetry ping, the same way
      DO_NOT_TRACK
      does. Any value but empty,
      0
      or
      false
      counts.
    • A command group can now hand a subcommand it does not have to a
      unity-<group>
      plugin on your
      PATH
      , the way
      unity <name>
      runs
      unity-<name>
      . The plugin gets the arguments from that subcommand on, and the group's own subcommands always come first.
    • unity close --if-saved
      refuses to close an Editor that has unsaved scenes and lists them. Without it,
      unity close
      still quits without saving, and now names the unsaved work it discarded.
    • unity open
      warns when
      HUB_ENV=development
      makes it start the Editor against the staging cloud environment, and names
      --cloudEnvironment production
      to use production.
    • unity command --help
      shows
      unity command editor dialog
      , and says it needs an Editor that serves its own endpoint.
    • unity editor add --skip-signature-check
      registers an unsigned development build, such as a locally built trunk Editor, the same way
      unity editors add --skip-signature-check
      does.
    • unity auth login --insecure-storage
      saves your sign-in to a plain file when no system credential store is available.
    • unity pipeline automation apps actions create <app-id> <version> --file <path>
      adds an action to a draft version of a Pipeline Automation app, from a JSON file whose name and description
      --name
      and
      --description
      override.
    • unity pipeline automation pipelines create
      creates a Pipeline Automation pipeline and its first version, from a JSON file holding its steps and parameters whose name, description, version and tags
      --name
      ,
      --description
      ,
      --version
      and
      --tag
      override. A saved pipeline version works as the file.
  • Changed
    • unity pipeline cloud-build builds timeline
      now works on production, resolving the organization and project like
      builds get
      , instead of stopping with
      AUTOMATION_COMMAND_STAGING_ONLY
      .
    • The winget package now carries stable releases only. On the beta channel, when Windows can't apply an update,
      unity upgrade
      now gives the beta App Installer link to install by hand instead of suggesting winget.
    • Options that write output now follow one rule:
      -o, --output
      names a file and
      --output-dir
      names a directory.
      build --output-path
      is now
      build --output
      ,
      collaboration annotations export
      ,
      attachments download
      and
      thumbnail download
      take
      -o, --output
      , and
      test
      and
      templates pack
      gain
      -o
      .
    • unity collab
      commands accept a Unity Cloud project or organization name as well as an id for
      --cloud-project
      and
      --cloud-org
      . A name is looked up in the organization in scope, which is
      --cloud-org
      , then
      UNITY_CLOUD_ORG
      , then your saved default organization.
    • unity mcp configure
      writes
      --tool-groups
      into the entries it creates. An entry an older
      unity mcp configure
      wrote keeps one tool per command, so a client allow list that names those tools keeps working.
    • unity
      ,
      unity help
      ,
      unity --help
      ,
      unity -h
      ,
      unity help <command>
      ,
      unity <command> --help
      and
      unity --version
      now show the "new version available" notice after their output, the same as other commands. The notice still goes to stderr, only in an interactive terminal, and never with
      --json
      ,
      --quiet
      ,
      CI
      , or when the update check is turned off.
    • The branded header and the highlighted names in the command listing use brand blue for the logo, wordmark, version and command names. The blue reads on light and dark terminal backgrounds.
    • Only the branded header asks the terminal for its background, and only where the terminal can answer, with a 100 ms wait. Command help and the command listing never ask; they use
      UNITY_THEME
      , then
      COLORFGBG
      , then dark.
    • Set
      UNITY_THEME=light
      or
      UNITY_THEME=dark
      to choose the background yourself.
    • Breaking:
      unity recompile
      exits
      12
      when no Editor answers, as
      unity command
      does, instead of
      7
      . A script that matched exit
      7
      for this should check
      12
      ;
      errors[0].code
      is unchanged.
    • unity recompile
      takes the project as a positional argument too:
      unity recompile <path>
      .
    • unity self-update --target <version>
      now keeps the version you chose: Unity Hub no longer replaces it with its bundled CLI at start. Run
      unity self-update
      with no version to go back to the newest release and let Unity Hub update the CLI again.
    • unity projects create --help
      says that a new project is linked to Unity Cloud unless you pass
      --no-cloud
      .
    • unity self-update
      says in its JSON result whether it installed anything (
      installed
      ) and, except for an MSIX update, which version (
      installedVersion
      ), and sets
      appliesAfterExit
      when the new version takes over after the command exits.
    • Breaking:
      unity close
      and
      unity projects close
      fail with exit
      11
      and
      PROJECTS_CLOSE_NOT_A_PROJECT
      when the path isn't a Unity project (no
      Assets
      or
      ProjectSettings
      folder), such as a mistyped name. They used to succeed with
      reason: "not_open"
      .
    • A command that takes
      --project-path
      and gets an extra argument, for example
      unity assets import package.unitypackage ./MyGame
      , now names the flag in its "too many arguments" error and shows the corrected call:
      unity assets import <file> --project-path <path>
      .
    • unity help <name>
      now shows the help of a
      unity-<name>
      plugin from your
      PATH
      when
      <name>
      is not a built-in command, the same as
      unity <name> --help
      .
      unity cloud help <word>
      does the same for a
      unity-cloud
      plugin.
    • When you're signed in, your analytics choice is now saved to your Unity account, so it's the same on every device where you use the CLI or the Hub.
      unity analytics opt-in
      and
      opt-out
      save it to your account, and
      unity analytics status
      and
      unity auth login
      pick up the choice your account holds.
  • Fixed
    • unity license return
      now returns Assigned seats such as Unity Pro. It sends your sign-in token to the licensing client first; before, the return always failed with a 401.
    • unity vcs uvcs
      commands recognize workspaces on self-hosted servers whose repository has no organization in its name, instead of reporting that the folder is not a workspace.
    • unity hub install
      no longer leaves its temp folder and a partial installer behind when Ctrl-C or SIGTERM stops it. Stopped while the installer runs, it now waits for the installer to finish before it removes the folder and exits; a second Ctrl-C exits at once.
    • unity pipeline cloud-build targets create
      and
      targets update
      with
      --development-build
      now set the
      Development
      build option that Build Automation reads, instead of
      BuildOptions.Development
      , which builds ignored.
      --no-development-build
      removes the option in any spelling.
    • unity pipeline cloud-build targets update
      sends the target's stored name when
      --name
      isn't given, so updating a target created from the Editor no longer fails.
    • unity setup all --dry-run
      no longer installs skills when an agent's Unity plugin is already installed. A dry run now writes nothing.
    • unity projects link vcs
      ,
      unity projects unlink vcs
      and
      unity vcs setup
      now refuse a folder that is not a Unity project before they run git or contact a provider. Before, linking such a folder could create a git repository, create a remote repository and push to it.
    • unity install
      and
      unity install-modules
      write their module notices, such as an added dependency or a skipped unknown module, to stderr under
      --format json
      ,
      ndjson
      and
      tsv
      , so stdout holds only the output a script parses.
    • unity docs <topic>
      and
      unity docs toc
      retry when docs.unity.com briefly rate-limits them, and open fewer connections at once, so a first lookup is less likely to fall back to a search.
    • When a service entry in the Editor config is unusable, the CLI log now says it is left out instead of saying the default was used. Entries with a built-in default still fall back to it.
    • unity doctor
      shows each environment check's status (
      [pass]
      ,
      [warn]
      ,
      [fail]
      ,
      [info]
      ) when its output is piped, instead of cutting the status down to
      […
      .
    • unity templates info --format json
      and
      --format ndjson
      now always include
      isUserGenerated
      and
      isNew
      ,
      false
      when the template doesn't set them.
    • unity install <version> --resume
      on an Apple silicon Mac continues the arm64 partial of an Editor download, where it used to restart the x86_64 installer from scratch and install an x86_64 Editor. The arm64 and x86_64 macOS installers share the file name
      Unity-<version>.pkg
      ; an explicit
      --architecture
      , else the Mac's own architecture, now picks the release, also when the catalog lists no release of that name.
    • unity projects audit
      no longer says it opened a Project Auditor page the window could not show. When the Editor's Project Auditor has no such area or view, the result note says so instead of reporting that the page is open.
    • unity projects audit
      no longer fails the first time it installs Project Auditor when the Editor drops the connection or cancels the install while it reloads. It reconnects, asks for the install again, and finishes.
    • unity projects audit
      now fails when the project has script compile errors, even if Project Auditor is already loaded. It exits with an error asking you to fix the compile errors in the Editor, instead of opening a window that can't run the analysis.
    • unity projects audit --report
      accepts a Git Bash style path such as
      /c/Users/me/report.projectauditor
      on Windows, instead of looking for it under
      C:\c\Users
      .
    • unity projects audit
      on a project older than Unity 6 now says Project Auditor needs Unity 6 or later and exits 6, instead of reporting that no Editor is running.
    • unity hub install
      on macOS no longer leaves the Hub removed or half copied when you press Ctrl-C while it replaces it with administrator rights. The copy finishes, then the command stops.
    • unity <name>
      now hands a
      unity-<name>
      plugin only the arguments after the command, even when an option before it has the same value as the command's name, as in
      unity --cloudEnvironment dev dev serve
      .
    • unity self-update
      now names the file and says how to fix it when it can't write the partial download, instead of failing with a bare "Operation not permitted" or "Access is denied" message.
    • unity self-update
      now checks it can write the CLI's install location before it downloads. If it can't (for example in
      /usr/local/bin
      without sudo), it says which path isn't writable and to rerun with write access or reinstall, instead of failing with a bare "Permission denied".
    • unity self-update --rollback <version>
      now says when a kept backup has no version label, and names plain
      unity self-update --rollback
      as the way to restore the most recent one.
    • A refused or unavailable sign-in broker, or a credential store that denies access, now fails
      unity cloud
      commands with its own error code (
      AUTH_BROKER_REFUSED
      ,
      AUTH_BROKER_UNAVAILABLE
      ,
      CREDENTIAL_STORE_ACCESS_DENIED
      ) instead of
      CLOUD_*_FAILED
      , and it is no longer reported as a CLI crash. The exit code is unchanged.
    • In human output, these failures show the broker's own message, such as "Unable to reach the sign-in service. Try again in a moment.", without the command's "Unable to list organizations:" prefix.
    • unity vcs switch
      and
      unity vcs worktree add
      report an invalid branch name as a usage error (exit 2, code
      VCS_INVALID_BRANCH_NAME
      ) instead of a failed command, and no longer send a crash report for it.
    • unity vcs uvcs review --changeset
      and
      unity vcs uvcs review comments --changeset
      no longer fail with a rejected request against Unity Cloud. The changeset filter is now sent in the format Cloud accepts.
    • unity assets inspect
      no longer prints raw color codes from a package's entry paths in the human and tsv tables, so a package can't recolor or hide its own entry names. json and ndjson output is unchanged.
    • unity templates create
      and
      unity templates edit
      now say what went wrong and what to do, instead of printing
      UNABLE_CREATE_TPL
      ,
      TEMPLATE_DESTINATION_NOT_WRITABLE
      or
      USER_TPL_EDIT
      : a folder that isn't a Unity project, a templates folder you can't write to, or a template whose
      package.json
      can't be read. In JSON,
      errors[0].code
      names the failure (for example
      TEMPLATES_CREATE_NOT_UNITY_PROJECT
      or
      TEMPLATES_EDIT_INVALID_MANIFEST
      ) instead of
      ERROR
      .
    • unity assets inspect
      and
      unity assets import
      with an extra operand now say
      Expected 1 argument but got 2: a, b.
      , like
      unity open
      and
      unity projects info
      , instead of
      Expected 0 arguments but got 1: b.
    • unity assets import
      and
      unity open --batchmode
      now work on Linux with no display. An import always runs the Editor without graphics, and
      --batchmode
      does the same when neither
      DISPLAY
      nor
      WAYLAND_DISPLAY
      is set.
    • unity templates edit
      now changes only the fields you pass. Before, an edit without
      --display-name
      (for example only
      --description
      or
      --preview-image
      ) reset the template's display name to its package name.
    • unity vcs sync
      on a Git LFS repository now brings in the new commits and reports a failed LFS download as a warning with exit code 6, instead of failing the pull when the LFS server is unreachable.
    • unity build
      now fails with exit 6 when Unity exits 0 without a build result in its log and nothing was written to the output path, instead of reporting success.
    • unity build --create-profile
      no longer leaves the helper's
      .meta
      file, or an
      Assets/Editor
      folder it created, in the project, so later Editor runs stop recreating empty
      UnityCliTemp-*
      folders.
    • On Windows, pressing Ctrl+C while
      unity build
      ,
      unity build --create-profile
      ,
      unity run
      or
      unity test
      runs the Editor now exits 130 as an interruption. It no longer reports a missing result or a failed build (exit 6).
    • test
      ,
      run
      and
      build --create-profile
      with
      --allow-install --format ndjson
      now end a failed run on a
      success:false
      result
      frame with the error code, after the install's own
      result
      frame. Before, the stream ended on the install's
      success:true
      frame while the command exited non-zero.
    • unity build run -- <project>
      now runs that project's last build, like
      unity build run <project>
      , instead of failing with "isn't supported with these options or in this environment". An extra project name after
      --
      is the usual "too many arguments" usage error.
    • unity recompile
      no longer fails with "Pipeline server returned 400 Bad Request" after a successful compile on Unity 6000.7 betas. A
      400
      or a
      503
      from the Editor during its domain reload is waited out, the command keeps polling, and it reads the compile status once more before it reports a failure.
    • unity recompile
      reports compile warnings without
      --strict
      . They still fail the run only under
      --strict
      .
    • unity command
      exits 6 with a
      COMMAND_FAILED
      error when the command's result reports
      success: false
      , or a
      status
      of
      rejected
      ,
      busy
      ,
      failed
      or
      not_implemented
      , instead of exiting 0. Editors whose Pipeline writes the command's output itself already set the exit code.
    • unity command
      says the Editor exited, and may have crashed, when the Editor quits while running a command, instead of naming a refused evalToken or a timeout.
    • unity command
      explains a
      --instance
      ,
      --pid
      or
      --port
      typed after the command name that matches no Editor, and shows how to pass it to the command after
      --
      . When the command's parameter list is available, the hint appears only if the command has that parameter, and names it.
    • unity command
      asks a project whose Pipeline package is older than 0.9 by the command's old name first, so the Editor console no longer gets an Error for the new name it doesn't know.
    • unity install-modules
      no longer reads another release's module list for an Editor installed with
      Unity.exe
      straight in its version folder (as Unity's internal tools do). It now stops before any license question or download, for
      unity editor module add
      too, and tells you the Editor has no
      Editor
      folder to add modules to, instead of failing after the admin prompt with a generic installer error.
    • unity uninstall
      and
      unity editors prune --remove
      now remove only an Editor's own folder when
      Unity.exe
      sits straight in its version folder. They used to delete the parent folder, and every other Editor version in it.
    • unity projects info
      no longer reports
      cloudEnabled: true
      for a project that is not linked to a cloud project.
    • unity command --skill
      accepts a plugin prefix such as
      unity:ui
      and uses the skill name after it.
    • On Windows, a
      unity self-update
      whose file swap fails after exit no longer forgets the version you chose with
      --target
      . The next
      unity
      run puts it back.
    • unity projects exec
      with
      --format json
      ,
      ndjson
      or
      tsv
      leads every line of a project's output on stderr with the project's name, so each project's output can be told apart.
    • unity projects exec
      checks every project folder before it runs anything. A missing folder is reported by its path up front and no longer stops the run on the other projects.
    • unity status --until-ready
      keeps waiting while the only open windows are the Editor's progress windows, such as "Hold on..." or "Reloading Domain".
    • A command blocked by an Editor window, not a message box, now says that no command can answer it and that it must be closed in the Editor, or shown with
      unity command editor dialog
      on an Editor that serves its own endpoint.
    • unity auth token
      prints a token for a service account. Set
      UNITY_CLOUD_PROJECT
      to the ID of the project the token is for (a name is not accepted); without it, or with a name, the command exits 2 and says so, instead of reporting a connection problem.
    • unity auth broker ensure
      starts the sign-in service when a proxy is configured, either a proxy variable such as
      UNITY_PROXY
      or
      HTTPS_PROXY
      or your system's proxy settings, instead of failing with
      AUTH_BROKER_UNAVAILABLE
      .
    • unity docs cache add
      skips a docs page whose path has a segment over 128 characters or is over 256 characters long, so one such entry in the listing no longer makes every rerun fail with
      DOCS_CACHE_INCOMPLETE
      .
    • A pager set in
      UNITY_PAGER
      or
      PAGER
      that fails without showing anything no longer loses the output when it is slow to start (for example
      cmd /c exit 1
      on Windows): the output is printed to the terminal instead.
    • unity vcs affected
      and
      unity test --affected
      no longer stop when an assembly definition repeats a key or holds a broken Unicode escape. They count that file as unreadable and carry on.
    • unity help <word>
      and
      unity <group> help <word>
      now report an unknown command and exit with code 2 when nothing is named
      <word>
      . Before, they printed the root or group help and exited 0.
    • unity projects add
      ,
      remove
      ,
      pin
      and
      unpin
      now end
      --format ndjson
      output with one
      result
      line, on success and on failure, as
      --format json
      ends with its envelope. Before,
      add
      printed bare paths, a failure printed only an error on stderr, and a damaged project list printed nothing on stdout.
    • unity editors upgrade
      and
      unity editors info
      now fail when the releases service can't be reached or answers with an error status. Before,
      editors upgrade
      reported "Up to date" and exited 0, and
      editors info
      reported the version as not found and exited 11.
    • unity uninstall
      with more than one version now reports "too many arguments" and exits with code 2. Before, it exited with code 1 and a message that the command isn't supported with these options.
    • unity auth revoke
      now refuses an application name made only of spaces, tabs or invisible characters, as it already refuses an empty one. Before, it stored a blank revocation that
      unity auth consumers
      listed as an empty row.
    • unity logs --console --follow
      and
      unity recompile --strict
      work again with Unity Pipeline 1.0.0-pre.1, which refuses the old
      since_session
      name. Both still send
      since_session
      , which every older package reads, and switch to
      since-session
      when the package refuses the old name.
    • When a proxy auto-configuration (PAC) script lists several proxies and the first can't be reached, the CLI moves on to the next one. It connects directly only when the script allows it.
    • On Windows, a proxy auto-config (PAC) script whose server cannot be reached, such as a company PAC while you are off the VPN, no longer stalls commands for about 20 seconds. The CLI gives up on the script after 10 seconds and falls back to your other proxy settings, or connects directly.
    • unity build
      through an Editor that already has the project open works again with Unity Pipeline 1.0.0, which refused the output directory under its old name and the build options as a plain string. The CLI still sends the old name first, which every older package reads, and switches to the new one when the package refuses it.
    • unity projects audit
      runs against Pipeline 1.0.0 as well as older Pipeline packages, instead of failing on the first step with an empty reason.
    • A usage mistake no longer fails with the "isn't supported with these options or in this environment" error (exit 1). A command with an extra word before
      --help
      , such as
      unity projects info path --help
      , prints that command's help.
    • unity docs --help
      now says that
      --manual
      searches the manual, and names
      unity docs toc --manual
      to list its pages.
      unity docs --content --manual
      says the same when it has no page to print, instead of asking for a more specific name.
    • The
      unity docs --cli
      example in
      unity docs --help
      now opens a page that exists.
    • With
      --json
      or
      --format ndjson
      , commands run from Claude Code no longer print the Claude plugin hint line on stderr, so stderr carries only what a parser expects.
    • unity docs --url
      no longer returns a page address that doesn't exist for a full API name such as
      UnityEngine.Rigidbody.velocity
      . When the page index has no such page, it returns a search address, as for any other name.

1.0.0-beta.17

Release date: November 05, 2026
  • Security
    • unity projects close --force
      now signals a process only if it is a Unity Editor that did not start after the Editor's recorded start time, and checks again before each signal. A stale or tampered editor record that names a process that is not a Unity Editor, or one that started after the recorded time, is refused with a message, and that process is left running.
  • Added
    • unity plugin install
      and
      unity plugin upgrade
      warn you before they download a beta build of a plugin, so you know it isn't a stable release. With
      --format json
      the warning is in the output's
      warnings
      .
    • A plugin can declare other plugins it needs.
      unity plugin install
      and
      unity plugin upgrade
      install the required ones first, each with its own license step,
      unity plugin remove
      refuses a plugin an installed plugin requires, and
      unity plugin --json
      lists each entry's
      dependencies
      .
    • unity pipeline automation apps versions create <app-id> --version <version>
      adds a draft version to a Pipeline Automation app, empty or copied from an existing version with
      --base-version
      .
    • unity pipeline automation apps create
      creates a Pipeline Automation app and its first draft version from options, or from a JSON file with
      --file
      .
    • unity pipeline cloud-build builds timeline <build-number> --build-target <target>
      shows how many seconds each phase of a build took, from waiting for a machine through upload. It is available on staging only for now, and on production it stops with an error before sending any request.
  • Changed
    • unity skill install
      installs the Unity skills from a newer release of the Unity-Technologies/skills repository. The
      unity-cli
      skill now covers streamed command output and the
      antigravity
      and
      qwen
      skills clients, and
      new-unity-project
      now upgrades a project to Unity 6000.7 or later with
      unity projects upgrade
      .
    • unity docs
      opens the common page for a bare name that several script reference pages share:
      unity docs Start
      opens
      MonoBehaviour.Start
      and
      unity docs Log
      opens
      Debug.Log
      , instead of a search. A name with no clear common owner still opens a search.
    • unity plugin upgrade
      updates a plugin's agent skill only where it is already installed: user-wide, or in the current project. Run it from a project to refresh that project's copy.
    • unity plugin install <id> --local
      writes the plugin's agent skill into the current project, for each AI client whose project already has Unity's skill. Claude Desktop is skipped, because its skills are global only.
    • unity projects link vcs --rollback --delete-remote
      no longer deletes the remote repository unconfirmed when it can't ask (a machine format,
      --non-interactive
      , no terminal on stdin, or CI). It now fails with
      LINK_VCS_DELETE_REMOTE_REQUIRES_YES
      (exit
      2
      ) before it reads or detaches anything, only where a delete could happen (a run with no origin or a self-hosted origin is unchanged); pass the new
      --yes
      (
      -y
      ) to delete without asking.
    • A
      unity self-update
      that fails because of your machine or network no longer sends a crash report: a download that stalls, a download that doesn't match its checksum or goes missing, an operating system that refuses to start the new binary, a denied or full disk, and a file the system won't replace. The message and the exit code stay the same, and the error no longer suggests
      unity bug
      for the checksum, stall and blocked-launch cases.
    • When the Unity release service can't be reached,
      unity install
      and
      unity editors default latest
      or
      lts
      now fall back to Unity 6000.0.85f2 and 6000.3.28f1 LTS, up from 6000.0.64f1 and 6000.3.10f1.
    • Crash reports leave out problems on your side, such as a full disk, a denied permission, a network failure or not being signed in, and the same failure is reported at most once an hour. A crash no longer holds up the prompt for more than about a second and a half when you run the CLI in a terminal.
    • If you opted in to analytics, a crash report carries the same anonymous device id analytics uses. Without that consent it carries no id.
    • Turning off Send crash reports in the Unity Hub's settings now turns off the CLI's crash reports too.
      UNITY_NO_CRASH_REPORT
      still turns them off on its own.
    • Updated usage analytics defaults for new installs.
  • Fixed
    • unity mcp
      waits for an asynchronous Editor test run to finish, and marks a capture that writes a file as able to overwrite one, with Pipeline packages that name their parameters in kebab-case (
      async-tests
      ,
      output-path
      ).
    • The install scripts install the latest beta again when no stable release exists yet, instead of failing.
      UNITY_CLI_CHANNEL
      set to a channel still installs only from that channel.
    • unity pipeline list
      ,
      unity status
      and every command that finds a running Editor by its project now find an Editor launched with its
      -projectPath
      argument in quotes, such as
      "-projectPath" "C:\My Project"
      . Such an Editor was not listed at all.
    • unity skill install
      ,
      unity skill refresh
      and
      unity setup
      install the latest published Unity skills, even on a machine that has never run the CLI before. Previously a first install could write the skills from before the most recent update.
    • unity skill refresh --format json
      and
      --format ndjson
      now write a result for every run. The JSON envelope or the final
      result
      line lists each tracked install the refresh looked at, with what it did:
      refreshed
      ,
      up-to-date
      ,
      pruned
      ,
      skipped
      or
      conflict
      (
      would-update
      ,
      would-skip
      or
      would-prune
      under
      --dry-run
      ), plus a
      skipReason
      when the row was left alone or pruned for a reason.
    • An extra argument on
      unity cloud
      ,
      unity context
      ,
      unity build
      ,
      unity pipeline
      and
      unity projects
      commands (except
      unity pipeline automation
      and
      unity pipeline cloud-build
      ), for example
      unity cloud status extra
      , now prints
      error: too many arguments
      and exits
      2
      , like every other command. It used to exit
      1
      with "isn't supported with these options".
    • unity vcs setup
      ,
      unity projects create
      ,
      unity projects link vcs
      and
      unity projects clone --vcs
      no longer say a GitHub or GitLab token is invalid when the provider can't be reached. They exit 7 with
      VCS_PROVIDER_UNREACHABLE
      , and still exit 3 with
      VCS_TOKEN_INVALID
      when the provider rejects the token.
    • unity ci init --provider gitlab
      now generates a job that runs in a project folder whose name starts with a dash, such as
      -rf
      .
    • unity pipeline install
      and
      unity pipeline upgrade
      under
      --format tsv
      now print their result as
      key<TAB>value
      lines under a header row, one line per field (
      packageId
      ,
      version
      ,
      projectPath
      ,
      alreadyInstalled
      ; and
      previousVersion
      ,
      upgraded
      ,
      alreadyLatest
      for upgrade). Before, a script got one headerless row of positional cells and could not tell which cell was which.
    • unity install-modules
      now respects
      --architecture
      when one build of the version is installed: an invalid value exits 2 in every mode, and an architecture that is not installed exits 6 with a not-found message for
      --list
      ,
      --all
      , named modules (
      -m
      ) and the module picker, instead of using the installed build.
    • unity projects create
      ,
      unity projects link vcs
      (flag form and URL form) and
      unity vcs setup
      with
      --git-token-from-stdin
      (or the deprecated
      --git-token-stdin
      ) no longer fall back to a stored login (a Git credential helper,
      gh
      or
      glab
      ) when stdin is empty. They now fail with exit code 4 (
      VCS_TOKEN_REQUIRED
      ) and create or push nothing, so a script that pipes an empty variable cannot act as whoever is signed in.
    • unity projects create --cloud-project <name>
      now fails with exit code 6 when the organization has no project, or more than one, matching that name. It used to exit 0 with only a warning.
    • Creating a Unity Cloud project with
      --coppa unspecified
      now works on
      unity projects create
      ,
      projects link cloud
      ,
      projects link vcs
      and
      vcs setup
      . The Cloud request was refused with HTTP 400, so the project stayed unlinked.
    • unity projects create --vcs github
      or
      --vcs gitlab
      with a
      --git-token
      now exits
      7
      (
      VCS_PROVIDER_UNREACHABLE
      ) when the token check cannot reach the provider (offline, a failed DNS lookup, a refused connection, or a proxy that is down), and
      14
      (
      ETIMEDOUT
      or
      ECONNABORTED
      ) when it times out, instead of reporting the token as invalid (exit
      3
      ). Nothing is written in either case.
    • --quiet
      no longer blanks the human answer of commands whose result is a sentence or a table.
      unity docs cache --quiet
      now prints "No documentation is cached..." on stdout instead of nothing, and
      context
      ,
      auth accounts
      ,
      config
      ,
      editors running
      ,
      skill
      ,
      doctor
      and the other commands listed in the deviation keep their answer under
      --quiet
      .
    • unity license status
      no longer reports
      signedIn: true
      with
      authMode: "oauth"
      when nobody is signed in and the sign-in service refuses the CLI. It now reports the saved sign-in, or signed out when none is saved, matching
      unity auth status
      .
    • unity test
      now refuses a
      --junit-output
      that is the same file as
      --output
      on the report folder's own terms, instead of letting the JUnit report overwrite the NUnit one. Names that differ by letter case, the dotless and dotted
      i
      , or Unicode form are only a candidate, and the file system decides, component by component from the first path component that differs: a spelling that exists while the other does not is a different file, two that exist are compared by file identity (a dangling link, whose target cannot be looked up, is judged by its link entry and never counts as a different file), and two that are absent are probed with a file created under the first name in a scratch folder inside the nearest existing folder, removed again, so nothing is created or removed at the report paths (a probe that cannot be made or read proves nothing and does not refuse the run), and right before the JUnit report is written the two files are compared by identity once more, so a link or an 8.3 short name created by the NUnit write cannot send the JUnit report over it (NTFS through WSL keeps
      É
      and
      É
      as two files and folds
      ı
      into
      I
      , a folding folder makes
      É
      and
      É
      one).
    • Commands that talk to a running Unity Editor, such as
      unity command
      ,
      unity recompile
      ,
      unity job
      ,
      unity logs --console
      and
      unity projects audit
      , no longer crash when the current directory can't be read or no longer exists (a permission refusal such as macOS blocking a protected folder, or a folder deleted under your shell). They skip it, and with several Editors open ask you to pick one with
      --project-path
      .
    • unity projects link cloud
      links a project whose
      ProjectSettings.asset
      , as the Editor wrote it, no longer names a cloud project, where it refused with the stale link from the Hub's project list.
    • unity projects link cloud
      now exits with code 7 (14 for a timeout) when Unity's services can't be reached (for example behind a dead proxy), instead of exit 6. Unity Cloud commands whose sign-in step gets no answer from Unity's services now say the services can't be reached, instead of telling you to run
      unity auth login
      .
    • unity projects clone --vcs uvcs
      now registers the project with its Unity Version Control link, workspace location included, even when the workspace cannot be read back from
      cm
      , so
      unity projects unlink vcs
      finds the workspace it removes instead of reporting the project as already unlinked or naming the wrong folder.
    • unity projects unlink vcs
      on Windows no longer refuses a project at the root of its Unity Version Control workspace just because the path differs in letter case (for example
      C:\work\game
      against the
      c:\work\game
      that
      cm
      reports), so it removes the workspace without
      --unlink-workspace
      . A project below the workspace root is still refused.
    • unity projects clone --vcs uvcs
      of a repository you already cloned into another folder no longer fails with "workspace already exists": the second clone gets a workspace named for its folder (
      <repo>_<folder>
      ), and a name still taken is reported with the
      cm workspace delete
      command to free it.
    • On Windows,
      unity projects clone --subpath
      registers the project with backslashes only (
      C:\dir\Sub\Game
      ), instead of a path that mixed
      \
      and
      /
      .
    • unity projects unlink vcs
      treats a project whose registry row records its workspace folder itself (as the Hub writes it) as linked to that folder, instead of refusing with a folder two levels above it or removing the
      .plastic
      there.
    • On Windows, pressing Ctrl-C while a command shows its spinner no longer leaves the Windows Terminal tab and taskbar progress indicator spinning.
    • unity terms status --quiet
      now prints the same table as a run without
      --quiet
      , and prints "No installed Editors found." when no Editor is installed, instead of printing nothing.
    • On Windows,
      unity hub install
      now names the expected publisher,
      Unity Technologies SF
      , when it refuses an installer whose signature does not check out, instead of the macOS Developer ID.
    • On Windows,
      UNITY_PAGER=more
      and
      PAGER=more
      now page long listings; the pager lookup also finds
      .com
      programs.
    • A
      UNITY_PAGER
      or
      PAGER
      that cannot be found now prints a warning on stderr instead of silently printing the listing unpaged.
    • A sign-in refresh that times out, and a service-account token exchange that gets no answer from the network, no longer send a crash report. The messages and exit codes are unchanged.
    • unity vcs doctor
      ,
      hooks
      ,
      status
      ,
      switch
      ,
      sync
      and
      worktree
      now say what to check when git cannot be started (not installed, not on your
      PATH
      , or not allowed to run), under the new error code
      GIT_START_FAILED
      .
    • unity context
      reports an accounts database it cannot write to with the same message and
      LOCAL_STORE_UNWRITABLE
      code as
      unity auth
      .
    • A pipeline artifact the build does not list, an accounts database
      context
      cannot write to and a git that cannot be started no longer send a crash report.
    • unity mcp configure
      writes the config file when it sits on a different drive than its temporary copy, which happens when
      AppData
      is redirected, as with a packaged Claude Desktop. Previously it failed with "The system cannot move the file to a different disk drive" and left the config untouched.
    • unity mcp configure
      now exits with code 1, instead of 6, when it can't write a config file (for example a read-only folder) in the human,
      tsv
      and
      github
      formats;
      --format json
      and
      ndjson
      already used 1. Scripts that check for exit 6 on a failed write should check for 1.
    • unity watch test
      no longer skips a file change on a busy machine. A slow poll under heavy load used to push the next check far out, so a change could land in the gap and go unnoticed until the following one.
    • The one-time privacy notice now matches your analytics setting on every first command. Before, a machine with analytics on could be told how to turn it on instead of how to turn it off.

1.0.0-beta.16

Release date: November 03, 2026
  • Added
    • In Unity Editor versions that support it,
      unity command editor dialog
      shows the modal dialog the Editor is waiting on, and
      unity command editor dialog answer <id> <button>
      presses one of its buttons, even while the dialog blocks the Editor.
      unity pipeline editors
      shows each Editor's phase (such as
      loading project
      or
      safe mode
      ) and every endpoint it serves with its type, shows the open dialog, and no longer suggests restarting an Editor that is still loading its project.
    • unity skill sync [client]
      installs or updates one AI client's Unity skills without prompting, keeping any copy you edited. With no client it picks the agent running it,
      --hook
      prints a session-start hook document, and an unchanged run downloads nothing.
    • When an AI agent runs
      unity
      and its Unity skills are older than the CLI's pin, the CLI suggests
      unity skill sync <client>
      once a day.
      UNITY_NO_AGENT_HINTS
      turns it off.
    • unity setup vscode
      installs the Unity skills for VS Code and prints how to add the Unity plugin there with Chat: Install Plugin from Source.
      unity setup opencode
      installs the Unity skills for OpenCode and writes a plugin file,
      ~/.config/opencode/plugins/unity.js
      (under
      $XDG_CONFIG_HOME
      when it is set), that keeps them current at the start of each session.
    • unity skill install
      now supports Google Antigravity (
      antigravity
      ) and Qwen Code (
      qwen
      ).
    • unity projects create
      gives every project linked to a cloud project a
      liveops_enabled
      kill switch in Remote Config, set on the server and never in a file, so live features can be turned off from the Unity Dashboard without a new build. An existing switch is never changed, and a project whose Remote Config already has a
      settings
      config is asked to add the switch in the Unity Dashboard instead.
    • unity projects create
      adds Cloud Save and one save slot for the signed-in player to every project linked to a cloud project.
      --bare
      leaves it out.
    • unity build --target
      now builds through the Unity Editor that already has the project open instead of refusing, and switches that Editor's active build target;
      --timeout
      and Ctrl+C stop waiting without closing the Editor or stopping its build. An Editor in Play Mode, compiling scripts or showing a dialog is refused with a hint, and
      --execute-method
      ,
      --profile
      ,
      --args
      ,
      --accelerator
      ,
      --no-accelerator
      ,
      --log-file
      ,
      --editor-path
      , an
      --editor-version
      other than the open Editor's,
      --architecture
      (or
      UNITY_ARCHITECTURE
      ),
      --build-target-group
      and the
      --android-*
      options still need the Editor closed.
    • unity auth broker ensure
      starts the CLI's sign-in service if it isn't running, so a plugin can rely on it before it reads your session.
    • unity vcs diff
      names the asset behind each changed reference, looked up at that side's commit, and marks assets added or deleted in the range, built-in resources, package assets and objects in the same file.
    • unity vcs guid <guid...>
      shows which asset each guid names, in your working tree or at a commit with
      --at
      .
    • unity vcs summarize --objects
      shows what changed inside each changed scene, prefab and asset in the range, object by object, the way
      unity vcs diff
      does for one file. Each file's report is capped like
      unity vcs diff
      's; add
      --full
      to see every change.
    • unity vcs summarize --to <ref>
      ends the summary at that commit instead of the one you have checked out, so you can summarize a pull request or a past range without switching branches. For example,
      unity vcs summarize --since main --to feature/login
      .
    • unity vcs diff --full
      shows every changed object and every value whole, in human and json output. A value nested more than 8 levels deep still collapses, and is marked truncated.
    • unity skill install --all
      installs the Unity skills into every agent client found on your machine, one line per client. It never starts an agent's own CLI, so it works on a machine without git.
    • unity pipeline cloud-build
      now sets up build targets:
      targets create
      and
      targets update
      take one option per field, or a whole target as JSON with
      --file
      (
      -
      reads stdin),
      connections
      lists and
      connections create
      adds a project's repository connections (Unity Version Control uses your Unity sign-in),
      scm check-url
      checks a repository is reachable,
      credentials android|ios|osx|uwp upload
      uploads signing credentials,
      targets auditlog
      lists a target's configuration changes and who made them, and
      org free-tier
      shows whether the organization has reached its free tier limit. Passwords and tokens are read from stdin or an environment variable, never from an argument, and never appear in output.
  • Changed
    • unity command
      shows a command's output as the Editor writes it, while the command runs, when the Editor supports it.
      --format json
      (or
      ndjson
      , or
      --json
      ) writes the command's result as one JSON value per line and
      --format tsv
      one tab-separated line per record; pass
      --fields name,path
      to pick the fields.
    • For scripts: against an Editor that formats its output,
      unity command --format json
      prints the command's result without the
      success
      ,
      command
      ,
      parameters
      and
      target
      envelope, and
      --format tsv
      has no header row.
      --format ndjson
      writes the same lines as
      --format json
      , and
      --format github
      the human layout.
    • unity command
      listings (
      unity command
      ,
      --tag
      ,
      --tags
      , a group name such as
      unity command editor
      ) come laid out by the Editor when it supports it, in the same layout without the connection lines above it, and print as they arrive instead of through the pager.
    • The Asset Library plugin (
      unity assetlibrary
      ) now gets the account the CLI is signed in to.
    • Two new exit codes:
      17
      (
      UNAVAILABLE
      ) when the Editor is busy loading, compiling, reloading, in Safe Mode or running too many commands, and
      18
      (
      AWAITING_INPUT
      ) when a modal dialog blocks it. Both used to exit
      6
      .
    • unity setup claude
      ,
      codex
      ,
      grok
      ,
      copilot
      ,
      antigravity
      and
      qwen
      now also install the Unity skills for that agent, because the Unity plugin no longer carries them.
      unity setup all
      does the same for each plugin agent it finds.
    • unity setup all
      no longer registers the Unity MCP server for coding agents that can run shell commands, which use the
      unity
      CLI directly. Run
      unity mcp configure <client>
      if you want it.
    • unity docs --package <name>
      opens the package's own docs from the project when it has them, so it works offline.
      --online
      opens the online manual instead, and
      --format json
      reports
      source
      as
      local
      with the file's
      path
      .
    • A command that cannot reach its service because you are offline, a DNS lookup fails, the connection is refused, or the proxy is down now exits
      7
      (
      NETWORK_UNREACHABLE
      ) instead of
      6
      . This covers
      unity releases
      ,
      unity changelog
      ,
      unity self-update --check
      ,
      unity pipeline list-versions
      ,
      unity cloud org
      and
      unity cloud project
      .
    • unity docs cache --format json
      now returns the same listing shape as the other list commands: the cached versions are in
      data.items
      , next to
      total
      ,
      nextPage
      and
      partial
      , instead of being a bare array in
      data
      . Under
      --format ndjson
      the last line carries the same fields next to
      count
      .
    • The install scripts now finish by installing the Unity skills into every agent client found on your machine, instead of running
      unity setup
      . On a Mac without the Xcode Command Line Tools,
      unity setup
      could not install the Claude Code plugin, because Claude Code needs git to add a plugin marketplace.
    • unity skill install
      installs the Unity skills from a newer release of the Unity-Technologies/skills repository, including the current
      new-unity-project
      skill, which by default sets up a project from your prompt without a long interview, and the new
      craft-game-floors
      skill.
    • On Linux, installing or adding a Unity Editor no longer adds an entry for that version to the applications menu. Editor windows keep their name and icon.
    • unity docs <topic>
      answers sooner on a cold start when the topic's Editor version is known (from the project or
      --editor-version
      ): it opens or prints the page as soon as the documentation index files read so far hold it, instead of after the whole index has loaded. It sends the same requests to docs.unity.com as before and caches the same index.
  • Fixed
    • unity skill install opencode
      now installs into
      $XDG_CONFIG_HOME/opencode/skills
      when
      XDG_CONFIG_HOME
      is set, where OpenCode looks for them, instead of always
      ~/.config/opencode/skills
      . A copy an earlier version put in
      ~/.config/opencode/skills
      stays there; delete it if you set
      XDG_CONFIG_HOME
      .
    • A URP project made with
      unity projects create
      no longer opens on the "URP Material upgrade" dialog, which held up every Editor command until someone clicked OK. The payload's new
      urpMaterials
      block reports it.
    • unity docs <package> --content
      prints the docs for the package version the project uses, not a newer copy left in the package cache.
    • unity collab
      commands no longer say "Not signed in" when getting a Unity token fails for another reason, such as a rate limit, no network connection or an unreachable proxy. They now report "Collaboration API call failed:" with the real cause, as
      unity cloud
      does.
    • A signed-out
      unity collab
      command now always says how to sign in with
      unity auth login
      or use a service account with
      unity auth service-account
      , instead of sometimes leaving out the service-account route.
    • unity self-update --rollback
      now refuses to run together with
      --dry-run
      ,
      --check
      ,
      --changelog
      ,
      --target
      or
      --channel
      , and exits
      2
      without changing anything. Before, those flags were ignored and the rollback went ahead.
    • unity install <version> --changeset <changeset>
      no longer installs the public build of that version when the changeset belongs to a different build. It now exits 11 (
      RELEASE_NOT_FOUND
      ) and installs nothing.
    • unity pipeline automation
      and
      unity pipeline cloud-build
      no longer put stray control characters around a command name, such as
      unity auth login
      , in the error message of
      --format json
      and
      --format ndjson
      output when you are signed out.
    • --quiet
      no longer empties
      --format tsv
      tables.
      unity --quiet --format tsv releases
      printed nothing and exited 0, so a script that piped it got no data.
    • unity config proxy
      and
      unity env
      now show the proxy from the
      --proxy
      flag, with source
      flag
      , when you pass it. They used to show no proxy, or the one from your environment, although requests already went through the flag.
    • unity command
      exits
      14
      with the
      EDITOR_TIMEOUT
      error code when the Editor stops a command that ran past
      --timeout
      , instead of exiting
      6
      with
      COMMAND_FAILED
      , so scripts can tell a timeout from a failure.
    • unity uninstall
      now reports the Editor it removed under
      --format json
      ,
      ndjson
      and
      tsv
      : the json envelope and the ndjson result frame carry
      version
      and
      architecture
      , and
      tsv
      prints them as key and value rows. It used to print nothing and exit 0.
    • unity uninstall
      with no version now announces the stored default Editor on stderr instead of stdout, so a
      --format json
      run no longer starts with a line that breaks the parse.
    • unity language --set
      and
      unity ci init
      print a value you typed, or a project folder name, on one line with no color codes when they refuse it, so a newline in the value can no longer add a fake second error line.
    • unity docs cache add
      now refuses to write when the docs cache folder is itself a symbolic link, the same way it already refused a link inside it.
      unity docs --content
      ,
      unity docs toc
      , topic lookup and
      unity docs cache
      no longer read through such a link either.
    • Two
      unity self-update
      runs started at the same time no longer share one download, which made one of them fail with "No such file or directory". The second run now says it is waiting for the other and starts once that one finishes.
    • unity vcs diff
      given an empty
      --from
      or
      --to
      now says which option needs a revision and exits with code 4 (error code
      VCS_REVISION_EMPTY
      ). It used to print an untranslated internal error and exit with code 6.
    • unity vcs blame
      reports a new file that has never been committed as
      untracked
      , instead of saying the path does not exist.
    • unity vcs git migrate-lfs --after
      now refuses a value that is not a date, such as
      banana
      , with a usage error instead of scanning anyway. It takes an ISO date such as
      2025-01-01
      , with an optional time and zone, or a relative one such as
      "2 weeks ago"
      .
    • unity auth revoke
      now fails with exit code 6 and the
      AUTH_REVOKE_LIST_FULL
      error when the revocation list already holds 1,024 applications, instead of exiting 0 without revoking anything. Restore an application with
      unity auth revoke <application> --restore
      to make room.
    • unity cloud project current --format tsv
      , and its default when output is piped, now prints
      key<TAB>value
      lines with the same fields as
      --format json
      (
      activeOrganizationId
      ,
      activeCloudProjectId
      ,
      defaultCloudProjectId
      ,
      linkedCloudProjectId
      ) instead of the human sentences.
      --quiet
      no longer hides them.
    • unity install
      and
      unity install-modules
      refuse a
      --download-directory
      that is a file right away, a
      --dry-run
      included, with a "not a directory" error (exit 6,
      PATH_NOT_A_DIRECTORY
      in JSON), instead of passing the dry run or failing late.
    • unity install
      now warns when
      UNITY_INSTALL_RETRIES
      is not a non-negative integer, as
      unity install-modules
      does, instead of silently using 2 retries.
    • unity releases --from-year
      now filters on each release's date. It used to compare the year with the version number, so every Unity 6 release passed any year (
      --from-year 2099
      listed them all) and older-line patches released in that year were left out.
    • unity docs cache add --format ndjson
      writes
      progress
      frames while it downloads pages, before the result frame.
    • unity self-update 1.2.3
      now suggests
      unity self-update --target 1.2.3
      when it rejects a CLI version, instead of pointing at
      unity editors upgrade
      .
    • On macOS and Linux,
      unity self-uninstall
      now stops the Unity auth broker and removes its
      ~/.unity/run
      folder, so
      ~/.unity
      no longer stays behind when you uninstall while signed in.
    • unity templates pack
      no longer leaves a copy of the project in the temp folder when a signal such as SIGTERM stops it.
    • unity projects create --template <path>.tgz
      now checks the minimum Editor version the archive's
      package.json
      declares, and refuses an older Editor with the same "requires Unity" error as a template folder, before the Editor starts.
    • On macOS and Linux, Ctrl-C or SIGTERM during
      unity projects create
      now stops the Unity Editor it started, instead of leaving it running and writing the project. The command exits 130 or 143 and names the folder that holds the partial project.
    • unity collab attachments <annotationId> --format ndjson
      writes each attachment as its own row line with no
      "type":"row"
      marker in front, so a line holds one
      type
      (the attachment's kind), as
      unity templates
      rows do. The
      --format json
      items are unchanged.
    • unity collab attachments update sketch
      now changes a sketch's camera, time or metadata on its own, without
      --sketch-data
      , instead of failing with "Sketch Data must not be null or white space." The sketch is read and written back in two requests, so another client's edit to the same drawing in between is overwritten; pass
      --sketch-data
      to set the drawing explicitly.
    • unity collab attachments add sketch
      with only
      --preview
      or only
      --sketch-image
      now stops before sending anything and says both files are needed, instead of failing with HTTP 404 and leaving a half-created sketch attachment behind. Pass both files, or neither.
    • unity collab attachments upload
      no longer leaves an unfinished attachment behind when the file transfer fails, so you can run the upload again on the same annotation. If the attachment cannot be removed, the error names the
      unity collab attachments delete
      command that clears it.
    • unity test --rerun-failed
      exits 6 with "Could not read the previous results" when
      --output
      names an empty file or one that holds no NUnit test run, instead of reporting that no tests failed and exiting 0.
    • unity projects info
      prints
      key<TAB>value
      rows under
      --format tsv
      and when its output is piped, and one JSON line with
      "type":"result"
      under
      --format ndjson
      , instead of the human block.
    • unity projects clone <url>
      refuses a URL with a
      .
      or
      ..
      path segment, an empty path segment, a space, a backslash or a non-ASCII character with an invalid repository or invalid URL error (exit 2), instead of reporting it as unsupported in this environment (exit 1).
    • unity projects upgrade
      on a project that is already open in a Unity Editor now stops with an error that names the running Editor's process, and exits
      6
      . It used to launch a second Editor, which refused the open project, and report the upgrade as in progress with exit
      0
      .
    • unity projects link vcs <path> <url>
      on a project already in your list records its provider, organization and repository, as linking without a URL does, so
      unity projects --vcs
      and
      unity projects info
      show the link.
    • unity collab jira issues link
      links an issue without
      --jira-project-config-id
      , instead of failing with
      HTTP 415: Unsupported Media Type
      .
    • unity collab jira issues create
      without
      --reporter-user-id
      now sends the project config's default reporter instead of failing with HTTP 400.
    • unity collab jira project unlink
      and
      unity collab jira issues unlink
      fail with an HTTP 404 error (exit 6) when the link does not exist, instead of reporting success.
    • unity collab thumbnail download --width
      now refuses a value that is not a whole number of at least 50, such as
      60abc
      ,
      64.5
      or
      49
      , with a usage error before any request. A smaller width made the service answer HTTP 500.
    • unity projects new <name>
      fails with an unknown command error that suggests
      unity projects create <name> --no-cloud
      (add
      --bare
      for a project without the Pipeline package), instead of an error about arguments to
      list
      . Any other unknown word followed by a second word under
      unity projects
      is reported as an unknown command too.
    • unity vcs diff --full
      and
      unity vcs summarize --full
      now name the objects a changed value refers to in objects larger than 4 MB. Without
      --full
      , those names are still left out, and the report now says so: a notice in human output,
      referencesTruncated: true
      in json.
    • unity vcs diff
      and
      unity vcs summarize --objects
      show a reference to a built-in asset with its guid as written,
      guid: 0000000000000000e000000000000000
      , instead of
      guid: 0
      . Any value of exactly 32 hex digits now prints as written.
    • unity projects create -a arm64
      (or
      -a x86_64
      ) no longer creates the project with an Editor of the other architecture when that is the only one installed for the version. It fails as an Editor that isn't installed, and the suggested
      --install-editor
      command installs the architecture you named.
    • Pressing Ctrl-C during
      unity projects create
      or
      unity new
      on Windows now stops the Editor, deletes the private Editor log (which held your home path) and fails with exit code 130, naming the folder that holds the partial project. Before, the command exited silently and left the log in the temp folder.
    • unity self-update
      now refuses an update manifest whose version is not valid semver, with the same "update manifest couldn't be read" error (exit 6) as a malformed one, instead of reporting an empty latest version or requesting a download that 404s.
    • unity collaboration annotations export
      names what to do when the service refuses the export with "No assets found for the provided ids" (an annotation points at an asset that was deleted): run
      annotations count --grouped
      on the exported target to list the targets, then export the ones that still exist with
      --target
      . The service does not say which asset is missing, so the CLI cannot skip it.
    • unity auth login
      in the browser now replaces a stored service account with the new sign-in. Before, it said "You are now signed in" while
      unity auth status
      and other commands kept using the service account until you ran
      unity auth logout
      .
    • When
      unity setup all
      fails to configure an MCP client, the failure now says why (for example that it can't read the client's config file) instead of only pointing at
      unity bug
      .
    • A
      socks5://
      ,
      socks5h://
      or
      socks4://
      proxy now works for downloads, plugin installs and
      unity self-update --check
      . They used to fail with
      unsupported scheme
      without ever contacting the proxy.
    • unity completion powershell
      now completes the global options, such as
      --format
      and
      --color
      , and the values they accept, as the bash, zsh and fish scripts do. It listed only the commands before.
    • unity auth accounts
      ,
      status
      ,
      consumers
      and
      revoke
      now accept the global
      --no-header
      option instead of failing with "isn't supported with these options or in this environment".
    • unity install --changeset <changeset>
      without a version now says "No version specified" and exits 2, like
      unity install
      does, instead of reporting an empty version as invalid with exit 6.
    • unity projects unlink vcs
      fails when the project's
      .git/config
      has a line git cannot parse, leaving the file unchanged, instead of reporting there is nothing to unlink.
    • unity projects audit --timeout
      refuses a value above 2147483647 seconds with the usage error, instead of accepting it and looking for an Editor.
    • On Linux,
      unity editors add <folder> --skip-signature-check
      no longer registers a folder that holds no Editor. It registered
      /tmp
      as an installed Editor with an empty version and exited 0.
    • unity vcs doctor --fix
      on Windows no longer fails with
      VCS_DOCTOR_WRITE_FAILED
      ("The filename, directory name, or volume label syntax is incorrect") on every repair; the
      .gitignore
      ,
      .gitattributes
      and serialization fixes are written again.
    • unity vcs git worktree add --install-editor
      now refuses up front, with exit
      2
      , when the branch needs an Editor that is not installed and the run cannot ask for confirmation. Before, the refusal came after the branch and the worktree folder were created, so running it again failed with the branch already checked out.
    • unity vcs status
      ,
      sync
      ,
      setup
      ,
      doctor
      ,
      conflicts
      ,
      affected
      ,
      switch
      ,
      merge-setup
      ,
      hooks
      ,
      git migrate-lfs
      ,
      git worktree
      and
      uvcs locks
      /
      changesets
      /
      review
      given an empty path (
      ""
      ) now say no path was given and exit
      2
      (
      VCS_PATH_EMPTY
      ). Before, the empty path was read as the current project and the command ran on it.
    • unity docs <topic> --content
      now prints the page as Markdown when the Editor has the Documentation module installed. Before, it opened the local page in the browser and printed nothing.
    • unity mcp help
      now prints the help of
      unity mcp
      , as
      unity mcp --help
      does, instead of failing with "unity mcp isn't supported with these options or in this environment".
      unity mcp help configure
      prints the help of
      unity mcp configure
      .
    • unity mcp configure --list --format tsv
      prints a header and one row per client (
      key
      ,
      displayName
      ,
      configPath
      ,
      status
      ), and
      unity mcp configure <client> --format tsv
      prints the run's result as
      key<TAB>value
      rows, instead of nothing and exit 0.
    • unity build
      ,
      unity run
      and
      unity test
      with
      -a arm64
      (or
      -a x86_64
      ) no longer launch an Editor of the other architecture when that is the only one installed for the version. They fail as an Editor that isn't installed (exit 6), and
      --allow-install
      installs the architecture you named.
    • On Linux,
      --editor-path
      pointing at a directory or at a file that is not executable now stops with
      EDITOR_PATH_NOT_A_UNITY_EDITOR
      and says the path is not a Unity Editor, instead of failing later with a raw
      spawn ... EACCES
      error.
    • unity build
      ,
      unity run
      and
      unity command
      with a
      --log-file
      in a folder that cannot be created (no permission,
      /proc
      ) now say the path is unusable and name the file and the flag, instead of "An unexpected error occurred".
    • unity ci init --provider gitlab
      now writes a pipeline that changes into a project folder whose name holds
      : 
      or
       #
      , such as
      a: b
      , instead of one GitLab reads as a mapping or cuts short.
    • unity docs --content
      exits 7 (network unreachable) when the page request gets no answer after the page index answered, the same as when the index is unreachable, instead of exit 6. A page request that times out exits 14 and one whose connection is reset exits 6, as the exit codes table says.
    • unity templates pack
      refuses an
      --output
      that reaches the project being packed through a symlink, a Windows junction or an 8.3 short folder name, the same as a direct path inside the project (exit 2), instead of writing the archive into the project.
    • unity templates create
      and
      unity templates pack
      now say why a permission error stopped them, as
      Permission denied: <path>
      , instead of printing only
      UNABLE_CREATE_TPL
      . The JSON
      errors[0].message
      carries the same text and
      errors[0].code
      and the exit code
      6
      are unchanged.
    • unity install-modules --editor-version <version>
      with no Editor installed now points you to
      unity install <version>
      . Before, it only said that no editor was found for the version.
    • unity install-modules -m <module>
      exits 0 when every module you name is already installed, as
      unity editor module add
      does: it prints
      All modules are already installed.
      , or the empty plan under
      --format json
      and
      ndjson
      . Before, it failed with
      No modules found to install.
      and exit code 6.
    • unity editor module
      ,
      unity editors module
      and
      unity install-modules --list
      now show the
      Aliases
      column (the
      aliases
      field in
      --format json
      and
      ndjson
      ), like
      unity modules
      and
      unity install --list-modules
      already did. The column comes last, so existing
      tsv
      pipelines keep their field order.
    • unity projects clone
      with a URL that has no repository path, such as
      https://github.com
      , now says the URL is invalid instead of blaming a
      --vcs-repo
      option that was never passed.
    • unity auth consumers
      no longer prints raw escape codes from an application name, scope or time in the human and tsv tables when the broker's audit log was edited or written by another tool. json and ndjson output is unchanged.
    • unity cloud org
      and
      unity cloud project
      exit with code 3, instead of 6, when the Unity services refuse the request with an HTTP 401 or 403 after you have signed in. The error code and message are unchanged.
    • unity editor module add
      now reads
      UNITY_INSTALL_RETRIES
      as
      unity install-modules
      does, retrying a failed module download that many times (default 2), and warns when the value is not a non-negative integer, instead of always running with 0 retries.
    • unity templates delete
      removes the deleted template's entry from the template sources, so a template made with
      unity templates create
      no longer leaves a stale source behind.
    • unity projects unlink cloud --cascade-vcs
      and
      unity projects unlink vcs
      end their failure message with one period when the system's own error text already ends with one, instead of two.
    • unity logs --follow
      and the other commands that stop on Ctrl-C now leave SIGINT and SIGQUIT ignored when the parent process ignored them, as a background job started from a script does. Before,
      logs --follow
      installed its own handler anyway and exited
      130
      .
    • Pressing Ctrl-C at the
      Update it?
      question of
      unity mcp configure
      now ends the command with the
      INTERRUPTED
      code and exit 130, like every other prompt, instead of exiting 1 with a generic failure hint. The config file is left as it was.
    • unity editors add
      now tells you to run
      unity editors add --skip-signature-check <path>
      with the Editor path, shell-quoted, when it refuses an Editor that is not signed by Unity Technologies, in every language.
    • On Windows,
      unity self-uninstall
      keeps retrying for up to 30 seconds to remove
      unity.exe
      when another process still holds it, such as an MCP server started from it, and no longer leaves its temporary cleanup folder behind.
    • PowerShell completion now offers a command group's subcommands after a space. Pressing Tab after
      unity auth 
      listed the top-level commands again; it now lists
      login
      ,
      status
      ,
      accounts
      and the rest, as
      unity auth ac
      already did.
    • Pressing Ctrl-C during
      unity vcs sync
      and the other
      vcs
      commands that run git now ends the git process with the CLI, so a pull or push no longer finishes in the background after the CLI reported it stopped.
    • unity projects --watch
      now follows the project list. A project added or removed from another terminal while the watch runs appears or disappears on the next poll.
    • On Linux and macOS, with a group-writable umask such as
      0002
      and a shared temp folder,
      unity
      now creates its private cache fallback folder owner-only instead of refusing it. Before, commands that need scratch space failed for those users.
    • Bash, zsh and PowerShell completion now skip a global option's value before the command.
      unity --proxy http://localhost:8080 editors 
      treated the URL as the command and offered nothing in PowerShell and zsh, or the wrong list in bash; it now lists the
      editors
      subcommands, as
      unity editors 
      does, with
      --proxy value
      and
      --proxy=value
      alike.
    • In fish,
      unity --proxy <url> <TAB>
      now offers the commands, as
      unity <TAB>
      does. The fish completion skips the value of an option that takes one before it decides which command you are typing.
    • unity projects
      and
      unity close
      now stop with the same "project list can't be read" error as
      unity projects add
      when Unity Hub's project database is damaged or is not a file, instead of showing no projects or reporting the project as not open.
    • unity templates pack
      stops with exit code 130 and
      Interrupted.
      when you press Ctrl-C while it archives the project, and removes its temporary files, instead of reporting
      Template packing failed
      with exit code 6.
    • unity templates location --set
      and
      --reset
      now refuse, and leave
      templatesSettings.json
      untouched, when that file can't be read as settings (cut short, starting with a byte-order mark) or has custom template sources but no valid
      defaultPath
      . Before, the sources were replaced with an empty list and the command reported success.
    • unity projects size
      warns about a folder it could not read, and marks the JSON result as partial with the folders it skipped, instead of leaving the folder out of the total without a word.
    • unity cloud project
      without paging flags exits 7 (service unreachable) when it cannot reach the service, as
      unity cloud project --limit 10
      already does. The partial listing and its
      CLOUD_PROJECT_LIST_PARTIAL
      code are kept in the output.
    • unity install-path
      and
      unity editors install-path
      now warns, naming the file, when
      secondaryInstallPath.json
      exists but holds no usable path (not valid JSON, truncated or empty), instead of silently printing the default editor install path. The install path in use does not change.
    • unity uninstall
      no longer deletes an Editor whose architecture the Hub's editor list does not record. Without
      --architecture
      it now stops with a message and removes nothing; pass
      --architecture
      to remove it.
    • unity build --profile
      and its "Available profiles" list now ignore a folder named like a Build Profile (
      Name.asset
      ), as
      --list-profiles
      already did. Before, the folder was listed, and choosing it by name failed with "not a .asset file".
    • unity vcs setup --vcs <value>
      now says a self-hosted host name is accepted when it refuses an unknown provider, as
      --help
      does. When the provider CLI for a self-hosted host has no session, the refusal now names that host's sign-in (for example
      gh auth login --hostname git.example.com
      ) instead of the bare
      gh auth login
      , which signs in to github.com.
    • unity collab --some-unknown-option
      (and the same typo at
      collab jira
      ,
      collab jira server
      ,
      collab reactions
      and the other
      collab
      groups) now prints
      error: unknown option
      and exits 2, as every other command group does, instead of printing the group's help and exiting 0. A bare group and
      --help
      still print help.
    • unity templates create
      says
      The output folder does not exist: <path>
      for a
      --output
      folder that is missing, and tells you to pick another
      --name
      or add
      --overwrite
      when the template already exists, instead of printing an internal error name. The same sentence is in the
      message
      of the JSON and NDJSON error.
    • unity pipeline install
      and
      unity pipeline upgrade
      no longer crash when the current directory can't be read (a permission refusal such as macOS blocking a protected folder). They skip it and use the running Unity Editor, or ask you to pass
      --project-path
      when none is running.
    • Inside Claude Code, the CLI no longer suggests installing the Unity plugin when Claude Code already has the Unity skills from
      unity skill install
      . The plugin would list the same skills a second time.
    • An Editor opened with
      unity open
      while Unity Hub is closed no longer logs
      IPC stream failed to write (Timed out)
      warnings during a domain reload. The CLI keeps reading the Editor’s requests while an earlier answer is still on its way.
    • unity collaboration annotations export
      with no
      --target
      asks for the whole project instead of one target path, which could return no annotations.
    • unity ci init
      refuses a project folder whose name holds a Unicode line or paragraph separator (U+2028, U+2029) with exit 2, the same refusal control characters already get. GitLab reads those characters as line breaks, so the generated
      .gitlab-ci.yml
      gained an extra line.
    • unity recompile
      no longer exits 7 with "socket hang up" when the compile it starts reloads the domain and resets the request. It keeps waiting for the compile and reports its result once it ends.
    • unity job wait
      exits non-zero for a detached
      script eval
      that threw, like the attached run does, instead of exiting 0.
    • unity install <version> --dry-run
      prints its plan under
      --format tsv
      and
      --format ndjson
      , where it used to print nothing and exit 0.
    • unity auth revoke
      now matches an application name exactly as
      unity auth consumers
      prints it, so a name holding a line break no longer turns into two identical rows when you revoke it.
    • unity pipeline upgrade
      no longer calls a Pipeline package pinned to a Git URL or branch already up to date. It says the package is kept on that Git pin and names it, and leaves the manifest as it is, as it does for a package pinned to a
      file:
      path (a local checkout).
    • unity install <version> --force
      now reinstalls the Editor in the folder it is already in, replacing the old files, instead of writing a second copy to a
      <version>-<arch>
      folder beside it. The same goes for
      --download-directory
      with
      --force
      .
    • unity templates create
      and
      unity templates pack
      now leave a project's embedded packages (the package folders under
      Packages/
      ) out of the template archive, as
      --keep-embedded-packages
      describes, so a private embedded package no longer ships inside a shared template. Pass
      --keep-embedded-packages
      to include them.
    • unity uninstall
      ,
      unity editors prune --remove
      and
      unity editors upgrade --replace
      no longer open an administrator password dialog when there is no terminal to answer it (input from a pipe or file,
      --non-interactive
      , CI, or
      --format json
      /
      ndjson
      /
      tsv
      ). When an Editor folder holds files you can't delete, the command now stops with a usage error (exit code 2, code
      UNINSTALL_ELEVATION_NEEDS_TERMINAL
      ) before anything is removed, and tells you to run it from a terminal or as root.
    • HUB_FORMAT
      is read again as the deprecated alias of
      UNITY_FORMAT
      when
      UNITY_FORMAT
      is not set. It raises the same deprecation warning as other deprecated spellings, in json
      warnings
      or on stderr.
    • unity projects create
      refuses a name that starts or ends with a space (exit 6,
      Invalid project name
      ), as it already refuses a name ending in a period, instead of creating the project under the trimmed name.
    • unity command
      ,
      unity editors running
      and
      unity status
      no longer fail and send a crash report when the folder you run them from has been deleted. They skip that folder and look for running Editors as usual.
    • unity auth logout --format json
      and
      --format ndjson
      print a success result (
      {"signedOut": true}
      ) instead of the "You have been signed out." notice. The ndjson result is one
      "type":"result"
      line.
    • unity auth logout <account> --format ndjson
      prints one
      "type":"result"
      line with the same data as
      --format json
      , instead of the human notice.
    • unity mcp configure --local
      and
      --list
      report that the current directory cannot be read, with exit code 6, when the folder you run them from was deleted, instead of a generic refusal.
    • unity self-update
      now exits with code 1 and the error code
      UPGRADE_NO_BINARY
      when the release has no download for your platform, or
      UPGRADE_NO_APPIMAGE
      when it has no AppImage, instead of exit 6 with
      COMMAND_FAILED
      .
    • unity collab read --timestamp
      accepts a date in a form other than ISO 8601, such as
      Fri, 02 Jan 2026 03:04:05 GMT
      : it is sent to the service as its UTC time, instead of being rejected by the service. A value that is not a date, or is outside years 1 to 9999, is refused before any request is made.
    • unity templates list --format json
      gives every template
      isUserGenerated
      and
      isNew
      fields,
      false
      when a template is neither, so a script can read both on each item.
    • unity projects clone --ref
      now accepts a commit id, full or abbreviated, as its help says: the repository is cloned and that commit is checked out. Before, a commit id failed with
      Remote branch <sha> not found in upstream origin
      .
    • unity projects open a b
      now exits 2 with the too-many-arguments usage error, as
      unity open a b
      does, instead of exiting 1 with
      UNSUPPORTED_STATE
      .