> ## 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.

# September 15, 2022

> The latest updates to Daily's real-time audio and video APIs.

## September 15th, 2022

## daily-js 0.31.0

* 🔐 A new permissions system allows you to specify a couple of different permissions for each participant:

  * `canSend`, which specifies which kinds of media the participant is allowed to send (`'video'`, `'audio'`, `'screenVideo'`, `'screenAudio'`).
  * `hasPresence`, which specifies whether the participant appears as “present” (as opposed to “hidden”) in the meeting, i.e. whether they are listed in everyone's `participants()`.

  Participant permissions can be specified in a couple of ways:

  * Initial default permissions for new participants in your [domain](/reference/rest-api/domain/get-domain-config#response-config-permissions), [room](/reference/rest-api/rooms/get-room#response-config-permissions), or [meeting token](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-permissions) configurations
  * A [meeting owner](/docs/guides/privacy-and-security/controlling-who-joins-a-meeting#meeting-owner-privileges) can change other participants' permissions at runtime with a call to [`updateParticipant()`](/reference/daily-js/instance-methods/update-participant#param-update-permissions) or [`updateParticipants()`](/reference/daily-js/instance-methods/update-participants), e.g. `updateParticipant('<participant-id>', { updatePermissions: { canSend: new Set(['video', 'audio']), hasPresence: true } })`

* 📌 The code that `daily-js` downloads before you join a call is now “pinned” to this version of `daily-js`. That means you will no longer get (in many cases, unwanted) updates to Daily client-side code without updating your `daily-js` dependency. [Read more about this change in the last version's release notes.](https://github.com/daily-co/daily-js/releases/tag/daily-js-2022-08-22-0.30.0)

* 🐛 We fixed a bug where if you attempted to update your desired max spatial layer for some subscribed media (for example, via `updateReceiveSettings({ '<participant-id>': { video: { layer: } } })`) *while* the subscription was still being established, the updated layer would never take effect.

* 🏔 `getNetworkTopology()` will now return the currently-chosen topology as soon as we know it, not after a delay.

* 🪵 We've stopped polluting your Sentry logs with our noisy breadcrumbs.

* 👤 If you invoke `setUserData(null)`, other participants will see your `userData` change to `null`, not `undefined`.

## react-native-daily-js 0.29.0

* 💪 Includes all of the above changes, except the fix for `getNetworkTopology()`, which doesn't apply to SFU-mode-only React Native.
