Contents
- ✨ New Features
- Require the oldest supported client version in ServiceOptions (#27902)
- Add ServiceClient for Tinylicious (#27902)
- Add session-storage-backed local services (#27902)
- Collect container telemetry through ServiceClient (#28259)
- Register service client containers directly with Devtools (#28260)
- 🐛 Bug Fixes
- createIdentifierIndex handles schemas with multiple identifiers consistently (#28233)
- createTreeIndex now interprets object field selectors as property keys (#28233)
- Use configured SharedTree kinds in service client registries (#28260)
✨ New Features
Require the oldest supported client version in ServiceOptions (#27902)
The alpha ServiceOptions.oldestSupportedClient property is now required. Code that constructs service options must specify the oldest Fluid Framework client version that can open and process documents written by the service client.
const options: ServiceOptions = {
oldestSupportedClient: "2.100.0",
};Change details
Commit: da0dd40
Affected packages:
- @fluidframework/driver-definitions
- fluid-framework
⬆️ Table of contents
Add ServiceClient for Tinylicious (#27902)
The new alpha createTinyliciousServiceClient API creates a ServiceClient backed by a Tinylicious service.
Change details
Commit: da0dd40
Affected packages:
- @fluidframework/tinylicious-driver
⬆️ Table of contents
Add session-storage-backed local services (#27902)
The new alpha getSessionService API provides a ServiceClient compatible way to use the browser-local Fluid service that retains attached documents across page reloads in the same browser tab. Calls within one JavaScript realm share a lazily created service for the lifetime of that realm. Local services also expose APIs to list and delete their stored documents.
Session storage can be shared by separate same-origin JavaScript realms or applications loading separate copies of the package. Such instances run independent local servers, so concurrently editing the same stored document across them is unsupported.
The alpha EphemeralServiceClient type has been replaced by the more general LocalServiceClient type. Update type imports and annotations to use LocalServiceClient<EphemeralService>.
Change details
Commit: da0dd40
Affected packages:
- @fluidframework/local-driver
⬆️ Table of contents
Collect container telemetry through ServiceClient (#28259)
The alpha ServiceOptions interface now accepts an optional logger. Session, ephemeral, and Tinylicious clients forward telemetry from containers they create or load to this logger. Existing callers can omit the option without changing their behavior.
import { startEphemeralService } from "@fluidframework/local-driver/alpha";
const service = startEphemeralService();
const client = service.newClient({
oldestSupportedClient: "2.100.0",
logger: {
send(event) {
console.log(event);
},
},
});The same logger option is supported by getSessionService().newClient(...) and createTinyliciousServiceClient(...).
Change details
Commit: 1126100
Affected packages:
- @fluidframework/driver-definitions
- @fluidframework/local-driver
- @fluidframework/tinylicious-driver
- fluid-framework
⬆️ Table of contents
Register service client containers directly with Devtools (#28260)
The new initializeDevtoolsAlpha function returns a FluidDevtoolsAlpha instance whose registerContainerDevtools method accepts a FluidContainer created by a ServiceClient. Applications no longer need to access the underlying internal container to register it with Devtools. The existing beta registration signature for IContainer is unchanged. The ContainerDevtoolsProps input interface is no longer marked @sealed, which clarifies that callers can implement this property bag.
import { initializeDevtoolsAlpha } from "@fluidframework/devtools-core/alpha";
// `container` is a FluidContainer returned by a ServiceClient.
const devtools = initializeDevtoolsAlpha({});
devtools.registerContainerDevtools({
container,
containerKey: "My document",
});To enable data visualization, also provide containerData with the named DDS objects to inspect. Devtools does not automatically discover DDS objects in the container's application-defined data.
Change details
Commit: 2356545
Affected packages:
- @fluidframework/devtools-core
⬆️ Table of contents
🐛 Bug Fixes
createIdentifierIndex handles schemas with multiple identifiers consistently (#28233)
createIdentifierIndex now indexes a node only when its schema has exactly one identifier field. Schemas with multiple identifier fields are skipped instead of arbitrarily indexing the first identifier field. This avoids field-order-dependent behavior while allowing identifier indexes to be created for trees containing such schemas.
Identifier indexes now also take advantage of identifier fields being immutable. This avoids unnecessarily re-indexing existing nodes after tree edits while continuing to index newly created nodes and filter detached nodes from index results.
Change details
Commit: 7663ec8
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
createTreeIndex now interprets object field selectors as property keys (#28233)
createTreeIndex previously interpreted keys returned by TreeIndexKeyFieldSelector as stored keys. This was inconsistent with the Simple Tree schema API and caused indexes to fail when an object field's property key differed from its stored key. Object field selectors are now translated from property keys to stored keys internally. Selectors must return undefined for non-object schemas.
Change details
Commit: 7663ec8
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
Use configured SharedTree kinds in service client registries (#28260)
The alpha configuredSharedTree function in fluid-framework now returns SharedObjectKindAlpha<ITree> instead of SharedObjectKind<ITree>. This exposes the registry capabilities already provided by the returned object, so applications can use it with sharedObjectRegistryFromIterable and instantiateTreeFirstTime without an internal import. Existing uses of the returned SharedObjectKind<ITree> remain supported, and runtime behavior is unchanged.
import {
configuredSharedTree,
sharedObjectRegistryFromIterable,
} from "fluid-framework/alpha";
const treeKind = configuredSharedTree({});
const registry = sharedObjectRegistryFromIterable([treeKind]);Change details
Commit: 2356545
Affected packages:
- fluid-framework
⬆️ Table of contents
🛠️ Start Building Today!
Please continue to engage with us on GitHub Discussion and Issue pages as you adopt Fluid Framework!