github microsoft/FluidFramework client_v2.93.0
Fluid Framework v2.93.0 (minor)

10 hours ago

Contents

  • 🚨 Breaking Changes
    • minVersionForCollab is now non-optional (#25331)
  • ✨ New Features
    • Add Fluid-controlled map and iterator interfaces (#26788)
    • presence API set now at public support level (#27001)
    • Add SchemaFactoryAlpha.stagedOptional for incremental required-to-optional field migrations (#26918)
  • 🌳 SharedTree DDS Changes
    • Promote tree index APIs from alpha to beta (#26993)
  • ⚠️ Deprecations
    • getPresence from @fluidframework/presence is deprecated and will be removed in a future release. (#26399)

🚨 Breaking Changes

minVersionForCollab is now non-optional (#25331)

This change is a follow-up for pull request 25130 which was released as part of 2.61.0.

The minVersionForCollab property has been made non-optional in the following @beta @legacy interfaces in the Runtime layer:

  • IFluidParentContext.minVersionForCollab in @fluidframework/runtime-definitions.
  • IFluidDataStoreContext.minVersionForCollab in @fluidframework/runtime-definitions.
  • IFluidDataStoreContextDetached.minVersionForCollab in @fluidframework/runtime-definitions.

Consumers of Fluid aren't expected to implement these interfaces directly, so no impact is expected.

Additionally the following properties now always return a value, rather than possibly returning undefined:

  • FluidDataStoreRuntime.minVersionForCollab in @fluidframework/datastore. Note that API Extractor shows this as a breaking change since FluidDataStoreRuntime is beta + legacy and non-sealed. However, FluidDataStoreRuntime is not intended to be extended directly outside of a known legacy use-case.
  • IDataObjectProps.context.minVersionForCollab in @fluidframework/aqueduct.
  • ITestFluidObject.context.minVersionForCollab in @fluidframework/test-utils
  • IProvideTestFluidObject.ITestFluidObject.context.minVersionForCollab in @fluidframework/test-utils

Change details

Commit: 9a0d027

Affected packages:

  • @fluidframework/aqueduct
  • @fluidframework/datastore
  • @fluidframework/runtime-definitions
  • @fluidframework/shared-object-base
  • @fluidframework/test-utils

⬆️ Table of contents

✨ New Features

Add Fluid-controlled map and iterator interfaces (#26788)

TreeIndex now extends FluidReadonlyMap instead of the built-in ReadonlyMap, and TreeMapNodeAlpha which extends FluidReadonlyMap instead of the built-in ReadonlyMap has been added. This works to uncouple Fluid's public API surface to the TypeScript standard library's map types, preventing future breakage when those types change.

Change details

Commit: 78e06f7

Affected packages:

  • @fluidframework/core-interfaces
  • fluid-framework
  • @fluidframework/tree

⬆️ Table of contents

presence API set now at public support level (#27001)

All @fluidframework/presence APIs that had been @beta have been promoted to @public support with the exception of getPresence which has been relocated to fluid-framework. (See issue #26397 for more getPresence details.)

See Presence API overview and Presence package API details with getPresence API to get started.

Change details

Commit: 97d14a7

Affected packages:

  • @fluidframework/presence

⬆️ Table of contents

Add SchemaFactoryAlpha.stagedOptional for incremental required-to-optional field migrations (#26918)

SchemaFactoryAlpha.stagedOptional(T) enables incremental migration of a field from required to optional. It creates a field that is optional in the view schema but stored as required in the stored schema until all clients have been upgraded, avoiding the need for a coordinated simultaneous deployment.

Migration path:

  1. Start with sf.required(T) - all clients require the field.
  2. Deploy sf.stagedOptional(T) - new clients see the field as optional and can read documents whether the field is present or absent, but the stored schema stays required so old clients are not broken. Writing undefined is blocked at runtime during this phase.
  3. Deploy sf.optional(T) once all clients have been updated - the stored schema becomes optional and the field can be cleared.

Change details

Commit: fb808eb

Affected packages:

  • @fluidframework/tree

⬆️ Table of contents

🌳 SharedTree DDS Changes

Promote tree index APIs from alpha to beta (#26993)

The following APIs have been promoted from @alpha to @beta:

  • TreeIndex
  • TreeIndexKey
  • TreeIndexNodes
  • createTreeIndex
  • IdentifierIndex
  • createIdentifierIndex

Additionally, the following @fluidframework/core-interfaces types have been promoted from @alpha to @beta:

  • FluidReadonlyMap
  • FluidIterable
  • FluidIterableIterator
  • FluidMap

Change details

Commit: 37f2f17

Affected packages:

  • @fluidframework/core-interfaces
  • @fluidframework/tree
  • fluid-framework

⬆️ Table of contents

⚠️ Deprecations

getPresence from @fluidframework/presence is deprecated and will be removed in a future release. (#26399)

Now getPresence is available for import from the fluid-framework package.

To prepare, make changes following this pattern:

-import { getPresence } from "@fluidframework/presence/beta";
+import { getPresence } from "fluid-framework";

See issue #26397 for more details.

Change details

Commit: d533c19

Affected packages:

  • fluid-framework
  • @fluidframework/presence

⬆️ 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.