Velt CRDT Best Practices
Comprehensive best practices guide for implementing real-time collaborative editing with Velt CRDT (Yjs), maintained by Velt. Contains 42 rules across 5 categories, prioritized by impact to guide automated code generation and debugging.
When to Apply
Reference these guidelines when:
- Setting up Velt client and CRDT stores
- Integrating with Tiptap, BlockNote, CodeMirror, or ReactFlow
- Implementing real-time synchronization
- Managing version history and checkpoints
- Debugging collaboration or sync issues
- Testing multi-user collaboration
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Core CRDT | CRITICAL | core- |
| 2 | Tiptap Integration | CRITICAL | tiptap- |
| 3 | BlockNote Integration | HIGH | blocknote- |
| 4 | CodeMirror Integration | HIGH | codemirror- |
| 5 | ReactFlow Integration | HIGH | reactflow- |
Quick Reference
1. Core CRDT (CRITICAL)
core-install- Install correct CRDT packages for your frameworkcore-velt-init- Initialize Velt client before creating storescore-store-v2-api- v2 UseuseStore<T>+useAwarenessReact hooks;createVeltStorev2 config (forceResetInitialContent,contentKey,userId,collection,logLevel); reactive status/sync/errorcore-v1-to-v2-migration- Migration table:useVeltCrdtStore→useStore(id→storeId, new status/sync/error/onError,useAwareness)core-store-create-vanilla- Use createVeltStore for non-React (entry point unchanged in v2)core-store-types- Choose correct store type (text/array/map/xml/xmltext)core-store-array- Array store: useStore/createVeltStore with type:'array', Array.isArray() guard, add/remove item patternscore-store-map- Map store: useStore/createVeltStore with type:'map', object guard, key-level update/delete patternscore-store-text- Text store: useStore/createVeltStore with type:'text', textarea binding, null coalesce with ?? ''core-store-xml- XML store: NEVER call update(); mutate via store.getXml() (Y.XmlFragment) + Yjs APIs; requires npm i yjscore-store-subscribe- Subscribe to store changes for remote updatescore-store-update- Use update() method to modify valuescore-version-save- Save named version checkpointscore-encryption- Use custom encryption provider for sensitive datacore-webhooks- Use webhooks to listen for CRDT data changescore-rest-api- Use REST API to retrieve CRDT data server-sidecore-activity-debounce- Use setActivityDebounceTime() to control how frequently batched CRDT editor activities are flushedcore-activity-action-types- Use CrdtActivityActionTypes constant for type-safe CRDT activity filtering instead of raw stringscore-message-stream- Use CrdtElement message-stream methods (pushMessage, onMessage, getMessages, getSnapshot, saveSnapshot, pruneMessages) for Yjs-backed collaborative editorscore-debug-storemap- Use VeltCrdtStoreMap for runtime debuggingcore-debug-testing- Test with multiple browser profilescore-store-create-react- (v1 — DEPRECATED) useVeltCrdtStore for React; seecore-v1-to-v2-migration
2. Tiptap Integration (CRITICAL)
tiptap-install- Install Tiptap CRDT v2 packagestiptap-collaboration-manager- v2 Use useCollaboration / createCollaboration + CollaborationManager APItiptap-v1-to-v2-migration- Migration table: useVeltTiptapCrdtExtension → useCollaborationtiptap-disable-history- Disable Tiptap history to prevent conflictstiptap-editor-id- Use unique editorId per instancetiptap-cursor-css- Add CSS for collaboration cursorstiptap-initial-content- Use HTML string format for initialContenttiptap-comments-integration- Integrate Velt Comments with Tiptaptiptap-nextjs-ssr- Next.js SSR considerationstiptap-testing- Test collaboration with multiple userstiptap-setup-react- (v1 — DEPRECATED) useVeltTiptapCrdtExtension for React; see migration ruletiptap-setup-vanilla- (v1 — DEPRECATED) createVeltTipTapStore for non-React; see migration rule
3. BlockNote Integration (HIGH)
blocknote-install- Install BlockNote CRDT v2 packagesblocknote-collaboration-manager- v2 Use useCollaboration / createCollaboration + CollaborationManager APIblocknote-v1-to-v2-migration- Migration table: useVeltBlockNoteCrdtExtension → useCollaborationblocknote-editor-id- Use unique editorId per instanceblocknote-testing- Test collaboration with multiple usersblocknote-setup-react- (v1 — DEPRECATED) useVeltBlockNoteCrdtExtension; see migration rule
4. CodeMirror Integration (HIGH)
codemirror-install- Install CodeMirror CRDT v2 packagescodemirror-collaboration-manager- v2 Use useCollaboration / createCollaboration + CollaborationManager APIcodemirror-v1-to-v2-migration- Migration table: useVeltCodeMirrorCrdtExtension → useCollaborationcodemirror-ycollab- Wire yCollab extension with manager.getCollaborationPrimitives()codemirror-editor-id- Use unique editorId per instancecodemirror-testing- Test collaboration with multiple userscodemirror-setup-react- (v1 — DEPRECATED) useVeltCodeMirrorCrdtExtension for React; see migration rulecodemirror-setup-vanilla- (v1 — DEPRECATED) createVeltCodeMirrorStore for non-React; see migration rule
5. ReactFlow Integration (HIGH)
reactflow-install- Install ReactFlow CRDT packagereactflow-setup-react- Use useVeltReactFlowCrdtExtensionreactflow-handlers- Use CRDT handlers for node/edge changesreactflow-editor-id- Use unique editorId per instancereactflow-testing- Test collaboration with multiple users
How to Use
Read individual rule files for detailed explanations and code examples:
rules/shared/core/core-install.md
rules/shared/tiptap/tiptap-disable-history.md
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Verification checklist
- Source pointer to Velt documentation
Compiled Documents
AGENTS.md— Compressed index of all rules with file paths (start here)AGENTS.full.md— Full verbose guide with all rules expanded inline