github microsoft/FluidFramework client_v3.3.0
Fluid Framework v3.3.0 (minor)

3 hours ago

Contents

  • 🌳 SharedTree DDS Changes
    • Bug fix: revert preconditions no longer cause document corruption and other errors (#28317)
    • Optimize memory use of arrays when using ForestTypeOptimized (#27386)
    • createIndependentTreeAlpha no longer has the unused TSchema type parameter (#28349)
  • 🐛 Bug Fixes
    • Point-in-time load failures now release container resources reliably (#28291)
    • Reject reverts across schema changes (#28320)
    • Record node property read types now include undefined (#28163)
    • Preserve custom commit metadata when applying serialized changes (#28330)
  • Legacy API Changes
    • Remove legacy direct ID compressor lifecycle APIs (#27559)
    • Remove direct ID range finalization from mock runtime APIs (#27559)
  • Other Changes
    • The Quill views now use quill-next and no longer need a DOM at import time (#28318)

🌳 SharedTree DDS Changes

Bug fix: revert preconditions no longer cause document corruption and other errors (#28317)

Before this release, when a SharedTree client specified a constraint as a precondition for a revert and (whether or not a revert was performed) such a constraint was violated, that client could later error during the rebasing of its shared branches (when processing peer changes) or local branches and was liable to generate invalid edits that would cause document corruption in the meantime.

Change details

Commit: b4384d7

Affected packages:

  • @fluidframework/tree
  • fluid-framework

⬆️ Table of contents

Optimize memory use of arrays when using ForestTypeOptimized (#27386)

ForestTypeOptimized now more efficiently deduplicates structural information for adjacent children in array nodes after edits. For arrays of small, uniformly shaped subtrees, such as PlainText, this reduces fragmentation and can reduce memory use by approximately 60%.

Change details

Commit: 0735ff5

Affected packages:

  • @fluidframework/tree
  • fluid-framework

⬆️ Table of contents

createIndependentTreeAlpha no longer has the unused TSchema type parameter (#28349)

The unused TSchema type parameter has been removed from createIndependentTreeAlpha. Calls that explicitly supply a type argument to createIndependentTreeAlpha must remove it.

createIndependentTreeBeta keeps its deprecated type parameter temporarily for compatibility, but the type parameter continues to have no effect. Callers should omit it.

Change details

Commit: 071fa2a

Affected packages:

  • @fluidframework/tree
  • fluid-framework

⬆️ Table of contents

🐛 Bug Fixes

Point-in-time load failures now release container resources reliably (#28291)

Failed point-in-time loads now dispose their temporary containers, including when the container becomes unavailable during read-only setup or operation replay. Cancellation and lifecycle errors are preserved while the container resources and event listeners are cleaned up.

Change details

Commit: 7a88746

Affected packages:

  • @fluidframework/container-loader

⬆️ Table of contents

Reject reverts across schema changes (#28320)

UntypedTreeViewAlpha.revertTo() now throws a usage error if any commit being reverted contains a schema change. The operation leaves the document unchanged, preserving transaction atomicity for commits that contain both schema and data changes. You can still revert data changes made after a schema upgrade by targeting the revision of that upgrade or a later revision.

Change details

Commit: ca6f67c

Affected packages:

  • @fluidframework/tree
  • fluid-framework

⬆️ Table of contents

Record node property read types now include undefined (#28163)

Reading a property from a record node is now typed as T | undefined instead of T, matching the existing runtime behavior when the key is absent. Consumers must narrow the result before using it as T.

const value = record.foo;
if (value !== undefined) {
  // Use value as T.
}

This is a bug fix to the @beta record node APIs: the previous typing incorrectly claimed that reading any key would produce a value, which could result in unexpected undefined values at runtime.

Note that this does not change what a record node can store; entries are still always defined. Assigning undefined to a key continues to remove that entry, as before.

Change details

Commit: 2de794b

Affected packages:

  • @fluidframework/tree
  • fluid-framework

⬆️ Table of contents

Preserve custom commit metadata when applying serialized changes (#28330)

Changes returned by LocalChangeMetadata.getChange() now include the commit's custom metadata, including metadata from nested transactions. Applying these changes to another view preserves that metadata in its branch history.

Change details

Commit: 89dc735

Affected packages:

  • @fluidframework/tree
  • fluid-framework

⬆️ Table of contents

Legacy API Changes

Remove legacy direct ID compressor lifecycle APIs (#27559)

The legacy-beta entrypoint no longer exports createIdCompressor, deserializeIdCompressor, serializeIdCompressor, createSessionId, IdCreationRange, or the SerializedIdCompressor* types. These APIs expose Fluid runtime implementation and persistence details and are now internal. IIdCompressor and its compressed ID types remain available.

Change details

Commit: bee7b1a

Affected packages:

  • @fluidframework/id-compressor

⬆️ Table of contents

Remove direct ID range finalization from mock runtime APIs (#27559)

MockContainerRuntime.finalizeIdRange is now private. Mock runtimes continue to finalize ID ranges automatically when processing allocation messages. Derived mock runtimes that customize message processing can use the protected maybeProcessIdAllocationMessage method to process allocation messages without depending on internal ID compressor types.

Change details

Commit: bee7b1a

Affected packages:

  • @fluidframework/test-runtime-utils

⬆️ Table of contents

Other Changes

The Quill views now use quill-next and no longer need a DOM at import time (#28318)

The Quill-based views now depend on quill-next instead of quill, and on @quill-next/delta-es instead of quill-delta. Unlike quill, quill-next does not access the DOM when it is imported. You no longer need to set up JSDOM before you import this package in Node.js tests or server-side code.

If your application imports Quill assets, such as theme stylesheets, from quill, import them from quill-next instead.

Change details

Commit: 8c7da38

Affected packages:

  • @fluidframework/quill-react

⬆️ Table of contents

🛠️ Start Building Today!

Please continue to engage with us on GitHub Discussion and Issue pages as you adopt Fluid Framework!

Don't miss a new FluidFramework release

NewReleases is sending notifications on new releases.