Skip to content

feat(shared-object-base)!: make SharedObject and SharedObjectCore @internal#26439

Draft
tylerbutler wants to merge 3 commits intomicrosoft:mainfrom
tylerbutler:test/breaks/client/2.100/custom-dds-removal-minimal
Draft

feat(shared-object-base)!: make SharedObject and SharedObjectCore @internal#26439
tylerbutler wants to merge 3 commits intomicrosoft:mainfrom
tylerbutler:test/breaks/client/2.100/custom-dds-removal-minimal

Conversation

@tylerbutler
Copy link
Member

@tylerbutler tylerbutler commented Feb 13, 2026

Summary

Marks SharedObjectCore and SharedObject as @internal, removing them from the public/legacy API surface. This prevents external creation of custom DDS implementations by making the required base classes internal-only.

Downstream classes that extend SharedObject are also marked @internal to resolve ae-incompatible-release-tags cascade errors:

  • @fluidframework/register-collection: ConsensusRegisterCollection
  • @fluidframework/ordered-collection: ConsensusOrderedCollection, ConsensusQueueClass, ConsensusQueue
  • @fluid-experimental/tree: All @alpha exports converted to @internal (entire package is experimental)

These changes only affect the API surface — all existing DDSes continue to function identically at runtime. Factories still create and load instances as before. The only capability removed is the ability for external consumers to extends SharedObject to create custom DDS subclasses.

See also: #26413 (full-scope alternative that additionally internalizes IChannelFactory, ISharedObjectKind, FluidDataStoreRuntime, etc.)

…ternal

Move SharedObject and SharedObjectCore base classes from @legacy @beta to
@internal. This prevents external custom DDS implementations by removing the
base classes from the public API surface.

This is the minimal change needed to achieve the "no custom DDSes" goal.
createSharedObjectKind is already @internal. IChannelFactory, ISharedObjectKind,
FluidDataStoreRuntime, DataObjectFactory, etc. are intentionally left as
@legacy @beta — they are useless for creating custom DDSes without the base
classes, and leaving them avoids a large cascade of import path changes across
~80+ files.
ConsensusRegisterCollection, ConsensusOrderedCollection, ConsensusQueueClass,
ConsensusQueue, and @fluid-experimental/tree exports are marked @internal to
resolve ae-incompatible-release-tags errors caused by SharedObject being @internal.
@github-actions
Copy link
Contributor

🔗 No broken links found! ✅

Your attention to detail is admirable.

linkcheck output


> fluid-framework-docs-site@0.0.0 ci:check-links /home/runner/work/FluidFramework/FluidFramework/docs
> start-server-and-test "npm run serve -- --no-open" 3000 check-links

1: starting server using command "npm run serve -- --no-open"
and when url "[ 'http://127.0.0.1:3000' ]" is responding with HTTP status code 200
running tests using command "npm run check-links"


> fluid-framework-docs-site@0.0.0 serve
> docusaurus serve --no-open

[SUCCESS] Serving "build" directory at: http://localhost:3000/

> fluid-framework-docs-site@0.0.0 check-links
> linkcheck http://localhost:3000 --skip-file skipped-urls.txt

Crawling...

Stats:
  257699 links
    1822 destination URLs
    2063 URLs ignored
       0 warnings
       0 errors


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant