> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# setMeetingSessionData()

> Sets arbitrary shared data on the current meeting session, synced to all participants.

`setMeetingSessionData(data, mergeStrategy?)`

<Badge color="red">{"✗"} Prebuilt</Badge> <Badge color="green">{"✓"} Custom</Badge>

Writes to a shared key-value store scoped to the current meeting session. All participants receive the update in near real-time — remote clients typically consume changes via the [`meeting-session-state-updated`](/reference/daily-js/events/messaging-events#meeting-session-state-updated) event, or by polling [`meetingSessionState()`](/reference/daily-js/instance-methods/meeting-session-state). Data is not persisted after the session ends.

## Parameters

<ParamField body="data" type="unknown" required>
  A map-like JavaScript object that:

  * Is serializable to JSON
  * Has a max payload size of 100KB
  * Can be shallow-merged
</ParamField>

<ParamField body="mergeStrategy" type="'replace' | 'shallow-merge'">
  How to combine the new data with the existing session data.

  * `'replace'` (default) — replaces the entire existing data object.
  * `'shallow-merge'` — merges top-level keys, leaving unaffected keys intact. Note that nested objects are replaced entirely, not recursively merged.
</ParamField>

## Return value

Returns `void`. To observe changes, listen to the [`meeting-session-state-updated`](/reference/daily-js/events/messaging-events#meeting-session-state-updated) event or poll [`meetingSessionState()`](/reference/daily-js/instance-methods/meeting-session-state).

## Rate limiting

Updates are batched and synced at most once per second. If multiple clients make conflicting `'replace'` or overlapping `'shallow-merge'` calls in rapid succession, precise ordering is not guaranteed.

This makes `setMeetingSessionData()` unsuitable for high-frequency real-time use cases where sub-second updates matter.

## Examples

### Replace

```javascript theme={null}
// Current data: { address: { country: 'Finland' } }
call.setMeetingSessionData({ code: '358' }, 'replace');
// New data: { code: '358' }
```

### Shallow merge

```javascript theme={null}
// Current data: { address: { country: 'Finland' } }
call.setMeetingSessionData({ code: '358' }, 'shallow-merge');
// New data: { address: { country: 'Finland' }, code: '358' }

call.setMeetingSessionData({ address: { city: 'Helsinki' } }, 'shallow-merge');
// New data: { address: { city: 'Helsinki' }, code: '358' }
// Note: address.country was lost because nested objects are replaced, not merged
```

### Listening for updates

```javascript theme={null}
call.on('meeting-session-state-updated', ({ meetingSessionState }) => {
  console.log('Session data updated:', meetingSessionState.data);
});
```

## See also

<CardGroup>
  <Card title="Methods" icon="code" iconType="solid">
    * [meetingSessionState()](/reference/daily-js/instance-methods/meeting-session-state)
  </Card>

  <Card title="Events" icon="bolt" iconType="solid">
    * [meeting-session-state-updated](/reference/daily-js/events/messaging-events#meeting-session-state-updated)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Custom messages and shared data](/docs/daily-js/guides/custom-messages)
  </Card>
</CardGroup>
