Documentation

Unity Version Control

11.x release notes for 2026

Review the 2026 release notes for version 11 of Unity Version Control.
Read time 61 minutesLast updated 4 days ago

This page contains the Unity Version Control 11.x releases published in 2026, organized from newest to oldest. For other years, refer to 11.x release notes.

11.0.16.10616

Note
Public | 2026/11/05

New

All platforms - Command-line: Faster
cm ls
on trees with many owners

cm ls
is faster on trees with many owners. To print owner names, it now sends one request to each server, instead of one request for each item. When the format doesn't include the owner, as with the default format and
--tree
,
cm ls
doesn't request owner names at all. It also doesn't load branch information when the format includes no branch or location. The output is the same as before.
Refer to cm ls.

All platforms - Command-line: Comment counts and reviewers in
cm find review

cm find review
and
cm find mergerequest
now print the review information that the Desktop GUI already shows. You can use the following new
--format
fields, which are also in the
--xml
output:
  • {reviewers}
    : every reviewer and their review status
  • {modifieddate}
    : date of the last activity
  • {comments}
    : number of comments, questions, change requests, and their replies
  • {unresolvedissues}
    : number of change requests that aren't applied and questions that aren't answered
  • {unresolvedchanges}
    and
    {unansweredquestions}
    : the two parts of the
    {unresolvedissues}
    count
  • {guid}
    : the review GUID
The
{comments}
count doesn't include replies that discard a change request.
cm find mergerequest "where owner='me'" --format="{id} {title} {reviewers} {comments} {unresolvedissues}"

All platforms - Command-line: Comment path, item, and edit date in
cm find changereviewcomment

cm find changereviewcomment
prints three new fields, in
--format
and in the
--xml
output:
  • {path}
    and
    {itemid}
    give the file a comment is on. Comments that aren't on a file print an empty path and item ID.
  • {modifieddate}
    gives the date of its last edit.
cm find changereviewcomment "where reviewid = 1367" --format="{path}:{line} {comment}"

All platforms - Command-line: Machine-readable reviewers and review status

cm codereview reviewer list
and
cm mergerequest reviewer list
now accept
--xml
(or
--xml=<file>
) and
--encoding
, so scripts can read the reviewers and their status as XML.
cm find review
and
cm find mergerequest
have two new format fields,
{codereviewstatusname}
and
{mergerequeststatusname}
. They print the status in English regardless of the client language, in the same words that
--status
and
--mergerequeststatus
accept. The
where
clause of both commands also accepts these English words, as well as the words in the client language and the numbers.
Previously,
cm codereview -e --status
on a code review with no reviewers did nothing. It now fails with a message that points to
cm codereview reviewer add
and
cm codereview review
.

All platforms - Command-line: Set the review description from the command line

cm codereview
and
cm mergerequest
can now set the description of a code review or merge request. This is the text that the Desktop GUI shows at the top of the review.
When you create a review, or edit one with
-e
, use
--description
to set the text, or
--descriptionfile
to read it from a file. To read the description from the standard input, use
--descriptionfile=-
.
When you edit a review,
--description
replaces its description, or adds one if the review has none.
To clear the description, use an empty value:
--description=
.
cm mergerequest create /main/task001 "Add feature" --destination=/main --descriptionfile=description.mdcm codereview -e 1367 --description="Retries the token refresh once."
When you edit the description with
cm codereview comment edit
or
cm mergerequest comment edit
, the Desktop GUI now keeps showing it as the review description.
Refer to cm codereview.

All platforms - Command-line: Comment on deleted files and on a specific revision in reviews

cm codereview comment add
and
cm mergerequest comment add
can now comment on a file that the review deletes.
--path
anchors the comment to the revision that the diff shows for that file, as the Desktop GUI does. The new
--revision
option comments on a specific revision, for example
--revision=revid:1234
. It must be one of the revisions that the diff of the review, or of
--changeset
, shows. Inline comments now also work on shelve reviews.
Refer to cm codereview.

All platforms - Command-line: Subscribe to code review and merge request emails

cm codereview
and
cm mergerequest
have three new subcommands for your own review email subscription:
subscribe
,
unsubscribe
, and
subscription
.
subscription
prints whether you're subscribed, the reason (owner, reviewer, commented, mentioned, manual, unsubscribed, or none), and whether review emails are enabled for the repository. The values are fixed English words that scripts can parse, and the command also accepts
--format
.
cm mergerequest subscription 1367
The output looks like this:
subscribed: yesreason: owneremails: enabled
To stop receiving the emails of a review, run
cm mergerequest unsubscribe 1367
. After you unsubscribe, you're subscribed again automatically when you comment on the review, someone mentions you, or someone adds you as a reviewer again.
Refer to cm codereview.

All platforms - Command-line: Mark a review change request as applied

cm codereview comment apply
and
cm mergerequest comment apply
mark a change request as applied in a changeset, and
comment unapply
marks it as not applied again. Previously, only the
[apply-change:]
marker in a check-in comment could set it.
cm
fails with an error when it can't save the change, for example when you don't have the
change
permission on the reviewed branch.
cm mergerequest comment apply 27658884-5dcc-49b7-b0ef-a5760ae740a3 --changeset=cs:1520cm mergerequest comment unapply 27658884-5dcc-49b7-b0ef-a5760ae740a3
Refer to cm codereview.

All platforms - Server: Fewer server threads used by REST API downloads

The server now sends REST API downloads, such as file downloads from the Workbench or Storage downloads, asynchronously, without keeping a server thread busy for each download in progress. Previously, every active download blocked a thread while it waited for the client to receive the data. When many downloads ran at the same time, or downloads were slow because of large files or slow or distant clients, the server had to keep creating threads, which used more memory and could delay other requests while they waited for a free thread.
In internal tests with 50 simultaneous slow downloads of 20 MB each, the server used about a quarter of the threads (17 on average instead of 65) and delivered the same data in the same time.

Bug

All platforms - Command-line:
cm ls
shows the owners of items in xlinked repositories

{owner}
in
cm ls
now shows the owner names of items inside an xlinked repository.
cm ls
resolves them on the server that hosts that repository.
Refer to cm ls.

All platforms - Command-line:
cm merge --conflict-markers
now exits with code 1 while conflict markers remain

When you run
cm merge --merge --conflict-markers
again and files from the earlier merge still have conflict markers, the command now lists those files and exits with code 1, the same as
cm merge --list-conflict-markers
. It keeps exiting with code 1 until you resolve the markers. Previously, it printed "No merges detected" and exited with code 0, so scripts that checked the exit code treated the merge as finished.
Refer to cm merge.

11.0.16.10570

Note
Public | 2026/10/29

New

All platforms - All clients: Token-based authentication for UPWorkingMode

Servers configured with UPWorkingMode (
users.conf
and
groups.conf
) answer the login with a token, as LDAP servers already do. The client keeps the user and the password in
client.conf
or in the connection profile and caches the token in
tokens.conf
, so the password hash is no longer sent on every call. The client renews an expired token automatically, and replaces a token that the server rejects with a new one from the stored password, without asking for credentials again.
cm configure
and
cm profile create
accept
--token
together with
--password
on UPWorkingMode: the password goes to the configuration and the token to
tokens.conf
.
cm configure --language=en --workingmode=UPWorkingMode --user=john --password=secret --token=<token> --server=myserver:8087
cm passwd
discards the cached token and gets a new one for the new password. Older servers keep working as before: they answer with the password hash and the client uses it on every call.
Refer to cm configure and cm passwd.

All platforms - Desktop GUI: Toggle to turn off branch colors in the Branch Explorer

The Advanced filters & format options of the Branch Explorer now include an On/Off toggle for branch colors, in the same row as the Add inclusion, Add exclusion, and Add format buttons. When it's off, the Branch Explorer draws every branch in the default color, and keeps your format rules. Turning it on again brings the rule colors back. This helps when taking screenshots to share, since branch colors set for personal use can confuse other people.
When the Desktop GUI is already running, opening a
plastic://
link, such as a diff or file link shared in a browser or a chat, now opens it in that running instance instead of starting a new one. A file link reuses the workspace window that is already open for its repository.

All platforms - Command-line:
cm patch
no longer needs GNU Diff

cm patch
now calculates the differences itself, so creating a patch no longer requires GNU Diff to be installed. Applying a patch with
cm patch --apply
still uses the Patch tool.
Patches now use the git diff format, so moved files show up as renames instead of a full delete and add. Applying a patch that renames files needs GNU Patch 2.7 or later.
Changed binary files are now only listed, as
Binary files a/<path> and b/<path> differ
, which keeps the patch small and readable. To include their content, so that applying the patch also restores the binary files, add
--include-binaries
:
cm patch cs:4@default --output=changes.patchcm patch cs:4@default --include-binaries --output=changes.patch
Refer to cm patch.

All platforms - Command-line:
cm status --format
prints changes with a custom format

cm status
accepts a
--format
option that prints one line for every pending change, with the placeholders of the template replaced. It lists the same changes and status codes as
--machinereadable
, and adds the size, the last modification date, the item type, and the file type, which no other compact output includes. This makes it easy to read the status of large workspaces from scripts and tools without parsing the much larger
--xml
output.
cm status --format="{status}{tab}{size}{tab}{relativepath}"CH 1532 /src/main.cAD 240 /docs/readme.txt
--format
prints only the changes, without the workspace status, so it doesn't contact the server. Refer to cm status.

All platforms - Server: Personal Access Tokens in UPWorkingMode

UPWorkingMode servers support personal access tokens (PATs).
cm accesstoken create
,
list
,
reveal
, and
revoke
, and the REST endpoints, work once the feature is enabled in
server.conf
:
<AccessTokensSettings> <Enabled>true</Enabled> <AccessTokenLifespan>180.00:00:00</AccessTokenLifespan> <AllowedUsers>all</AllowedUsers></AccessTokensSettings>
From the client, you can use a PAT on its own as the credential, for example
cm repo list --workingmode=UPWorkingMode --token=<pat> --server=myserver:8087
. Git access over HTTP with a PAT isn't available yet on UPWorkingMode servers.

Bug

All platforms - Desktop GUI: Task IDs now sort by number in the task lists

Sorting the ID column of the pending tasks list, in the Create branch dialog (From task tab) and in the Select issues from dialog, compared IDs as text, so task 192 appeared after task 1243. The column now sorts IDs by their numeric value in both directions, and lists IDs that aren't plain numbers after the numeric ones.

All platforms - Desktop GUI: Fixed diff view jumping back when scrolled horizontally

In the side-by-side diff, scrolling down while the view was scrolled horizontally could make it jump back several lines when a long line left the view. The left and right panels could also end up a few columns apart until the horizontal scrollbar was dragged again. Both panels now keep their vertical position and stay aligned horizontally.

All platforms - Desktop GUI: Go to moved code now scrolls to the moved method

In the semantic diff, a method that moved within a file shows a moved icon in both panes. Choosing Go to moved code from the left pane scrolled both panes to the first line instead of to the method's new location on the right. It now scrolls to the moved method.

All platforms - Gluon: Fixed check-in failing after renaming a folder with changes inside

Checking in a folder rename together with changes to items inside that folder (renamed, modified, or added files) failed at the end of the operation with an error like "The given key '13566' was not present in the dictionary." The check-in was rolled back, and the only workaround was to split it into several check-ins. This affected both Gluon and
cm partial checkin
. These check-ins now complete successfully.

All platforms - Command-line: Fixed
cm shell
failing to write output to a file

When running
cm shell
with
--shelloutputfile
, commands that download many files, such as
switch
or
update
, could randomly fail with "Destination is too short", or make the whole
cm shell
exit with "Unable to translate Unicode character ... to specified code page". This no longer happens.

All platforms - Server: Fixed valid tokens refused while a repository is being deleted

While a repository was being deleted, the server could reject the authentication of a valid user or token for unrelated requests from other users of the same organization. This no longer happens.

All platforms - TeamCity plugin: Checkout rules with path transformations now applied in agent-side checkout

With agent-side checkout (Always checkout files on agent), the plugin ignored checkout rules that mapped a repository path to a different location (for example,
+:src => code
). These rules are now applied, so agent-side checkout produces the same directory structure as server-side checkout.

All platforms - TeamCity plugin: The
cloaked.conf
file is no longer deleted from the agent's workspace

With agent-side checkout, the plugin deleted the
cloaked.conf
file from the agent's working directory when the build configuration had no checkout rules. The file is now preserved between builds.

11.0.16.10512

Note
Public | 2026/10/22

New

All platforms - Command-line: Resolve merge conflicts on disk with conflict markers

cm merge --conflict-markers
finishes a merge that has text file conflicts without opening a merge tool. It writes each conflict into the workspace file between standard diff3 conflict markers, so you can resolve it in a text editor, from a script, or with a coding agent that can't drive a GUI.
cm checkin
refuses the check-in while a file still contains markers.
cm merge br:/main/task001 --merge --conflict-markers
Refer to cm merge.

All platforms - Command-line: Code review comments and reviewers in
cm codereview

cm codereview
(
cm cr
) has three new subcommands that work on branch, changeset, and shelve reviews:
  • comment
    adds, replies to, edits, and deletes review comments, on the whole review or on a line of a file.
  • reviewer
    adds, removes, and lists the reviewers of a review.
  • review
    sets your own review status, or asks reviewers to review again.
cm cr comment add 1367 -c="Rename this" --path=/src/foo.cs --line=42cm cr review 1367 --re-request --all
Refer to cm codereview.

All platforms - Command-line: Set reviewers and change titles with
cm codereview

cm codereview
sets the reviewers of a new review with
--users
and
--groups
.
cm codereview -e
changes the title of a review with
--title
.
Refer to cm codereview.

All platforms - Command-line:
line
field in
cm find changereviewcomment

cm find changereviewcomment
prints and filters by
line
, which counts from 1, like a text editor and the
--line
option of
cm cr comment add
.
The filter accepts
=
and
!=
.
location
keeps the stored value, which counts from 0.
line
is empty for comments that aren't on a line of a file.
cm find changereviewcomment "where reviewid=1367 and line=106" --format="{guid} {type} line {line}"

All platforms - Command-line: Edit the comment of a branch or a label

cm branch editcomment
and
cm label editcomment
replace the comment of an existing branch or label, in the same way that
cm changeset editcomment
does for changesets. Editing a label comment leaves the label on the changeset it's applied to.
Behavior change:
edit
is an alias for
editcomment
, so
cm branch edit
and
cm label edit
now edit a comment instead of creating a branch or label named "edit". To create a branch or label, use
cm branch create edit
or
cm label create edit
.

All platforms - Command-line:
cm changeset editcomment
reads the comment from a file

cm changeset editcomment
can now read the new comment from a file with
-commentsfile
, and an empty comment (
""
) clears the comment.

All platforms - Command-line: Faster commands that print user names

cm find
,
cm history
,
cm annotate
, and
cm repo list
now resolve all the user names they print in a single request to the server, instead of one request for each user.
Commands that list many objects owned by different users run several times faster. For example, listing the branches of a large repository with their owners (or with
--xml
) takes about 1.5 seconds instead of 9. The output is unchanged.

Bug

Links in Desktop GUI messages now line up with the surrounding text.
Previously, the following were displayed below the rest of the sentence:
  • The pending changes view and here links in the "Merge finished" message of the Merge view.
  • The changeset link in the check-in notification.
  • The shelve link in the shelve notification.

All platforms - Desktop GUI: Fixed empty tips panel

The Tips panel now closes correctly even when its view isn't visible. Previously, if a tip closed while you were in another view, going back to that view showed an empty panel with only the Disable all tips checkbox and the OK button.
For example, this happened after a check-in from the Workspace Explorer refreshed the Pending Changes view, or when a tip closed on its own after a few minutes.

All platforms - Command-line: Fixed
cm changeset editcomment
changing comments when its arguments are invalid

cm changeset editcomment
now keeps a comment such as "Is it ready?" as typed, instead of expanding it as file names. When words are left over, as with an unquoted
Fix the login timeout
, or when an option takes the place of the comment, the command now shows its usage and leaves the comment unchanged.
Previously, it kept only the first word, or cleared the comment.

Windows - Command-line: Fixed slow
cm shell
startup on Cloud Edition

On Cloud Edition,
cm shell
now executes its first command in about 0.3 seconds, even when multiple shells start at the same time. Previously, it took 3–4 seconds, or about 9 seconds with several shells. This also speeds up the startup of IDE plugins and other tools that rely on
cm shell
.

All platforms - Command-line: Fixed Unity organizations shown as IDs in
cm
output

cm
now shows Unity organizations by name (
repo@MyOrg@unity
) in all its output.
Previously, the following outputs printed them as numeric IDs (
repo@1375488836673@cloud
):
  • cm status --xml
  • cm status --wkconfig --cset
  • cm history --xml
  • The xlink items of
    cm merge --xml
  • The name field of
    cm profile list --format
  • Several error messages.
The XML layout is unchanged, so tools that parse it keep working.
cm profile delete
also accepts the organization name of a Unity organization profile.

11.0.16.10484

Note
Public | 2026/10/15

Bug

Windows - All clients: Fixed failure when renewing an expired token in parallel

When several commands renewed an expired token at the same time, some of them failed with "The process cannot access the file '...\tokens.conf' because it is being used by another process."
This happened, for example, when a client ran several
cm
commands at startup.
Now, a command that saves
tokens.conf
waits while another process is reading it, so the save no longer fails.

All platforms - SemanticMerge: Fixed automatic merge dropping members of a new interface

An automatic semantic merge could leave a newly added interface empty by silently dropping its member declarations without reporting a conflict. This happened when the source contributor also moved a member from one interface to another.
The merge now keeps the members of the new interface.

All platforms - Server: Fixed initial check-in with a custom
blobspath

Before, the first check-in to a newly created repository failed when setting
blobspath
in
jet.conf
to a path outside the server's default storage, such as a dedicated disk or a network share. The server created the repository's metadata folder but not the matching blob folder at the custom location, so it couldn't write the blob index file and the check-in failed.
The server now creates the repository's blob folder when the repository is created, so the initial check-in succeeds with any
blobspath
. Repositories using the default (empty)
blobspath
are unaffected.

11.0.16.10468

Note
Public | 2026/10/08

New

Linux - Installers: New repositories for UVCS Linux packages

UVCS Linux packages are now published in new Debian and RPM repositories, which replace the legacy ones. Some modern distributions (such as Debian 13, Fedora 43, and later) rejected installs from the legacy repositories due to deprecated signature algorithms. The new repositories use updated signing standards and are signed under the "Unity Technologies ApS" identity.
Refer to Install Unity Version Control on Linux for updated instructions.
If you are migrating from the legacy repositories, note:
  • Fedora: Use
    dnf upgrade
    instead of
    dnf install
    .
  • SUSE: Pass
    --allow-vendor-change
    flag to the
    zypper install
    command.

All platforms - All clients: Skip compression for well-known already-compressed file formats

Until now, check-in tried to ZLib-compress every file unless a
compression.conf
rule excluded it, including files whose format is already compressed. Re-compressing already-compressed content makes the operation slower and consumes more resources (CPU and memory during the check-in), only to produce data that is the same size or slightly bigger.
Check-in now automatically skips compression for well-known already-compressed formats, with no configuration needed:
  • Images: .jpg, .jpeg, .png, .gif, .webp, .avif, .heif, and more
  • Video: .mp4, .mkv, .avi, .mov, .webm, and more
  • Audio: .mp3, .aac, .ogg, .wma, .flac, and more
  • Archives: .zip, .gz, .bz2, .xz, .7z, .rar, .zst, and more
  • Documents: .docx, .xlsx, .pptx, .pdf, .odt, .ods
  • Packages and fonts: .unitypackage, .apk, .jar, .nupkg, .woff2, and more
These formats always skip compression, even if a
compression.conf
rule says otherwise. Your rules keep applying to every other extension. Importing from Git already behaved this way, and the regular check-in flow now matches it.

All platforms - All clients:
--token
no longer overwrites
tokens.conf

Passing
--token
on the command line made the client write the supplied token to
tokens.conf
, replacing the entry stored for that server and user. A one-off command run under a different identity, such as a CI job or a service account, left its token behind in the local store.
The client now keeps a token passed with
--token
in memory for the lifetime of that single command and leaves
tokens.conf
alone. This applies to the default file and to one set with
--tokensconf
. Tokens the client obtains by renewing or re-authenticating during that command stay in memory too.
cm configure
and
cm profile create
still write the token, because storing credentials is what those commands are for.

All platforms - Desktop GUI: Show in Branch Explorer in changesets, branches and labels views

The context menu of the Changesets, Branches and Labels views now includes a Show in Branch Explorer option. It switches to the Branch Explorer and centers the diagram on the selected changeset, branch or label.
When the object is older than the current date filter, the view widens the filter automatically so the object becomes visible. If the object still cannot be displayed (for example, a branch or user filter excludes it), the previous date filter is restored and a warning dialog explains that the object is not visible with the current filters.

All platforms - Desktop GUI: The object you navigate to is centered and selected

Navigating to a changeset, branch or label in the Branch Explorer now always centers it in the diagram instead of leaving it near the edge of the visible area, selects it as if it had been clicked, and gives the focus to the diagram, so the keyboard navigation continues from that object.
The Branch Explorer also selects the object again after refreshing, so a branch or a label created or renamed from its context menus is centered and selected when the diagram reloads.

All platforms - Desktop GUI: Switch to the reviewed branch from the Code Reviews view

The context menu of the Code Reviews view now has a new Switch workspace to this branch option. It switches the workspace to the branch of the selected code review, which saves looking the branch up in the Branches view or the Branch Explorer before building or testing the changes under review.

All platforms - Desktop GUI: Review comments sorted by date in the code review window

The Review comments summary in the Review changes tab of the code review window now has a new Date modified column in the lists of change requests, questions and comments. It shows when each comment was written or last edited. The lists are sorted by this column by default, newest first, so the latest feedback is at the top. Before, they were sorted alphabetically by the comment text.

All platforms - Desktop GUI: Collapsible sidebar in the code review window

The sidebar of the code review window now shows the name of each tab, Overview and Review changes, next to its icon, in the same style as the workspace window sidebar.
The Overview tab has a new icon that better represents its contents.
A button at the bottom of the sidebar collapses it to show only the icons, and expands it again. The collapsed or expanded state is remembered, so the code review windows opened later use it.

All platforms - Command-line: Resolve merge-to file conflicts from a file

cm merge --to
takes the resolution of each conflicting file from a JSON file with the new
--fileconflictsresolutionsfile
option, without asking. For each file, the resolution either keeps the source or destination revision, or uses the content of a file that is already merged. Conflicts not listed in the file are resolved as before, for example with
--keepdestination
. This lets tools that resolve conflicts in their own UI finish a server-side merge with
cm
.
$> cm merge br:/main/task001 --to=br:/main --merge --fileconflictsresolutionsfile=/tmp/resolutions.json
{ "resolutions": [ { "path": "/src/Player.cs", "resultFile": "/tmp/merged/Player.cs" }, { "path": "/art/logo.png", "keep": "source" }, { "path": "/README.md", "keep": "destination" } ]}
Each
path
is the conflicting file's path as
cm merge --to --machinereadable
prints it in its
FILE_CONFLICT
line, including files inside writable xlinks. If any resolution is not valid, the merge stops before anything is uploaded and names the wrong entry. The option also works with
--shelve
and shelve sources.
cm
never changes or deletes the resolutions file or the result files.

All platforms - Server: Smart Locks support moving changesets and promoting branches

Moving changesets to another branch and promoting a branch now keep Smart Locks up to date. A retained lock follows its changesets to the new branch, so it still protects the asset there. The lock is released when the changesets reach the lock's destination branch, either through the promote itself or through a later merge.
Promoting a branch also moves any locks the branch still holds to its parent, so no lock is left on the deleted branch.
Moving or promoting changesets that change an item someone has exclusively checked out is not allowed. The operation fails and lists the locked items.

Bug

All platforms - Desktop GUI: Fixed check-in failing in tree view with repeated folder names

The Pending Changes view built a wrong hierarchy when view as tree was enabled and the workspace contained a folder with the same name as one of its parent folders, such as
Assets/MyPackage/TPS/Assets
. An extra top-level folder appeared next to the real root, one item went missing from the view, and the check-in failed with the error "An item with the same key has already been added". The only way around it was to switch back to the list view.
The tree now nests those folders under their real parent, and the check-in completes.

All platforms - Desktop GUI: Fixed "Manual conflict resolution" ignored when a premerge tool runs first

Ticking Manual conflict resolution in the merge options had no effect on files whose configured merge tool chain began with a premerge tool. The chain stopped at the first tool that exited successfully, so UnityYAMLMerge running with
-p
auto-merged the file and the interactive tool at the end of the chain never opened. The conflict ended up resolved without the user ever seeing it. This affected the typical Unity setup for
.prefab
and
.unity
files.
With Manual conflict resolution ticked, the merge now skips the earlier entries of the chain and runs only the last tool, so the interactive tool opens for every conflicting file. Single-tool chains and the default automatic mode behave exactly as before.

All platforms - Desktop GUI: Tabs now align text to tab stops

Text after a tab did not line up in the file viewers, because every tab moved the text a fixed distance instead of up to the next tab stop. Code or comments aligned with tabs looked misaligned compared to a code editor.
Tabs now expand to the next multiple of the configured tab size, as in a code editor. This applies to the content view in Pending changes, the diff viewer and the merge tool, whether or not the whitespace glyphs are shown.

All platforms - Desktop GUI: Code Review "Show pending to integrate" no longer ignored when switching tabs

In the Code Review window, switching from Review changeset by changeset back to Review entire branch listed all the branch changes again, even with Show pending to integrate checked. The button had to be unchecked and checked again to filter the list. The selected option is now kept when switching between both review modes.

All platforms - Desktop GUI: Code Review "Show pending to integrate" changes updated on refresh

In the Code Review window, the changes shown with Show pending to integrate checked were calculated once and were not updated when the review was refreshed, so the list could keep an outdated set of changes.
Refreshing the review now recalculates the changes pending to integrate and shows them again, keeping the Show pending to integrate selection.
Switching back to Review entire branch is also faster on branches that have nothing pending to integrate. The window asked the server whether the branch had changes to integrate every time the branch changes were displayed; it now asks once per review, and again when the review is refreshed.
Previously, checking in a change to a file inside a writable xlink could fail with
The specified repository couldn't be found
when the xlinked repository was in a different cloud organization from the workspace and both organizations were hosted on the same server. The server reported one identity for every organization it hosted, so the check-in resolved the xlinked repository against the workspace's organization instead of the xlink's own.
The server now reports a distinct identity per organization, so the xlinked repository resolves against its own organization and the check-in succeeds. The fix is server side and needs no client update.

All platforms - Cloud Server: Fixed REST API token rejected if org name casing differs

REST API calls made with a token from the
/login
endpoint failed with a 401 "An invalid user api token was provided" error when the organization name in the login URL used a different casing than the stored name (for example,
myorg
instead of
MyOrg
). The login endpoints now store the organization name with its correct casing in the token, so later calls with that token succeed.

All platforms - Unity VCS Tray: Fixed a second agent starting when one is already running

Launching the UVCS Tray agent while another one was already running started a second agent. On Windows, both agents then tried to mount the same dynamic workspaces on the same paths. The mount failed with a "Directory moved from mount path" error and renamed the existing workspace directories, appending a "~moved1" suffix.
Starting the UVCS Tray agent with no arguments while another one is already running now does nothing. The running agent still handles commands such as opening a Cloud Drive link or starting a dynamic workspace.

11.0.16.10371

Note
Public | 2026/08/20

New

All platforms - Desktop GUI: Show hidden branches in the Branch Explorer

The Branch Explorer now has a new Show hidden toggle button inside the Other filter. When enabled, hidden branches appear in the diagram at reduced opacity, alongside regular ones.
The Branch Explorer with the new 'Show hidden' filter enabled and a hidden branch displayed

The Branch Explorer with the new 'Show hidden' filter enabled and a hidden branch displayed

All platforms - Desktop GUI: Enable the merge to operation when you are not in a workspace

The Merge to operation merges a source branch, changeset, or label into a destination branch directly on the server, without loading the source into your workspace.
Until now the option was disabled in the context menus whenever no workspace was active, even though the operation does not need one. It is now available in those menus. You can start a merge to operation from the right-click menu of the following items:
  • Branches: right-click a branch and select Merge to.
  • Changesets: right-click a changeset and select Merge to.
  • Labels: right-click a label and select Merge to.
The same operation is available from the command line with the
--to
(or
--destination
) option:
$> cm merge br:/main/task001@myrepo@myserver:8087 --to=br:/main/release@myrepo@myserver:8087 --mergeMerging from br:/main/task001 to br:/main/releaseMerge finished successfully.

Bug

All platforms - Desktop GUI: Diff view no longer freezes on files with a very long line

Previously, opening a diff of a file that contained a single extremely long line, such as a Unity YAML asset with an inline binary blob serialized as hex on one line, froze the application for several seconds when that line scrolled into view. The editor measured and highlighted the whole line on the UI thread. The editor no longer processes the entire line. It renders the first few thousand characters followed by a truncation marker, so scrolling stays responsive.

All platforms - Desktop GUI: Fixed crash when a block selection crosses the diff splitter

Before, holding the block selection modifier and dragging the mouse from one pane of a side-by-side diff across the center splitter into the other pane crashed the application. The diff now keeps rendering correctly during the drag and the application stays open.
Hold Alt (macOS: Ctrl) and drag to make a block selection.
Both diff surfaces were affected:
  • Embedded diff: The diff shown inside the main window, for example from the Pending Changes or Changesets views.
  • Diff in a new window: The diff opened as a separate window.

All platforms - Desktop GUI: The shelves list now shows correct information

Previously, the Shelves panel in the Pending Changes tab kept showing the values it read when the list was first loaded. A shelve created the day before could still say Just now, and refreshing the view did not correct it.
The shelves list now redraws its rows every time it is refreshed, so the dates match the age of each shelve.

11.0.16.10350

Note
Public | 2026/08/12

New

All platforms - Desktop GUI: Show attributes in Code Review window

The Code Review window now displays the attributes of a branch or changeset next to the Conversation panel. Reviewers can read attribute values without switching to the Branch Explorer.
The attributes are shown with the same components used in the Branch Explorer, so they can be added, edited, and removed from the panel in the same way.
Screenshot of a Code Review window including the new attributes panel

Screenshot of a Code Review window including the new attributes panel

Bug

All platforms - CLI :
cm changelist add
no longer deletes the target changelist when adding a file that was checked out and changed

Rebuilding a chagelist after adding a checked-out and changed file reset the changelists's contents. This was because files carrying the
CheckedOut
change type had two IDs: One for the entry key and one for all other uses.

All platforms - Command-line :
cm status --xml
reports the combined
CO+RP
and
CO+CP
status codes

When applying a shelve to a workspace, an item can be checked out and replaced, or checked out and copied as a new file.
cm status --machinereadable
already reported these as
CO+RP
and
CO+CP
, but
cm status --xml
reported only
CO
, so a tool parsing the XML can't tell a replaced revision from a copied one.
The
Type
field in the XML output now carries the combined code and matches the machine-readable output. The
--short
and
--compact
text output report the same codes.
The
Type
field distinguishes these states:
  • CO+RP
    : The item is checked out and its revision was replaced, for example after applying a shelve.
  • CO+CP
    : The item is checked out and is a copy. That is, it's a new file.
  • CO+CH
    : The item is checked out with local changes. This code already worked and is listed here for contrast.
A replaced or copied item that is not checked out still reports
RP
or
CP
.
$> cm status --xml<StatusOutput> <Changes> <Change> <Type>CO+RP</Type> <TypeVerbose>Replaced</TypeVerbose> <Path>/src/game/Player.cs</Path> </Change> <Change> <Type>CO+CP</Type> <TypeVerbose>Copied (new)</TypeVerbose> <Path>/src/game/Enemy.cs</Path> </Change> </Changes></StatusOutput>

All platforms - Desktop GUI : Render Markdown in attribute tooltip

When the Attributes panel trims an attribute with an ellipsis, hovering shows a tooltip with the full content.
Previously, Markdown-formatted attributes displayed as raw text in that tooltip. The tooltip now renders Markdown using the same preview as the edit-attribute dialog: headings, lists, links, and images all display formatted. Long values scroll inside the popup, links are clickable, and moving the cursor into the popup keeps it open.
An attribute with the tooltip showing Markdown content

An attribute with the tooltip showing Markdown content

Bug

When merging two branches that both changed a read-only Xlink, the Xlink conflict view used to show each side's target as a raw changeset GUID. The Keep-source and Keep-destination buttons carried the same GUID. This made it hard to know which changeset each side pointed to.
The dialog now resolves the GUID to the changeset ID when the target is reachable. If the target changeset was purged or the target repo can't be reached, the dialog still shows the raw GUID.

Cloud Server: Editing a running mergebot duplicated it

Previously, editing a running cloud mergebot from the dashboard registered a duplicate in-memory instance each time it was saved. Every duplicate reacted independently to the same branch-resolved event, so each resolve triggered multiple merge attempts: one real merge and the rest reporting
MergeNotNeeded
.
Now, the start/stop lifecycle is handled in a single place, so editing a running mergebot results in exactly one stop and one restart.

11.0.16.10330

Note
Public | 2026/08/04

New

All platforms - Desktop GUI : Markdown support in attribute values

Markdown support in attributes

Markdown support in attributes

Attribute values now carry Markdown. The Apply Attribute dialog picks the layout based on the content:
  • Plain text: keeps the compact single-line dropdown.
  • Markdown (existing value, pasted value, or default template): flips into a side-by-side raw editor and live preview that updates as you type.
Admins can seed a Markdown skeleton in the attribute's comment field so anyone applying it lands in the editor with the template preloaded.
Example:
default: # What changed## Motivation## How to test - -
Values now go up to 5,000 characters (was 1,000).

All platforms - Desktop GUI : confirm before deleting an attribute from an object

The X button on an attribute pill in the object details panel used to delete the value silently. Now the button asks for confirmation before deleting.
The confirmation dialog shows a preview: a one-line snapshot of the value being deleted so you can double-check it's the correct one. It offers two options:
  • Yes: removes the attribute value from the object.
  • No / close: makes no changes.
This change applies to every attribute-value deletion in the Desktop GUI. There's nothing to configure.

All platforms - Command-Line:
cm attribute set
now accepts a file parameter for the attribute value

cm attribute set
now has a
--valuecontents=<file>
option that sets an attribute value from a file instead of a command-line argument. Use this for multi-line values or values containing special characters such as URLs with
?
or
&
.
Example:
$> cm attribute set att:Status br:/main --valuecontents=AttributeValue.txt

Bug

Cloud Server : Updating an existing trunkbot could break the mergebot

Previously, updating a trunkbot from the dashboard without including the internal field
bot_user
would delete the missing field on the server side.
The mergebot then failed to start. The server log showed "The mergebot cannot be started since its user ApiKey [] doesn't exist".
Now, if the field is missing from the update request, the server now preserves its from the existing configuration.

All platforms - Command-Line:
cm attribute set
can't set values with wildcards

Fixed an issue where attribute values containing
?
or
*
characters were incorrectly treated as file wildcards, causing the command to fail and show the command usage.
Example of a command that previously failed and now works:
$> cm attribute set att:url br:/main "https://myservice.com/api/list?querymode=default"

11.0.16.10303

Note
Public | 2026-07-24

New

Windows - Desktop GUI: Unity Smart Merge available as a merge tool option

When you add a merge tool under Preferences > Merge tools > Add, you can now select Unity Smart Merge (UnityYAMLMerge). Previously, this shortcut only existed on macOS; Windows users had to locate and enter the tool path manually. The path is detected automatically for Unity 6 and earlier.

Bug

All platforms - All clients: Fixed disk move detection for identical files

When multiple tracked files had the same content but different names and were moved only on disk (not with Unity VCS or
cm mv
), pending changes and
cm status
might pair them incorrectly and suggest incorrect renames. Move detection now prefers the candidate with the same file name when hashes match or similarity scores tie, so moves keep the correct names after the operation.
The behavior applies as follows:
  • Desktop GUI: Wherever local moves are calculated and Find moved and renamed files and directories is enabled in Pending changes options.
  • Command-Line: In a full
    cm status
    , where local move detection is active unless you limit change types.

All platforms - Desktop GUI: Scrollbar missing when viewing an added file's contents

Previously, the diff viewer didn't show a draggable scrollbar when displaying the contents of an added file: scroll worked with the mouse wheel but not by dragging the scrollbar. This happened in the Pending changes view, the Diff window, and code reviews. The scrollbar is now shown and works correctly when viewing the contents of an added file.

All platforms - Desktop GUI: External tool not updated when selecting a row in the Merge tools table

When selecting a row in the merge tools table under Preferences > Merge tools, the External tool field didn't update to show the tool configured for that row. The field now correctly reflects the external tool of the selected row.

11.0.16.10275

Note
Public | 2026-07-02

New

All platforms - Desktop GUI: Switch to the reviewed branch from a code review

Added a Switch workspace to this branch to the Code Review window's header. Click it to switches the active workspace to the branch under review.
If the review was opened without an active workspace, for instance from a Plastic link, clicking the button first opens an existing workspace for the reviewed repository, or shows a dialog to create one if none exists locally.

Bug

Previously, the changeset link inside the Resolved in cs:X badge in the code review conversation panel was misaligned with the surrounding text. The link now aligns correctly with the Resolved in label.
Correctly aligned label

Screenshot

All platforms - Desktop GUI: Fixed misaligned comment in the Attributes view details panel

The comment inside the Details panel of the Attributes view appeared vertically centered instead of aligned to the top. The comment is now top-aligned again, matching the previous layout.

All platforms - Desktop GUI, Gluon: Fixed directories not expanding or collapsing when double-clicked

Double-clicking a collapsed directory didn't expand it, and double-clicking an expanded directory didn't collapse it. This affected tree views in several panels, including the Workspace Explorer view, Pending Changes view, and Browse Repository panels. Directories now expand and collapse correctly when double-clicked.

macOS - UVCS tray agent: An edge case could cause two instances to run

In version 11.0.16.10255, we removed the
System Events.app
permission prompt for adding the UVCS Tray agent at user logon. Instead, we use a LaunchAgent plist file deployed in
$HOME/Library/LaunchAgents
.
However, several reboots could result in two UVCS Tray agents running at user logon. We fixed this race condition in this version: the system now checks whether the UVCS Tray app is configured through either System Settings > General > Login Items & Extensions or the presence of the
$HOME/Library/LaunchAgents/com.codicesoftware.unityvcstray.plist
file.

11.0.16.10255

Note
Public | 2026-06-25

New

All platforms - Desktop GUI: Branch Explorer labels stay visible at lower zoom levels

The Branch Explorer now keeps changeset numbers (on hover), changeset comments, and branch captions visible down to 50% zoom. Below that threshold the three labels hide together, since the text is no longer legible at that scale.
Previously, changeset numbers and comments started hiding below 80% zoom even while still readable, and branch captions remained visible at any zoom level.
The Diff changeset by changeset detail panel now shows the full changeset properties panel in both the Branch Diff window and the Code Review branch view.
Previously, this panel showed a plain text header. Now, the changeset number is a clickable link with:
  • A right-click context menu (options: Copy, Copy link, Copy spec, Open).
  • A Copy GUID button.
  • A responsive details layout.
  • The changeset comment.
This matches the changeset properties shown in the Branch Explorer.
The Code review panel's Review entire branch and Single changeset views now use the same properties panel, so the branch or changeset name is a clickable link with the same context menu and Copy GUID button.
The Single changeset view no longer shows a gray box with a double border.

All platforms - Desktop GUI: Reviewer group members can now mark a code review status

The Mark Review button in the Code Review panel is now enabled for users who belong to a reviewer group assigned to the review, even if they are not explicitly listed as individual reviewers. Previously, the button was only enabled for users directly added to the reviewer list.
When a reviewer group member sets their status, the server adds them to the reviewer list automatically and updates the reviewer group status accordingly.
This behaviour requires an up-to-date server. When connected to an older server, if users are not already in the reviewer list, the desktop GUI shows an error message.

All platforms - Desktop GUI: Automatic handling of .meta files during Add operations

When adding assets to source control in Unity projects, ancestor folders' .meta files are now automatically included in the operation. This prevents orphaned private .meta files when adding nested folder structures.
What changed:
  • The setting Rename .meta files automatically has been renamed to Handle .meta files automatically (found in Preferences > Other options).
  • When enabled, the Add operation now includes .meta files for all ancestor folders being added to source control.
  • The setting continues to control automatic .meta file handling for rename operations.
Note: This setting is enabled by default. Disabling it reverts to the previous behavior where only the asset and its ancestor folders are added, without their corresponding .meta files.

macOS - UVCS tray agent: Removed
System Events.app
permission prompt

Previously, the UVCS installation on macOS Tahoe ended with a prompt asking the user to enable this permission to start the UVCS tray agent on user login:
"PlasticSCM.app" wants to control "System Events.app"
The use is no longer prompted for permission. The UVCS tray agent is enabled on user login through a LaunchAgent plist file deployed in
$HOME/Library/LaunchAgents
.

Bug

All platforms - Desktop GUI: Fixed External tool not found error when selecting a default tool

In Preferences > Diff/Merge tools, selecting the Default tool no longer fails to save with an External tool not found error.
The path-validation check now correctly recognizes the built-in Plastic GUI diff/merge tool as a valid choice.

All platforms - Server: Fixed client-side triggers not running for User-role members

In Unified Organizations, client-side triggers (such as before-clientcheckin) were silently skipped when the operating user's role was User instead of Owner or Manager.
The trigger list returned to the client is no longer filtered by view permission, so configured client-side triggers now run for every authenticated user in the organization. Trigger administration and single-trigger lookups continue to require the relevant permissions.

11.0.16.10216

Note
Public | 2026-06-10

New

Right-click a changeset, branch, or label link in the Properties panel header to show a context menu with four new options:
  • Copy: Copies the full text shown in the link to the clipboard.
  • Copy link: Copies a shareable "Plastic Link".
  • Copy spec: Copies the full spec of the selected object.
  • Open: Navigates to the selected object.
The menu is available wherever these links appear, including the Branch Explorer, Branches and Changesets views, diffs of objects and history revisions.
New context menu options

New context menu options

All platforms - Desktop GUI: Embedded diff viewer in Branches and Changesets views

The Branches view and Changesets view can now show file diffs inline in their Details panel, matching the experience already available in the Branch Explorer. Select Differences in the Details panel to reveal the embedded viewer below the diff tree. Select a file in the tree to refresh its content.
Embedded diffs

Embedded diffs

All platforms: Upgrade Plastic Desktop and Gluon to Avalonia 11.3

Upgraded our GUI applications so now they use Avalonia 11.3, which provides UI improvements and fixes.

Bug

macOS - Gluon: Cmd+X (cut) now works in the Workspace Explorer

Previously, pressing Cmd+X in the Workspace Explorer view on macOS did nothing. The shortcut now performs the cut action correctly.

11.0.16.10181

Note
Public | 2026-05-21

New

All platforms - Desktop GUI: Difference list and diff viewer in Branch Explorer and Query view details

In the Branch Explorer and Query view, the Details panel now has a Differences list. The list is visible when selecting a branch, changeset, or label. For branches, you can view either the entire branch diff or the changeset-by-changeset diff.
The Details panel showing a diff for the entire branch

Screenshot

The Branch Explorer also has an embedded diff viewer. To open the viewer, double-click a file in the Details Differences list, or pick Diff from the file's context menu.
The Differences list context menu also has a new Diff in a separate window option, which opens the standalone diff window.
The diff viewer showing a change

Screenshot

All platforms - Desktop GUI: Show repository tree for selected labels

Updated the Labels view details panel and the Branch Explorer details panel to show the repository tree at the labeled changeset when you select label. This provides a meaningful snapshot of the tree at that point in history.
Previously, both views showed the diff of the labeled changeset, which is not useful for a single label. You can still see the change this way by selecting a changeset or branch in the Branch Explorer.
Right-click menu actions on items in the tree work the same as in the standalone Browse repository view. The label name in the Properties header is no longer clickable in the Labels view details panel.

All platforms - Desktop GUI: Changeset color configuration and changeset number in Branch Explorer

Changeset color configuration options for the Branch Explorer are now in the dedicated Settings window as a new tab. You can color changesets by user or replication source, or both at once.
User avatars can also be displayed independently from the changeset colors. When avatars and colors are both active, the colors are displayed in the ring around the avatar.
Changeset color definitions

Screenshot

Also in the Branch Explorer, a changeset number label appears above the node when you hover over a changeset in.
Changeset number above a node

Screenshot

This feature is enabled by default. You can disable it from the Branch Explorer display options.

All platforms - Desktop GUI: Properties panel shows repository and replication source

Updated the Properties panel in the Details view to display the repository name and the replication source.
Changeset replication src field

Screenshot

All platforms - Desktop GUI: Added vertical separator between attribute badge action buttons

Added a vertical separator between the Edit and Delete buttons on each attribute badge, drawn in the same color as the badge border, along with extra spacing for a cleaner look and better usability.

All platforms - Desktop GUI: Design changes in the Branch Explorer

Moved the Settings button in the Branch Explorer to the bottom-left corner of the panel, next to the Zoom Out button, to prevent accidental clicks.
The Settings button is next to the Zoom Out button

Screenshot

Updated the home icon in the Branch Explorer changeset shape to fill the shape when contributor avatars are disabled, and to display as a small overlay in the corner when avatars are enabled. In either case, the checked-out changeset continues to use the larger home glyph.
The home icon with a full shape

Screenshot

All platforms - Desktop GUI: Toggle hidden-branch changesets in Changesets view

Added a toggle to the Changesets view to show or hide changesets from hidden branches. You can now inspect those changesets without first unhiding branches. By default, this option is disabled.
The Xdiff window opened from Diff source with destination during merge conflict resolution now displays clickable changeset links.
Click a link to open the changeset diff window with all the changes in that changeset. This is the same view as the existing changeset link in the History view.

All platforms - Desktop GUI: Details panel remembers open/closed state and width

Updated the Branch Explorer, Branches, Changesets, Labels, and Attributes views to persist the details panel visibility and width across sessions.
The Details panel width in the Branch Explorer is also preserved between sessions.

All platforms - Command-line client: New subcommand to set the repository hashing algorithm

To set the hashing algorithm used by a repository, use the
admin hashalgorithm
subcommand in the
cm
command-line client.
Only the server administrator can execute this command; non-admin callers are rejected with the standard admin-only error.
cm admin hashalgorithm <repspec> (md5 | sha1)
Previously, the per-repository hashing algorithm could only be configured through an in-process server shell command that required raw organization and repository IDs. Operators can now set it through the regular
cm
CLI using a human-readable repository spec.
The new algorithm applies to data hashed by the server from this point on. Changing the algorithm on a repository that already contains data is supported, but operators should consider the implications before doing so.

All platforms - Command-line client: Hash algorithm available as format token

Added a
{hashalgorithm}
output format token to
cm find
,
cm history
, and
cm ls
. This output returns the algorithm name (MD5, SHA1) used to produce the revision's
{hash}
value.
The WebAdmin Find JSON endpoint exposes the same field as
hashalgorithm
when explicitly requested.
The default output formats are unchanged; the token is opt-in with the
--format
option (or the fields list, for the JSON endpoint). Revisions without a hash render an empty value.
cm find "revisions where date >= '1 weeks ago'" --format="{hash}|{hashalgorithm}|{owner}|{path}"

All platforms - Command-line client: cm patch supports --clean and --integration options

Added
--clean
and
--integration
options to
cm patch
. These were previously only available in
cm diff
.
Use the options to:
  • --clean
    : Generate patches that exclude merge content.
  • --integration
    : Generate patches that show only the changes pending integration into the parent branch.
These options make it easy to get a focused diff of a task branch for code review or AI-assisted workflows.

All platforms - Server: Unlimited lifespan for Personal Access Tokens

Added support for unlimited (never-expiring) lifespans for Personal Access Tokens (PATs). The previous limit was 180-day maximum for CI/CD and automation use cases that require long-lived credentials.
Server-side, the maximum PAT lifespan is controlled by the
AccessTokenLifespan
setting in
server.conf
, inside the
AccessTokensSettings
block. If not explicitly configured, the default maximum lifespan is 180 days.
Enable unlimited PAT lifespans
To enable unlimited PAT lifespans, set
AccessTokenLifespan
to
infinite
:
<AccessTokensSettings> <Enabled>true</Enabled> <AccessTokenLifespan>infinite</AccessTokenLifespan></AccessTokensSettings>
Client-side, the lifetime argument now accepts the
infinite
keyword:
cm accesstoken create "My automation token" infinite
Create unlimited PATs with the REST API
When creating PATs using the REST APIs, the lifetime field in
POST /api/v1/personal-access-tokens
is now optional. When omitted, the server's default lifespan applies.
To request a token with no expiration, omit the lifetime field and ensure the server is configured with an unlimited lifespan:
POST /api/v1/personal-access-tokens{ "description": "My automation token"}

Windows, macOS — New unified desktop agent

Unified PlasticFS and Cloud Drive into a single desktop agent:
unityvcstray
.
This update simplifies startup and background service management.
Backward compatibility is preserved through legacy entry points/wrappers (
plasticfs
and
unityclouddrive
) that now route to the unified app.
Additional notes:
  • Currently, PlasticFS is available only on Windows.
  • Cloud Drive remains in beta. If you have never used it before, enable it by creating an
    enableclouddrivetray.token
    file in your
    plastic4
    config folder.

Bug

All platforms - All clients: Fix exception when diffing a replicated branch whose parent changeset was not replicated

When a branch was replicated without its parent changeset, viewing its differences in the Desktop GUI or fetching its history from
cm
caused a crash with an unhandled error.
Now the diff view returns an empty result, and the branch history returns a clear error message indicating that the parent changeset couldn't be found.

All platforms - All clients: EOL and compression filter rules now support paths with spaces

Previously, EOL and compression filter rules that contained paths with spaces were not applied correctly. This is now fixed.
Compression sample:
none /db/backup/blob.dat
EOL sample:
auto /src/client/my script.ps

All platforms - Desktop GUI: Apply Branch Explorer options immediately

Fixed Branch Explorer settings to take effect without requiring a restart.

All platforms - Desktop GUI: Fixed outdated branch diff from the Branches view

Now using the current branch head from the server instead of branch information from when the tree was last loaded. This fix applies to Diff branch, Diff with another branch, and the embedded diff in the Branches view details panel.
New changesets from another workspace or client now appear without refreshing the list. The same fix applies when creating a top-level branch from the Branches view while new changes exist on the selected branch.

All platforms - Desktop GUI: Don't show attributes for checkout changeset

The Branch Explorer details panel was showing the Attributes section and the Add attribute button when selecting the checkout changeset. Because this is a virtual changeset that doesn't exist on the server, the attributes panel is no longer displayed for it.

All platforms - Desktop GUI: Bring changes on Switch option moves Added files to Default changelist

Files with Added status assigned to a user-defined changelist now remain in the correct changelist when switching branches with the Bring Changes on Switch option.

All platforms - Gluon: History panel doesn't update selected items

Fixed the History panel to select only the relevant revisions after operations that previously resulted in additional unwanted selections.

11.0.16.10042

Note
Public | 2026-03-19

New

All platforms - Desktop GUI

All platforms - Desktop GUI: Rebrand to Unity Version Control
Unity DevOps Version Control product has been rebranded to Unity Version Control.

All platforms - Desktop GUI

All platforms - Desktop GUI: Enhanced properties panel
  • Redesigned the properties panel that is displayed at the side of the Branch Explorer and other query views (Changesets, Branches, Labels and Attributes).
  • The selected object information is shown in a more compact way, including an icon or avatar with the object's owner.
  • The comments panel saves the edited comment when you switch from one object to another.
  • The Attributes panel shows each attribute in a small colored badge.
Redesigned properties and attributes panels

Redesigned properties and attributes panels

  • Removed the Branch Explorer settings from this side panel, to leave space for the selected object differences, which will be included in a following release.
  • Moved the settings for display options and conditional formatting to a dedicated dialog window. To open it, select the Settings button in the Branch Explorer view.
New Branch Explorer settings window

New Branch Explorer settings window

All platforms - Desktop GUI

All platforms - Desktop GUI: Enhanced branch explorer search box UI
The branch explorer search box's Next and Previous button are now inside the text areas.
Added a search match counter (current vs. total).
Branch Explorer search box control

Branch Explorer search box control

All platforms - Desktop GUI

All platforms - Desktop GUI: JetBrains plugin removed from client installers
The JetBrains plugin bundle is no longer included in the client installation package. Install the plugin directly from the JetBrains Marketplace.

Bug

All platforms - Desktop GUI

All platforms - Desktop GUI: Fixed changelist assignments lost after switch with Bring changes
Files assigned to custom changelists (for example, "Ignore this") are no longer moved to the Default changelist after switching revisions with Bring changes enabled. Changelist assignments are now correctly preserved across switch operations.

All platforms - Desktop GUI

All platforms - Desktop GUI: Smaller font for labels in the Branch Explorer
Reduced the Branch Explorer label caption font size so label names show more characters before ellipsis, improving readability.

11.0.16.9998

Note
Public | 2026-03-05

New

All platforms - Desktop

All platforms - Desktop: Show user avatars in the Branch Explorer
The Branch Explorer view now displays the changesets using the owner's avatar instead of a solid color circle. This allows to easily see who committed each changeset without the need of configuring user colors.
This feature can be enabled by toggling the "Display user avatar in changesets" in the Branch Explorer's display options
Screenshot

Screenshot

All platforms - Desktop GUI

All platforms - Desktop GUI: Changeset comment captions in the Branch Explorer
Changeset comments are now displayed in the Branch Explorer below each changeset as a small caption, expanding on hover to show the full comment.
Tooltips in the Branch Explorer have been removed, as this information is now shown directly in the canvas.
You can enable the changeset comment captions in the "Display options". Make sure to have enough zoom applied to the Branch Explorer to see them, as they are only visible until a certain level.
Screenshot

Screenshot

All platforms - Desktop GUI

All platforms - Desktop GUI: Hover style and animations in the Branch Explorer
Added new visual effects to the Branch Explorer when moving the mouse over the changesets, branches and labels
Screenshot

Screenshot

Bug

All Platforms - Desktop GUI

All Platforms - Desktop GUI: Page Up works correctly in lists
In all the views displaying a list or tree (Items, Pending Changes, Branches, etc ...) pressing Page Up now moves the selection to the top item within the currently visible list area, instead of jumping to the very first item (as if Home was pressed).

11.0.16.9973

Note
Public | 2026-02-26

New

All platforms – Plugin for JetBrains IDEs

All platforms – Plugin for JetBrains IDEs: Show recommended cm version and download link in Configuration view
The Configuration view now displays the recommended cm version for the current plugin build, with a clickable Download link that downloads the matching cm client bundle directly from the IDE. The download runs in the background with a progress indicator and saves the file to the user's Downloads folder.

All platforms

All platforms: The server can now dictate the repository hashing algorithm to the client.
UVCS currently supports two file hashing algorithms: SHA1 and MD5. The hashing algorithm in use depends on the
FIPSCompliant
flag defined both in
client.conf
and
server.conf
.
However, both client and server had to have the flag configured to the same value for hashing to work. Misconfigurations could result in repositories storing hashes in one format whilst the clients expected the hashes in a different format, and the other way around.
Now, the hashing algorithm can only be configured from the repository server. If both server and client are using this UVCS version or newer, the client honors the configuration set on the server regardless of the
client.conf
FIPSCompliant
setting.
For newer clients working against older servers, or the other way around, the client's
FIPSCompliant
flag is still in use, to ensure backwards compatibility.

11.0.16.9943

Note
Public | 2026-02-12

New

All platforms - Gluon

All platforms - Gluon: Skip update report message after applying a shelved added file
Before, updating the workspace after applying a shelve that contained an added file showed the following report message:

The item won't be unloaded because it is already changed (checked-out, locally changed, deleted, moved or reverted) in the workspace: 'file.txt'. Please undo or checkin the local change and retry the operation.

This scenario is now improved and no message is reported since there is no collision with server changes.

11.0.16.9925

Note
Public | 2026-02-05

Bug

All clients

All clients: Fixed comment truncation from GitSync or fast-import
When truncating long comments during GitSync or fast-import operations, if the truncation point fell exactly at a high surrogate character (part of a Unicode surrogate pair used for emojis and other special characters), the surrogate pair would be split. This caused later serialization to fail with an "Unable to translate Unicode character" error.
We now check if the character at the truncation point is a high surrogate and reduce the length by one character to avoid splitting the pair.

All platforms – Plugin for JetBrains IDEs

All platforms – Plugin for JetBrains IDEs: Compare with same repository version not working for Replaced files
The "Compare with Same Repository Version" context menu option now correctly displays differences for Replaced files. Previously, this operation would show a "Cannot get revision content" error when comparing Replaced files created during branch merges.

All platforms - Desktop GUI

All platforms - Desktop GUI: An item with the same key added error in tree view
Fixed an issue in the Pending Changes tree view where multiple changes to the same file could trigger an "An item with the same key has already been added" error.
Now, multiple changes are displayed correctly.

11.0.16.9915

Note
Public | 2026-01-29

New

All platforms – Command line client

All platforms – Command line client: Revision ID available in status command output
The
cm status
command now supports an optional
--includeRevId
flag that, when used with
--machinereadable
, includes the revision ID for each change in the output. The revision ID is added as an additional field after the directory flag and before the merges information.
This enables plugins and integrations to obtain revision information directly from the status command without additional operations.

Bug

All platforms – Plugin for JetBrains IDEs

All platforms – Plugin for JetBrains IDEs: Diff not loaded for replaced files
The diff view now correctly loads and displays differences for files with "Replaced" status. The plugin now retrieves parent revision IDs directly from the status command output, which eliminates the need for additional commands and ensures reliable diff loading for all file change types, including replaced files.

macOS – Plugin for JetBrains IDEs

macOS – Plugin for JetBrains IDEs: Fixed server list failing to load on macOS
Fixed an issue on macOS in which the attempt to clone a Unity Version Control repository from Rider's welcome window would result in the server list never populating. An error in the logs would indicate that the
cm
command could not be found. Now, the Clone Repository dialog correctly initializes Unity Version Control and loads the server list on first access, regardless of whether a project is open.

11.0.16.9890

Note
Public | 2026-01-22

New

All platforms - Desktop GUI and Gluon

All platforms - Desktop GUI and Gluon: Automatic .meta file renaming
Added support for automatically renaming .meta files when renaming files or directories in the workspace.
Enable this feature in Preferences > Other Options > Miscellaneous > Rename .meta files automatically. When enabled, the GUI will automatically rename associated .meta files alongside the main file or directory, and prevent conflicts if the destination .meta file already exists.
This is a GUI-only setting and is enabled by default.
Screenshot

Screenshot

All platforms - Desktop GUI

All platforms - Desktop GUI: Added filter to the diff changeset by changeset panel
When viewing the diff of a branch in changeset by changeset mode, you were only able to see the list of changesets. For big branches with a lot of changesets, it could be difficult to find a specific one by its comment, so we added a filter to be able to search in this list
Screenshot

Screenshot

All platforms – Plugin for JetBrains IDEs

All platforms – Plugin for JetBrains IDEs: Organization/Server selection added to Clone Repository workflow
Users can now select from all available Unity Version Control (UVCS) organizations or servers when cloning a repository, not just the default workspace server. The server list is populated based on the current user's configured profiles, and the repository list updates automatically when a different org/server is selected. If no additional profiles are configured, only the default org/server will be available. This enhancement improves flexibility and usability for users working with multiple orgs/servers.

11.0.16.9872

Note
Public | 2026-01-15

New

All platforms - Plugin for JetBrains IDEs

All platforms - Plugin for JetBrains IDEs: Configuration panel available in IDE settings
The UVCS configuration panel is now available again in the IDE settings view. The panel has been adjusted to align with other VCS plugin panels, and the cm path field now auto-detects the default UVCS installation path when left empty, matching the behavior of Git and Mercurial plugins.

Bug

All Platforms - All Clients

All Platforms - All Clients: Resolved a compatibility error when deleting an empty branch
Previously, compatibility was not maintained when attempting to delete an empty branch using a newer client (e.g., 11.0.16.9213) with an older server version (e.g., 11.0.16.7504).
The operation failed with an incorrect message indicating that the server needed an upgrade, despite the server being fully capable of deleting empty branches.

All platforms - Gluon

All platforms - Gluon: Fixed endless search dialog progress when no results are found
The "Searching..." message and spinner now disappear when a search completes with no matches. Previously, they remain visible indefinitely.
Screenshot

Screenshot

All platforms - Plugin for JetBrains IDEs

All platforms - Plugin for JetBrains IDEs: File history revisions now displayed in correct order
The file history view previously listed revisions in reverse order, with the oldest entry at the top. This caused confusion when comparing changes between revisions. Now, revisions are displayed from newest to oldest, making it easier to understand file evolution and compare changes as expected.

All platforms – Plugin for JetBrains IDEs

All platforms – Plugin for JetBrains IDEs: Improved error handling in VCS operations
Error handling in VCS operations has been updated to use Messages view notifications instead of blocking dialog popups. This change prevents multiple error dialogs from appearing in batch operations, resolves thread safety issues, and improves user experience by avoiding intrusive popups.