Undo / Redo are not working when collaboration is enabled
@nperez0111 ya está trabajando en esto.
Desde el 13/1/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Describe the bug
Hello and thank you for the work on BlockNote!
It seems that undo / redo (Ctrl + Z / Ctrl + Y) are not working when the collaboration feature with Yjs is enabled.
When enabling collaboration with a minimal YJsProvider, Ctrl + Z does nothing. If we comment the collaboration part of the config it's working again.
Also, when trying to implement it by hand with the following code, it's still not working:
const undoHandler = useCallback((e: KeyboardEvent) => {
if ((e.metaKey || e.ctrlKey) && (e.key === 'z' || e.key === 'Z')) {
console.log('undo'); // displayed
editor.undo(); // <- NOT WORKING
}
}, []);
useWindowEvent('keydown', undoHandler);
To Reproduce
Here is a minimal reproduction in a sandbox: https://stackblitz.com/edit/github-qp3au5av?file=src%2FApp.tsx
And the code, in case the sandbox is not working:
App.jsx
import '@blocknote/core/fonts/inter.css';
import { BlockNoteView } from '@blocknote/mantine';
import '@blocknote/mantine/style.css';
import { useCreateBlockNote } from '@blocknote/react';
import * as Y from 'yjs';
export default function App() {
const ydoc = new Y.Doc();
const yLoggingProvider = new YProvider(ydoc);
const editor = useCreateBlockNote({
collaboration: {
provider: yLoggingProvider,
fragment: ydoc.getXmlFragment('blocks'),
user: {
name: 'My Username',
color: '#ff0000',
},
// showCursorLabels: 'always',
},
});
// Renders the editor instance using a React component.
return <BlockNoteView editor={editor} />;
}
export class YProvider {
private doc: Y.Doc;
private name: string;
constructor(doc: Y.Doc, name = 'YProvider') {
this.doc = doc;
this.name = name;
this.doc.on('update', this.onLocalUpdate);
console.log(`[${this.name}] provider started`);
}
private onLocalUpdate = (update: Uint8Array, origin: any) => {
Y.applyUpdate(this.doc, update);
};
/**
* Apply a received update from an external source.
* This bypasses the debounce and applies immediately.
*/
public receiveUpdate(update: Uint8Array): void {
Y.applyUpdate(this.doc, update, `${this.name}-external`);
}
public destroy(): void {
this.doc.off('update', this.onLocalUpdate);
}
}
Alternatively, you can try with the official WebrtcProvider as shown in the doc here: https://www.blocknotejs.org/docs/features/collaboration
const provider = new WebrtcProvider("my-document-id", ydoc);
const editor = useCreateBlockNote({
collaboration: {
provider: provider,
// Where to store BlockNote data in the Y.Doc:
fragment: ydoc.getXmlFragment("blocks"),
// Information (name and color) for this user:
user: {
name: "My Username",
color: "#ff0000",
},
// showCursorLabels: 'always',
}
});
It's not working.
Misc
- Node version: 25.2
- Package manager: npm
- Browser: It's not working with multiple browsers
- I'm a sponsor and would appreciate if you could look into this sooner than later 💖
- Lenguaje dominante
- TypeScript
- Estrellas
- 10.2k
- Forks
- 772
- Merge medio
- 3 d 11 h
- PR fusionados (30 d)
- 17
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de TypeCellOS/BlockNote
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
TypeCellOS/BlockNote#3098 ·
-
Off-By-One `RangeError` Crash and Text Duplication in `StyleManager.editLink` and `deleteLink` Abiertoneeds-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
TypeCellOS/BlockNote#3073 ·
-
needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
TypeCellOS/BlockNote#3072 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
TypeCellOS/BlockNote#2949 · 1 comentario ·
-
a11y
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
TypeCellOS/BlockNote#2855 ·
Todos los issues de TypeCellOS/BlockNote
Issues similares
-
Type/Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
OpenNSW/nsw-srilanka#497 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
0xMiden/bridge-portal#132 ·
-
react-doctor severity:warning tech-debt
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
digidem/comapeo-cloud-app#403 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100