Skip to main content
Version: 0.x.x

Realtime Store - React

The Realtime Store allows you to store, update, retrieve, and observe custom key-value data within a meeting — in real time. It acts as a shared data layer across all connected participants, ensuring synchronized states throughout the session.

This is particularly useful for collaborative or stateful meeting experiences such as:

  • Pinned messages and flags
  • Moderation data (e.g., blocked users)
  • Collaborative notes or polls

useRealtimeStore

To utilize Realtime Store in a meeting, VideoSDK provides a hook called useRealtimeStore. This hook enables you to subscribe to any key and publish to any key, facilitating the exchange of realtime key-value data during the meeting.


setValue()

The setValue() method is used to store or update data in the RealtimeStore. If a key already exists, it will be overwritten with the new value. Passing null as the value deletes the key. Since this method throws errors directly, it should be enclosed in a try...catch block to handle exceptions gracefully.

Key Notes

  • Supports string values only.
  • Each key can store up to 1 KB of data.
  • A maximum of 100 keys are allowed per session.
  • Deletion is performed by setting the value to null.
  • Throws an error if:
    • Key or value is missing or not of type string.
    • The request fails.
    • The session exceeds the 100-key limit.

Example

import { useRealtimeStore } from "@videosdk.live/react-sdk";
const MeetingView = () => {
//Getting the setValue method from hook
const { setValue } = useRealtimeStore("Blocked_Students");

const handleSetValue = async () => {
try {
await setValue("[abcd,efgh]");
console.log("Data set successfully!");
} catch (error) {
console.error("Failed to set data:", error);
}
};

return (
<>
<button onClick={handleSetValue}>Set Value</button>
</>
);
};

getValue()

The getValue() method retrieves the current value associated with a given key. Since this method throws errors directly, it should be enclosed in a try...catch block to handle exceptions gracefully.

Key Notes

  • Returns the current string value for the given key
  • Useful for fetching shared state when joining a meeting or reloading a view.
  • Throws an error if the key is missing or if the request fails.

Example

import { useRealtimeStore } from "@videosdk.live/react-sdk";
const MeetingView = () => {
//Getting the setValue method from hook
const { getValue } = useRealtimeStore("Blocked_Students");

const handleGetValue = async () => {
try {
const value = await getValue();
} catch (error) {
console.error("Failed to get data:", error);
}
};

return (
<>
<button onClick={handleGetValue}>Get Value</button>
</>
);
};

onValueChanged()

The onValueChanged event is emitted whenever a value is changed for the given key in the realtime store. It provides both the value and updatedBy so you can process the value accordingly.

Example

import { useRealtimeStore } from "@videosdk.live/react-sdk";

const MeetingView = () => {
//Event to recieve the data
function onValueChanged({ updatedBy, value }) {
console.log("onValueChanged", updatedBy, value);
}

//Getting the send method from the hook and assigning event callbacks
const {} = useRealtimeStore("Blocked_Students", {
onValueChanged,
});

return <>...</>;
};

⚠️ Error Handling & Constraints

PropertyDescription
Error HandlingAll RealtimeStore methods throw directly; wrap them in try...catch.
Payload SizeMaximum 1 KB per key.
Supported TypeOnly string values are supported. Use null to delete key.
ConcurrencyThe latest write overwrites previous values (last write wins)
Key LimitA maximum of 100 keys are allowed in a single session.

API Reference

The API references for all the methods utilized in this guide are provided below:

Got a Question? Ask us on discord