Introduction
Use these guides to add Yjs-based CRDT to your project with Velt. Pick the React Hook wrapper for the fastest integration in React apps, or the core library for other frameworks and custom implementations.Setup
Step 1: Install Dependencies
- React / Next.js
- Other Frameworks
npm:yarn:
Step 2: Initialize Velt in your app
Initialize the Velt client by following the Velt Setup Docs. This is required for the collaboration engine to work.Step 3: Initialize a CRDT store
- React / Next.js
- Other Frameworks
Step 4: Set or update the store value
Set or update local changes to the store.- React / Next.js
- Other Frameworks
Step 5: Listen for changes
Listen and subscribe for updates from local and remote peers.- React / Next.js
- Other Frameworks
Step 6: Save and restore versions
Create checkpoints and roll back when needed.- React / Next.js
- Other Frameworks
APIs
Custom Encryption
Encrypt CRDT data before it’s stored in Velt by registering a custom encryption provider. For CRDT methods, input data is of typeUint8Array | number[].
- React / Next.js
- Other Frameworks
Initialization
- React / Next.js
- Other Frameworks
useVeltCrdtStore
React hook to create and sync a collaborative CRDT store.- Params: useveltcrdtstore
- Returns: Store properties and methods
Common Methods
These methods are available in both React and non-React frameworks.update
Update the store value and sync to peers.- Params:
newValue: T - Returns:
void
saveVersion
Save a snapshot of the current state as a named version.- Params:
versionName: string - Returns:
Promise<string>
getVersions
Fetch all saved versions.- Returns:
Promise<Version[]>
getVersionById
Fetch a specific version by ID.- Params:
versionId: string - Returns:
Promise<Version | null>
setStateFromVersion
Restore the store state from a specific version object.- Params:
version: Version - Returns:
Promise<void>
React-Specific Methods
value
Current value of the store (React hook only).- Type:
T | null
versions
List of all stored versions (React hook only).- Type:
Version[]
store
Underlying Velt Store instance (React hook only).- Type:
Store<T> | null
restoreVersion()
Restore the store to a specific version by ID (React hook only).- Params:
versionId: string - Returns:
Promise<boolean>
Non-React Specific Methods
getValue
Get the current store value (non-React frameworks only).- Returns:
T
subscribe
Subscribe to changes in the store (non-React frameworks only).- Params:
(newValue: T) => void - Returns:
() => void(unsubscribe)
destroy
Destroy the store, cleaning up resources and listeners (non-React frameworks only).- Returns:
void
Yjs Integration Methods
getDoc
Get the underlying Yjs document.- Returns:
Y.Doc
getProvider
Get the provider instance for the store.- Returns:
Provider
getText
Get the Y.Text instance if store type is ‘text’.- Returns:
Y.Text | null
getXml
Get the Y.XmlFragment instance if store type is ‘xml’.- Returns:
Y.XmlFragment | null
Developer Tools
VeltCrdtStoreMap
window.VeltCrdtStoreMap is a global debugging interface that exposes all active CRDT stores in your application. It’s automatically created and maintained by the Velt CRDT library, allowing you to inspect, monitor, and debug CRDT stores from the browser console or developer tools.
Availability
TheVeltCrdtStoreMap interface is automatically available on the global window object when you initialize any CRDT store.
- Automatically available in browser environments
- Exposed on
window.VeltCrdtStoreMapwhen any CRDT store is created - Singleton instance (same object reference across all stores)
- Available immediately after store initialization
Purpose
Use VeltCrdtStoreMap for:- Debugging: Inspect store values and state
- Monitoring: Subscribe to store changes
- Development: Test and verify CRDT behavior
- Troubleshooting: Diagnose synchronization issues
API Reference
Methods
get(id?: string): VeltCrdtStore | undefined Get a store by its ID.- Params:
id(optional): Store ID. If omitted, returns the first registered store.
- Returns:
VeltCrdtStore | undefined- Store instance or undefined if not found
getAll(): { [id: string]: VeltCrdtStore }
Get all registered stores as an object.
- Returns: Object mapping store IDs to store instances
Properties
stores: { [id: string]: VeltCrdtStore }
Direct access to all stores (computed property, same as getAll()).
Store Interface
Each store in the map implements the VeltCrdtStore interface: getValue(): any Get the current value from the store.- Returns: Current store value (type depends on store type: string, array, map, etc.)
- Params:
callback: Function called whenever the store value changes. Receives the new value as parameter
- Returns: Unsubscribe function to stop listening to changes
Usage Examples
- React / Next.js
- Other Frameworks
Basic InspectionMonitor Store ChangesDebugging Specific StoreFinding Stores
Events
The library dispatches custom events when stores are registered or unregistered: veltCrdtStoreRegister Fired when a new store is registered.- Event Detail:
{ id: string }// Store ID
- React / Next.js
- Other Frameworks
- Event Detail:
{ id: string }// Store ID
- React / Next.js
- Other Frameworks

