Repository navigation
[lexical][lexical-extension] Chore: Remove @experimental flag from Extension and NodeState APIs - #8354
Merged
etrepum merged 3 commits intoApr 14, 2026
Conversation
…exports These APIs are no longer experimental: defineExtension, configExtension, declarePeerDependency, getPeerDependencyFromEditor, namedSignals, getKnownTypesAndNodes, watchedSignal, getExtensionDependencyFromEditor. https://claude.ai/code/session_01Eh8EBHN3FFnmobAWEXZgis
The Lexical Extensions API is no longer experimental, so remove the stability warning section from the extensions intro page. https://claude.ai/code/session_01Eh8EBHN3FFnmobAWEXZgis
The NodeState API is no longer experimental, so remove the stability warning section from the node-state docs page. https://claude.ai/code/session_01Eh8EBHN3FFnmobAWEXZgis
etrepum
requested review from
acywatson,
fantactuka,
ivailop7,
potatowagon,
takuyakanbr and
zurfyx
as code owners
April 14, 2026 04:30
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
zurfyx
approved these changes
Apr 14, 2026
Merged
etrepum
pushed a commit
to etrepum/lexical
that referenced
this pull request
Aug 2, 2026
…s and deprecate static transform() ## Description Audit of APIs still marked experimental whose signatures have been unchanged for more than 6 months, comparing the experimental surface at v0.40.0 (2026-02-02, the 6-month boundary) against main. Of 225 experimental annotations on main, only 11 existed 6 months ago -- everything else (named slots, DOM import/render, mdast, shadow DOM) landed 2026-04 or later. Collab v2 is intentionally left experimental. Three APIs qualified, and the repo marks experimental status two ways (`@experimental` tags and prose `EXPERIMENTAL`), so a tag-only scan misses some. **Graduated (leftovers from meta#8354).** That PR removed the experimental designation from the Extension and NodeState APIs, including the "This API is experimental" stability section in `docs/concepts/node-state.md`, but only cleaned up the `@experimental` tags. Two NodeState APIs spelled the marker as prose `EXPERIMENTAL` and were missed: - `makeStateWrapper` (`@lexical/utils`) -- its signature and the `StateConfigWrapper` interface are unchanged since meta#7117 (2025-02-27) - `stateConfigs` in `StaticNodeConfigValue` (`lexical`) -- declaration unchanged since meta#7258 (2025-06-22), and it is the documented entry point in `node-state.md` whose experimental notice was already removed **Deprecated instead of graduated.** `LexicalNode.transform()` is the oldest qualifier -- `@experimental` since meta#4030 (2023-03-07) with a byte-identical signature for 3 years 5 months -- but blessing it as stable would be the wrong call: it is superseded by the `$transform` property of the config returned by `$config()`, which the codebase already steered people toward. Per AGENTS.md, it is deprecated with the replacement documented rather than removed, and it keeps working unchanged. The `$transform` doc no longer describes `transform()` as "internal" now that it is deprecated and publicly documented. Two APIs were considered and deliberately left alone: - `hasNestedTables` (`@lexical/react`, `@lexical/table`) qualifies mechanically at 8.7 months with an unchanged declaration, but its marker reads "Nested tables are not officially supported" -- a product-support caveat, not an API-stability one, so clearing it would assert support. Its sibling `hasFitNestedTables` (meta#8097) is 5.9 months old and misses the cutoff, so graduating one would split the pair. - `StaticNodeConfigValue` had its type parameter widened from `string` to `string | symbol` in meta#8645 (2026-06-05), so it fails the unchanged-API test. ## Test plan Comment-only changes: no type or runtime surface is modified. `transform()` remains fully functional, and `getTransformSetFromKlass` still collects both it and `$transform` into the same transform set, so no behavior changes for existing callers. Existing test coverage (including the `static transform()` override in `LexicalNestedComposer.test.tsx`) applies unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
etrepum
pushed a commit
to etrepum/lexical
that referenced
this pull request
Aug 3, 2026
…ic transform(), normalize makeStateWrapper marker ## Description Audit of APIs still marked experimental whose signatures have been unchanged for more than 6 months, comparing the experimental surface at v0.40.0 (2026-02-02, the 6-month boundary) against main. Of 225 experimental annotations on main, only 11 existed 6 months ago -- everything else (named slots, DOM import/render, mdast, shadow DOM) landed 2026-04 or later. Collab v2 is intentionally left experimental. The repo marks experimental status two ways (`@experimental` tags and prose `EXPERIMENTAL`), so a tag-only scan misses some. This PR makes three changes. **Graduated: `stateConfigs`** in `StaticNodeConfigValue` (`lexical`). Its declaration is unchanged since meta#7258 (2025-06-22) and it is the documented entry point in `docs/concepts/node-state.md`, whose "This API is experimental" stability section was already removed by meta#8354. That PR graduated the Extension and NodeState APIs but only cleaned up the `@experimental` tags, so this prose `EXPERIMENTAL` marker was left behind. **Deprecated: `LexicalNode.transform()`.** It is the oldest qualifier -- `@experimental` since meta#4030 (2023-03-07) with a byte-identical signature for 3 years 5 months -- but blessing it as stable would be the wrong call: it is superseded by the `$transform` property of the config returned by `$config()`, which the codebase already steered people toward. Per AGENTS.md it is deprecated with the replacement documented rather than removed, and it keeps working unchanged. The `$transform` doc no longer describes `transform()` as "internal" now that it is deprecated and publicly documented. **Left experimental, marker normalized: `makeStateWrapper`** (`@lexical/utils`). Its signature and the `StateConfigWrapper` interface are unchanged since meta#7117 (2025-02-27), so it qualifies on age, but it is a public export with no call sites, tests, or documentation references anywhere in the repo. An API that nothing exercises has not really been validated by that time, so it stays experimental; only the prose `EXPERIMENTAL` is rewritten to the `@experimental` tag so tooling and future audits can see it. Two APIs were considered and deliberately left alone: - `hasNestedTables` (`@lexical/react`, `@lexical/table`) qualifies mechanically at 8.7 months with an unchanged declaration, but its marker reads "Nested tables are not officially supported" -- a product-support caveat, not an API-stability one, so clearing it would assert support. Its sibling `hasFitNestedTables` (meta#8097) is 5.9 months old and misses the cutoff, so graduating one would split the pair. - `StaticNodeConfigValue` had its type parameter widened from `string` to `string | symbol` in meta#8645 (2026-06-05), so it fails the unchanged-API test. ## Test plan Comment-only changes: no type or runtime surface is modified. `transform()` remains fully functional, and `getTransformSetFromKlass` still collects both it and `$transform` into the same transform set, so no behavior changes for existing callers. Existing test coverage (including the `static transform()` override in `LexicalNestedComposer.test.tsx`) applies unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Lexical Extension can be documented as stable. It has been available for more than six months (v0.36.1 was released in Sep 2025), now has much more usage in the playground, and hasn't needed any significant API changes.
NodeState has been around for over a year, since Feb 2025 v0.26.0, so we can remove notes about its stability as well.
Test plan
Docs-only change