Repository navigation
Conversation
…y install steps work today, and say what a relay needs
## Description
The `@lexical/y` install line (`npm i @lexical/y @lexical/extension lexical
@y/y@14.0.0-rc.29`) does not give a working setup today:
- `@lexical/y` is not in a Lexical release yet, so npm's `latest` for it is
the placeholder `0.0.0-bootstrap.0`. The package only exists as nightlies,
and each nightly depends on the exact `lexical` of the same nightly, so
mixing it with `lexical@latest` (0.53.0) puts two copies of Lexical in the
app.
- The setup example imports `@lexical/rich-text`, `@lexical/list` and
`@y/websocket`, which the line does not install. `npm i @y/websocket` gets
its `latest` tag, 4.0.0-0, which peers on the earlier `yjs@14.0.0-*`
prereleases rather than `@y/y`, so npm installs a second copy of Yjs next
to `@y/y`. `@y/protocols`' `latest` (1.0.6-0) has the same problem.
- Servers says "any Yjs 14 server or relay can host the documents", but the
latest `@y/websocket-server` (0.1.5) depends on `yjs@^14.0.0-7` and keeps
each room in a plain `Doc` with the format cleanup on, which the same
section says a server must not do. Nothing says what a relay for
`@y/websocket` clients needs.
This change:
- installs everything the example uses in one pinned command
(`--save-exact`, every Lexical package `@nightly` until a release includes
`@lexical/y`, `@y/websocket@4.0.0-rc.2`), says
why the `@y/*` `latest` tags do not fit, and gives `npm ls yjs` (no
`yjs@14.0.0-*`) as the check;
- says which `moduleResolution` Lexical's types need: with an older one
(`node10`), TypeScript reads the `typescript-too-old.d.ts` stub, and
`import {createYDoc} from '@lexical/y'` fails only with `TS2305: Module
'"@lexical/y"' has no exported member 'createYDoc'` (TypeScript 5.9, with
and without `skipLibCheck`: the stub's side-effect import of a module named
after the fix reports nothing);
- qualifies "any Yjs 14 server" with the requirements the section lists, and
adds a relay paragraph: why `@y/websocket-server` 0.1.5 does not fit, what
the playground's in-memory `collab-y-server.mjs` does and needs (with its
install line and room URL), and how to persist a room without an older
snapshot replacing a newer one;
- says the same in the package README (which also gains
`@lexical/rich-text`, used by its example), with a `[docs]` changeset.
## Changeset
`.changeset/lexical-y-pin-y-packages.md` (`[docs]`, the package README).
## Test plan
### Before
```
$ npm view @lexical/y dist-tags
{ latest: '0.0.0-bootstrap.0', bootstrap: '0.0.0-bootstrap.0', nightly: '0.53.1-nightly.20261029.0' }
$ npm view @lexical/y@nightly dependencies
{ lexical: '0.53.1-nightly.20261029.0', '@lexical/internal': '0.53.1-nightly.20261029.0', '@lexical/extension': '0.53.1-nightly.20261029.0' }
$ npm i @y/y@14.0.0-rc.29 @y/websocket && npm ls yjs @y/y @y/websocket
├─┬ @y/websocket@4.0.0-0
│ ├─┬ @y/protocols@1.0.6-rc.1
│ │ └── @y/y@14.0.0-rc.29 deduped
│ └── yjs@14.0.0-16
└── @y/y@14.0.0-rc.29
$ npm view @y/websocket-server@0.1.5 dependencies
{ '@y/protocols': '^1.0.6-1', lib0: '^0.2.102', ws: '^6.2.1', yjs: '^14.0.0-7' }
$ node -e "import('yjs').then(Y => console.log(new Y.Doc().cleanupFormatting))"
true
```
`@y/websocket-server`'s `WSSharedDoc extends Y.Doc` (from `yjs`) and never
sets `cleanupFormatting`.
### After
```
$ npm view @y/websocket@4.0.0-rc.2 peerDependencies
{ '@y/y': '*' }
$ npm view @y/protocols@1.0.6-rc.1 peerDependencies
{ '@y/y': '*' }
$ pnpm run ci-check
...
Found 0 errors
$ pnpm run check-changesets
Changeset check passed: 31 pending changeset(s) valid.
```
Docs only; no browser checks apply.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
lexical
@lexical/a11y
@lexical/clipboard
@lexical/code
@lexical/code-core
@lexical/code-prism
@lexical/code-shiki
@lexical/compiler
@lexical/devtools-core
@lexical/dragon
@lexical/eslint-plugin
@lexical/extension
@lexical/fast-check
@lexical/file
@lexical/hashtag
@lexical/headless
@lexical/history
@lexical/html
@lexical/internal
@lexical/link
@lexical/list
@lexical/mark
@lexical/markdown
@lexical/mdast
@lexical/offset
@lexical/overflow
@lexical/plain-text
@lexical/react
@lexical/rich-text
@lexical/selection
@lexical/table
@lexical/tailwind
@lexical/text
@lexical/utils
@lexical/y
@lexical/yjs
commit: |
etrepum
reviewed
Oct 29, 2026
| no exported member" rather than an error that names the setting. | ||
|
|
||
| - **`@nightly` until a Lexical release includes `@lexical/y`.** Until then, | ||
| npm's `latest` for `@lexical/y` is a placeholder (`0.0.0-bootstrap.0`) |
Collaborator
There was a problem hiding this comment.
Probably not worth documenting a bootstrap version that wouldn’t install a working copy
etrepum
approved these changes
Oct 29, 2026
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
The
@lexical/yinstall line (npm i @lexical/y @lexical/extension lexical @y/y@14.0.0-rc.29) does not give a working setup today:@lexical/yis not in a Lexical release yet, so npm'slatestfor it isthe placeholder
0.0.0-bootstrap.0. The package only exists as nightlies,and each nightly depends on the exact
lexicalof the same nightly, somixing it with
lexical@latest(0.53.0) puts two copies of Lexical in theapp.
@lexical/rich-text,@lexical/listand@y/websocket, which the line does not install.npm i @y/websocketgetsits
latesttag, 4.0.0-0, which peers on the earlieryjs@14.0.0-*prereleases rather than
@y/y, so npm installs a second copy of Yjs nextto
@y/y.@y/protocols'latest(1.0.6-0) has the same problem.latest
@y/websocket-server(0.1.5) depends onyjs@^14.0.0-7and keepseach room in a plain
Docwith the format cleanup on, which the samesection says a server must not do. Nothing says what a relay for
@y/websocketclients needs.This change:
(
--save-exact, every Lexical package@nightlyuntil a release includes@lexical/y,@y/websocket@4.0.0-rc.2), sayswhy the
@y/*latesttags do not fit, and givesnpm ls yjs(noyjs@14.0.0-*) as the check;moduleResolutionLexical's types need: with an older one(
node10), TypeScript reads thetypescript-too-old.d.tsstub, andimport {createYDoc} from '@lexical/y'fails only withTS2305: Module '"@lexical/y"' has no exported member 'createYDoc'(TypeScript 5.9, withand without
skipLibCheck: the stub's side-effect import of a module namedafter the fix reports nothing);
adds a relay paragraph: why
@y/websocket-server0.1.5 does not fit, whatthe playground's in-memory
collab-y-server.mjsdoes and needs (with itsinstall line and room URL), and how to persist a room without an older
snapshot replacing a newer one;
@lexical/rich-text, used by its example), with a[docs]changeset.Changeset
.changeset/lexical-y-pin-y-packages.md([docs], the package README).Test plan
Before
@y/websocket-server'sWSSharedDoc extends Y.Doc(fromyjs) and neversets
cleanupFormatting.After
Docs only; no browser checks apply.