microsoft/FluidFramework client_v2.117.0
microsoft/FluidFramework
Captured source
source ↗Fluid Framework v2.117.0 (minor)
Repository: microsoft/FluidFramework
Tag: client_v2.117.0
Published: 2026-08-28T02:15:22Z
Prerelease: no
Release notes:
Contents
- [🌳 SharedTree DDS Changes](#user-content--sharedtree-dds-changes)
- [Bug fix: forking during changed event callback is now safe (#28074)](#user-content-bug-fix-forking-during-changed-event-callback-is-now-safe-28074)
- [Rename TreeBranch and TreeBranchAlpha to UntypedTreeView (#28104)](#user-content-rename-treebranch-and-treebranchalpha-to-untypedtreeview-28104)
- [New alpha API for attaching custom metadata to commits (#28104)](#user-content-new-alpha-api-for-attaching-custom-metadata-to-commits-28104)
- [Remove the deprecated TreeAlpha.branch API (#28104)](#user-content-remove-the-deprecated-treealphabranch-api-28104)
- [retainHistory now retains history in summaries (#28104)](#user-content-retainhistory-now-retains-history-in-summaries-28104)
- [New alpha APIs for inspecting history and restoring past states (#28104)](#user-content-new-alpha-apis-for-inspecting-history-and-restoring-past-states-28104)
🌳 SharedTree DDS Changes
Bug fix: forking during changed event callback is now safe (#28074)
Forking (beta) a view during the callback for the "changed" event (alpha) emitted when a transaction is committed would create a fork with malformed change data. This could result in asserts being triggered when utilizing the fork (including, but not limited to, error code 0x7ce).
Change details
Commit: `ca9458a`
Affected packages:
- @fluidframework/tree
- fluid-framework
[⬆️ Table of contents](#user-content-contents)
Rename TreeBranch and TreeBranchAlpha to UntypedTreeView (#28104)
UntypedTreeView and UntypedTreeViewAlpha replace the beta TreeBranch and alpha TreeBranchAlpha interfaces, clarifying that they represent tree views without known schemas. The old names remain available as deprecated compatibility aliases and will be removed in a future release.
Update API imports and type annotations to use the new names:
// Before
import type { TreeBranch } from "fluid-framework/beta";
import type { TreeBranchAlpha } from "fluid-framework/alpha";
const betaBranch: TreeBranch = betaView.fork();
const alphaBranch: TreeBranchAlpha = alphaView.fork();
// After
import type { UntypedTreeView } from "fluid-framework/beta";
import type { UntypedTreeViewAlpha } from "fluid-framework/alpha";
const betaForkedView: UntypedTreeView = betaView.fork();
const alphaForkedView: UntypedTreeViewAlpha = alphaView.fork();Change details
Commit: `e75bc54`
Affected packages:
- @fluidframework/tree
- fluid-framework
[⬆️ Table of contents](#user-content-contents)
New alpha API for attaching custom metadata to commits (#28104)
Applications can now attach arbitrary, JSON-serializable metadata to a commit, replicate it to collaborating clients, and persist it in the document.
Supply it via the new customMetadata field on `RunTransactionParamsAlpha`:
view.runTransaction(
() => {
view.root.insertAtEnd("new item");
},
{ customMetadata: { author: "alice", intent: "add-item" } },
);The commit produced by reverting a Revertible, or by revertTo, can be annotated the same way via a new options argument:
revertible.revert({ customMetadata: { author: "alice", intent: "undo-add" } });
view.revertTo(revision, {
customMetadata: { author: "alice", intent: "undo-add" },
});Read it back while walking the branch's history, via the new custom property on TreeBranchCommitMetadata:
for (
let commit = view.branchHistory.getHead();
commit !== undefined;
commit = commit.getParent()
) {
const metadata = commit.custom;
}Because a commit may be produced by nested transactions, each of which may supply metadata, custom is the flattened combination of them all, with the outermost transaction winning on conflicting properties. The structural view is available as commit.customTree, a CustomMetadataTree mirroring the transaction nesting — the same relationship labels.tree has to a change's label set.
Metadata shares the lifetime of the commit it is attached to, so it is dropped when that commit is trimmed from the trunk, or lasts as long as the document under the retainHistory option on SharedTreeOptions. It also travels on every annotated op and occupies summary space for as long as its commit survives, so it should be kept small.
Persisting the metadata requires new op and summary format versions, which are written only when minVersionForCollab is set to 2.117.0 or later; until then, metadata is kept in memory for the local session but is neither replicated nor persisted. Raising that floor makes every subsequent op and summary use the new versions, whether or not any commit carries metadata, so deploy metadata-capable code everywhere first. Lowering it again is lossy: a client configured to write the older format can still read metadata but strips it when encoding.
Change details
Commit: `e75bc54`
Affected packages:
- fluid-framework
- @fluidframework/tree
[⬆️ Table of contents](#user-content-contents)
Remove the deprecated TreeAlpha.branch API (#28104)
The deprecated alpha TreeAlpha.branch(node) API has been removed. Use `TreeAlpha.context(node)` and check `isView()` to access the untyped view for a...
Excerpt shown — open the source for the full document.
Notability
notability 3.0/10Routine version release of non-AI library