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

# Changelog archive: 2022

> Archived Daily changelog entries from 2022 (16 updates), retained for reference.

Archived changelog entries from 2022. For the latest updates, see the [changelog](/changelog).

<Update label="December 23, 2022">
  The latest updates to the Daily real-time audio and video API.

  ## Dec 23, 2022

  In this release, we've made a number of performance and bug fixes across our products. Happy holidays!

  ## daily-js

  ### 0.36.1

  * Improved logging to include prejoin logs. Additionally, added new logs for identifying when multiple daily instances are connected simultaneously (multiple daily instances is unsupported and leads to unexpected issues).
  * Added server-side support for detecting and warning clients when they are using a `daily-js` version that is nearing end of support, unsupported, or nearing end of life. Additionally, added a means to reject a client from joining if using a version that is past end of life.
  * Improved [screen-share error handling](/reference/daily-js/events/error-events#screen-share-error). Screen-share errors now include more detailed information about how and why the error occurred.
  * Fixed background-blur bug where a failure caused the processor to get stuck in a busy state.
  * Fixed for slower background-blur frame rate.
  * Added better logging around fatal errors and ejections.
  * Improved the error messaging in streaming/recording API to clarify the UUID requirement when an invalid ID is provided.
  * Turned off debug level logging in large calls.
  * Added back the logging for Highest-videoFrameSize.
  * Improved logging for debugging cases where users are ejected.

  ## react-native-daily-js

  ### 0.34.0

  * Improved logging to include prejoin logs. Additionally, added new logs for identifying when multiple daily instances are connected simultaneously (multiple daily instances is unsupported and leads to unexpected issues).
  * Added server-side support for detecting and warning clients when they are using a `daily-js` version that is nearing end of support, unsupported, or nearing end of life. Additionally, added a means to reject a client from joining if using a version that is past end of life.
  * Bumped the version of `react-native-webrtc` to get various fixes for Samsung devices.

  ## Daily Prebuilt

  * Improved the robustness of receiving and playing audio tracks in large meetings with many speakers.
  * Improved the visibility of the notification snackbar by ensuring that it always appears over the main call area.
  * Added a number of performance improvements that result in less CPU use and smoother scrolling through the participant bar when in Speaker View.
  * Fixed an issue where Safari on macOS would crash due to overscrolling the participant bar when in Speaker View.
  * Improved error handling for screen-share errors.

  ## REST API

  * Added documentation about our API [rate limiting policy](/docs/rest-api#rate-limits).

  ## Live streaming & recording

  * Improved stability of live streams and recordings by borrowing resources across regions if the current region is saturated.
  * Fixed a number of bugs including one where our HLS pipeline would hang when using a portrait layout.

  ## VCS

  * Added the `omitAudioOnly` parameter that allows one to omit audio-only participants from the composition. Similar to what is possible with `omitPausedVideo` (omit participants that have their video paused).

  ## Additional

  * Fixed an issue where turning on a virtual background would drop the frame rate to 11fps.
</Update>

<Update label="December 6, 2022">
  The latest updates to the Daily real-time audio and video API, including the ability to add custom tracks to your Daily call.

  ## Dec 6, 2022

  In this release, we've added official support for custom tracks to `daily-js`. You can now add multiple cameras and/or microphones to your Daily call through supported APIs.

  ## daily-js

  ### 0.34.0

  * Added support for sending custom tracks in addition to camera, mic, and screen tracks. If you were previously using beta methods to do this, you can migrate your code to use the new methods, which support sending custom tracks in peer-to-peer mode.
  * Added a [`showUserNameChangeUI` call option](/reference/daily-js/types/daily-call-options#param-show-user-name-change-ui) for controlling whether to display the user name change UI in embedded Daily Prebuilt (`true` by default). When set to `false`, you should use [tokens](/reference/rest-api/meeting-tokens) to assign participants `user_name`s.
  * Added a `maxDuration` option when starting a recording. The max recording duration is 3 hours if not specified. It is recommended you not touch this setting unless you’re planning on particularly long recorded meetings.
  * Fixed erroneously-reported track states for `rmpAudio` and `rmpVideo` tracks when a remote media player was paused.

  ### 0.34.1

  * Fixed an issue where custom tracks would not start as expected and would throw an error.
  * Fixed an issue where the call state would not be correctly set to `left-meeting` upon leaving the call.

  ### 0.35.0

  * Added detection of playback interruptions in remote media.
  * Cleaned up debug logging to reduce log noise.

  ### 0.35.1

  * Fix a case where a warning log may throw an exception.

  ## react-native-daily-js

  ### 0.32.0

  * Added a `maxDuration` option when starting a recording. The max recording duration is 3 hours if not specified. It is recommended you not touch this setting unless you’re planning on particularly long recorded meetings.
  * Fixed a bug where, on iOS 16 or later, selecting a non-bluetooth audio device (using `setAudioDevice()`) would erroneously cause the bluetooth audio device to disappear from subsequent calls to `enumerateDevices()`.
  * Fixed erroneously-reported track states for `rmpAudio` and `rmpVideo` tracks when a remote media player was paused.

  ### 0.33.0

  * Added detection of playback interruptions in remote media.
  * Fixed an issue where changing a device while the media type published by that device is disabled would not take effect. For example, changing from user to environment-facing camera while the camera is off.
  * Cleaned up debug logging to reduce log noise.

  ### 0.33.1

  * Fix a case where a warning log may throw an exception.

  ## Daily Prebuilt

  <img src="https://mintcdn.com/daily-co/k5NXwOZS3v6Jul7S/assets/changelog/changelog-35-prebuilt-mobile-page-controller.png?fit=max&auto=format&n=k5NXwOZS3v6Jul7S&q=85&s=c76591d7b52e0ec1d7cf620ecc0c302c" alt="Prebuilt mobile page controller" height="500" data-path="assets/changelog/changelog-35-prebuilt-mobile-page-controller.png" />

  * Revamped the mobile web client's paging controller. Now you can expand a menu to see the available grid pages, see which participants on each page, and jump directly to a page. You can still swipe through pages, but this allows for faster navigation in larger calls.
  * Made a number of performance improvements that reduce the CPU impact, especially in larger calls.
  * Show or hide the user name entry UI in the People panel using the `showUserNameChangeUI` `daily-js` property.
  * Improved error handling for cloud recordings, so that hosts are always notified when a recording encounters an issue.

  ## Daily React

  ### 0.6.1

  * `DailyProvider` now accepts `recoilRootProps` to control the behavior of its internal `RecoilRoot`. You can pass `recoilRootProps={{ override: false }}` to let `daily-react` store its state in your application's own `RecoilRoot`.
  * Hooks with event callbacks no longer wrap calling the passed callback in `setTimeout(() => onX.?(ev), 0)` to reduce fragmentation of stack traces.

  ### 0.6.2

  * Prefixed recoil atom keys with `daily-react-` to avoid naming conflicts when integrating Daily React with an application based on Recoil itself.
  * Added `filter` option to `useActiveSpeakerId` to allow limiting active speakers to subgroups.
  * Fixed an issue where `DailyDevices` could throw an error due to a non-existent `local` participant object.
  * Fixed `DailyAudio` to only consider subscribed audio tracks.

  ## Additional

  * Fixed an issue where the video track's frame rate would drop when background effects were applied.
</Update>

<Update label="November 14, 2022">
  The latest updates to the Daily real-time audio and video API, including a new Daily React library to build custom video and audio experiences.

  ## Nov 14, 2022

  In this release, we're excited to announce support for 1,000 participant real-time calls and 100,000 participant Interactive Live Streams.

  <img src="https://mintcdn.com/daily-co/k5NXwOZS3v6Jul7S/assets/guides-large-meetings-hero.jpeg?fit=max&auto=format&n=k5NXwOZS3v6Jul7S&q=85&s=ec7bc592772a2398df95ef4cbba8d98e" alt="Video call UI displays many participants on the call" width="1480" height="755" data-path="assets/guides-large-meetings-hero.jpeg" />

  * **Large real-time calls** where everyone (up to 1,000 participants) is active, meaning anyone in the call can turn on their devices. This is possible in custom Daily apps and apps using Daily Prebuilt.
  * **Interactive live streaming** of up to 100,000 participants: Up to 25 active participants can join with their devices on in a call, and up to 100,000 participants can join the call in real-time. This is a type of "few-to-many" call setting available through Daily, which supports a group of speakers in a call and a large group of participants.

  To learn more, check out our [scaling large calls guide](/docs/guides/scaling-calls).

  Not to be overshadowed, we're also announcing that the Daily React Hooks library is now the Daily React library. This library now offers audio and video React components to help you get started building on Daily even faster! 🚀

  ## daily-js

  ### 0.32.0

  * 🔇 Added support for specifying `startVideoOff` and `startAudioOff` as part of your [DailyCallOptions](/reference/daily-js/types/daily-call-options) (you could previously only do this by way of a token or room settings). This gives you another way of controlling whether your camera and mic turn on automatically when you `join()` a call. Specifically, this now allows you to use `startCamera()` with one or both devices initially off without having to `preAuth()` first using a token or room with those settings.
  * 🐛 Fixed issue where `.destroy()` would never resolve when called inside of a `"left-meeting"` event handler, originally reported [via github](https://github.com/daily-co/daily-js/issues/185). Thank you [frankie567](https://github.com/frankie567), for reporting the issue!
  * 🚰 Fixed a potentially leaked background worker.

  ### 0.33.0

  * 🗣️ Added support for customizing the audio bitrate using the existing `micAudioMode` property. For more information, see our [audio mode config property docs](/reference/daily-js/types/daily-call-options#param-mic-audio-mode).
  * 📝 Added support for more transcription parameters. We now support the `tier`, `detect_language`, `profanity_filter`, and `redact` options. For more information, see our [transcription docs](/reference/daily-js/instance-methods/start-transcription).
  * ❤️‍🩹 Fixed an issue where a browser under high load may report a stale websocket when it is actually fine.
  * 🗂️ Overhauled the handling and normalizing of `getUserMedia()` errors to ensure `"camera-error"` events are sent consistently across browsers and OSs with more detailed information to help users know exactly what caused the device failure. See the [`"camera-error"` docs](/reference/daily-js/events/settings-events#camera-error) for complete information on the new types of errors and information available.

  ## react-native-daily-js

  ### 0.30.0

  See `daily-js` 0.32.0 notes above PLUS various mobile audio fixes:

  * 📞 We now emit an audio focus loss event on Android if the user receives a phone call.
  * 🔎 On Android versions below 12, we no longer receive an audio focus loss event in situations where the audio from multiple sources would actually be mixed. This issue previously led to remote participants being unnecessarily muted.
  * 🦆 On iOS, we've replaced `AVAudioSessionCategoryOptionDuckOthers` with `AVAudioSessionCategoryOptionMixWithOthers` to improve volume of multiple simultaneous streams without the side effect of not being able to hear remote participants.

  ### 0.31.0

  See `daily-js` 0.33.0 notes above.

  ## Daily Prebuilt

  * Prebuilt now persists background effects from meeting to meeting.
  * An active speaker's video tile never crops, allowing you to always see their entire screen.
  * On mobile devices, now preview your selected camera from the Settings menu.
  * Fixed an issue on desktop Safari that prevented users from recovering from a device error in certain cases.
  * Fixed an issue where a user's video quality settings weren't correctly applied to Grid View.
  * Fixed an issue in Picture-in-Picture mode where participants would appear as a black box.
  * Improved the UI copy throughout the app, including improved Swedish translations.

  ## Daily React

  * Daily React Hooks is now [Daily React](/reference/daily-react)! 🚀
  * Three React Components were added to the Daily React library: [DailyAudio](/reference/daily-react/daily-audio), [DailyAudioTrack](/reference/daily-react/daily-audio-track), [DailyVideo](/reference/daily-react/daily-video).
  * Added a new [useActiveSpeakerId](/reference/daily-react/use-active-speaker-id) hook, which gives participants easy access to the active speaker's ID.
  * Added more options to the [useTranscription](/reference/daily-react/use-transcription) hook.

  ## Mobile SDKs

  * iOS and Android SDKs now support using tokens in order to access private rooms.

  ## REST API

  * Multi-instance [recording](/reference/rest-api/rooms/recordings/start#body-instance-id) and [live streaming](/reference/rest-api/rooms/live-streaming/start#body-instance-id) is now available through the REST API (via the `instanceId` parameter). Multi-instance enables [multiple layouts](/docs/guides/features/live-streaming/multi-instance) per recording or stream.

  ## Streaming & Recording

  * 🔮 Improved filters on Transcription support via Deepgram.

  ## Additional

  * 💳 Now unlock up to 100k programmatic rooms by adding a credit card to your [Daily account](https://dashboard.daily.co/billing).
</Update>

<Update label="October 17, 2022">
  The latest updates to the Daily real-time audio and video API, including the ability to record individual media tracks to your own AWS S3 bucket.

  ## October 17th, 2022

  ## Dashboard

  * 🐛 Made a few bug fixes like adjusting the tooltip focus handler.

  ## Daily Prebuilt

  * Added more adjustments to ensure that the active speaker and screen share render properly in picture-in-picture mode.
  * Fixed an issue where iOS users would lose audio when accessing the Settings menu.
  * Improved the browser autoplay detection logic to only alert users when necessary.

  ## Live Streaming & Recording

  * 📣 You can now [record each individual media track](/docs/guides/features/recording#raw-tracks) into your AWS S3 bucket via `raw-tracks`.

  ## Security

  * 🔐 Single sign-on (SSO) is now available for all accounts with the [Premium Support add-on](https://www.daily.co/pricing#add-ons). To get SSO turned on for your account, please reach out to support at [help@daily.co](mailto:help@daily.co).
</Update>

<Update label="October 4, 2022">
  The latest updates to the Daily real-time audio and video API, including new live streaming, recording, and a new REST API endpoint to send app messages.

  ## October 4th, 2022

  ## Daily Prebuilt

  * 🐛 Made a few bug fixes and optimizations, like making sure the the prominent speaker doesn't change too frequently when many people join a call at once. This makes call joining feel less chaotic.

  ## Dashboard

  * 💅 Lots of UI polish, as usual, like simplifying the focus/hover styles.

  * 🧱 Audience reactions can be enabled (via `enable_emoji_reactions`) for rooms and domains.

  ## REST API

  * 📣 [Live streaming](/reference/rest-api/rooms/live-streaming), [recordings](/reference/rest-api/rooms/recordings), and [send-app-message](/reference/rest-api/rooms/session/send-app-message) REST API endpoints are now available in beta.

  ## VCS

  * 🎥 Added `videoSettings.maxCamStreams` which limits the number of non-screenshare streams that are included in the output.
</Update>

<Update label="September 26, 2022">
  The latest updates to the Daily real-time audio and video API, including bugfixes and VCS improvements.

  ## September 26th, 2022

  ## Daily Prebuilt

  * 💅 Lots of UI polish, as usual, like a scrollable tab list for the sidebar.

  * 💬 Incorporate feedback to audience reactions, like keeping the reactions tray open to allow multiple reactions in a short time.

  * ✋ Enable hosts to lower a participant's hand.

  * 🎼 We've updated the join, error, and knocking sounds.

  * 🎨 Call participants now see both the active speaker and the active screen share in PiP (Picture-in-Picture) mode.

  ## Live streaming & recording

  * 🐛 We fixed a bug that removed panning when mixing stereo channels.

  ## VCS

  * Allow active speaker highlight to be disabled in grid mode.

  * 🐛 We fixed a bug where `cornerRadius` was not applied properly.
</Update>

<Update label="September 15, 2022">
  The latest updates to the Daily real-time audio and video API, including a new permissions system and bugfixes.

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

<Update label="August 22, 2022">
  The latest updates to the Daily real-time audio and video API, including bugfixes and streaming improvements.

  ## August 22nd, 2022

  ## daily-js 0.30.0

  ### ⚠ Notice: May require action

  ### Dynamic updates to previous `daily-js` versions will end

  Today, if you're using `daily-js` in [call object](/docs/daily-js/concepts/call-modes#call-object-mode) mode, you may have noticed that certain bug fixes and updates are applied automatically to your client code, regardless of the version of `daily-js` you're using. Sometimes, these dynamic updates can introduce slight changes to the behavior of the API.

  We’ve received feedback from developers who are looking for more stability and want more control over when these fixes and updates end up in their client implementations.

  So, starting in an upcoming version of `daily-js`, bug fixes and updates will no longer be automatically applied to previous versions of `daily-js`, reducing unexpected changes for users of our library.

  Going forward, if you’re using a numbered version of `daily-js` in call object mode, you will need to periodically update to the latest version in order to receive any of the latest fixes or improvements\*.

  If you're using `daily-js` to embed [Daily Prebuilt](/docs/prebuilt), there's no change; you'll continue to get the latest embedded Daily Prebuilt experience (though you might choose to regularly update `daily-js` to take advantage of its latest API improvements\*).

  \**Note: Daily commits to supporting previous `daily-js` versions released up to 6 months ago, so you'll want to at least update to stay within that support window.*

  ### Features

  * 🚀 Allow setting an idle timeout for streaming

    When a user switches to another tab, some browsers throttle the CPU and cause their stream to pause. Idle timeout logic on our worker will stop livestreams or recordings automatically in this scenario, so we now allow users to override this behaviour and let streams run on for a configurable time before timing out as idle.

    Control this behaviour by setting the new key `minIdleTimeOut` to a number of seconds in the DailyStreamingOptions object supplied to either the [`startRecording`](/reference/daily-js/instance-methods/start-recording) or [`startLivestreaming`](/reference/daily-js/instance-methods/start-live-streaming) daily-js methods. For example:

    ```javascript theme={null}
    startRecording({
      width: 1920,
      height: 1080,
      fps: 30,
      minIdleTimeOut: 5 * 60, // five minutes, the current default
    });
    ```

  * 💻 Update streaming/recording APIs to allow specifying an `instanceId`. This lays the groundwork for supporting multiple active recording and/or livestream instances per call. \[Coming soon]

  * 📷 Add new `selected-devices-updated` event which will fire when [`setOutputDeviceAsync`](/reference/daily-js/instance-methods/set-output-device-async) is called, to allow applications to respond to output device changes.

  * 🐛 Bugfix: Allow `joined_at` to be undefined, and prevent it from being set before it has a reasonable value. (Fixes [Github issue #191](https://github.com/daily-co/daily-js/issues/191)).

  ## react-native-daily-js 0.28.0

  * 💪 Includes all of the above changes!
</Update>

<Update label="July 29, 2022">
  The latest updates to the Daily real-time audio and video API, including performance and security improvements.

  ## July 29, 2022

  In this latest release, we've included several quality-of-life and security improvements. These include new React hooks to retrieve data more efficiently, performance optimizations, and more!

  ## daily-js 0.29.0

  * 🙈 Bugfix: Removed the need for a Babel-specific workaround to avoid `unsafe-eval` in the Content Security Policy. For more information, check out our [Content Security Policy guide](/docs/guides/privacy-and-security/content-security-policy)

  ## react-native-daily-js 0.27.0

  * 🚀 We've added support for React Native 0.69 and up.

  ## Daily Prebuilt

  * 🗣️ Speaker view received some performance optimizations by reducing the number of speaker "swaps".
  * 💅 Lots of UI polish, as usual, like making sure those extra long names truncate when they should.
  * 🐛 Bugfix: Daily Prebuilt on iOS wasn't always resuming your video after switching apps. We fixed this to make sure you can always check other apps without worrying about your video call getting interrupted.

  ## daily-react-hooks 0.3.0

  * 🪝 Get the local user's session ID without triggering unnecessary app re-renders using our new custom hook: [`useLocalSessionId`](/reference/daily-react/use-local-session-id)
  * 🙋‍♀️ Another new custom hook to help reduce re-renders: [`useParticipantProperty`](/reference/daily-react/use-participant-property): [The participant object](/reference/daily-js/types/daily-participant) contains a lot of information, so you can use this hook if you only want to watch for changes on a specific property.
</Update>

<Update label="July 7, 2022">
  The latest updates to the Daily real-time audio and video API, including improvements to device management methods.

  ## July 7th, 2022

  ## daily-js 0.28.0

  * Avoid camera "blips" by only updating video *or* audio with [`setInputDevicesAsync()`](/reference/daily-js/instance-methods/set-input-devices-async). You can now pass `null` as a device ID if you only want to update your microphone or camera and not affect the other device.

  ```javascript theme={null}
  await call.setInputDevicesAsync({
    videoSource: yourMediaStream.getVideoTracks()[0],
    audioSource: null,
  });
  ```

  * Out with the old and in with the async! `setOutputDevice()` is now deprecated. [`setOutputDeviceAsync()`](/reference/daily-js/instance-methods/set-output-device-async) can (and should) be used in its place starting with this release.

  ```javascript theme={null}
  await call.setOutputDeviceAsync({
    outputDeviceId: 'output-device-id',
  });
  ```

  ## Daily Prebuilt

  * HIPAA-enabled domains can use Daily Prebuilt's UI to start recordings that will specifically be stored in a custom AWS S3 bucket. Read our [guide on how to get set up with custom S3 buckets](/docs/guides/features/recording/custom-s3-storage), as well as [more information](/docs/guides/privacy-and-security/hipaa) on our HIPAA setting.

  ## Dashboard

  * Configure default chat settings at the domain level through the [dashboard](https://dashboard.daily.co/rooms-settings).
  * Enable chat for HIPAA-enabled domains through the dashboard. (And, yes, Daily Prebuilt chat is HIPAA-compliant. 🤗)

  ## VCS

  * The VCS SDK is officially live! 🎉 Read our [VCS SDK docs](/docs/vcs) and [announcement post](https://www.daily.co/blog/new-beta-dailys-video-component-system/) to learn more.
</Update>

<Update label="June 16, 2022">
  The latest updates to the Daily real-time audio and video API, including a new pricing structure and improved large meeting support.

  ## June 16, 2022

  In this release, we've added a ton of support related to two **big** product announcements:

  * A massive increase for the meeting sizes Daily now supports (15,000 participants for real-time interactive live streaming and 300 participants when all devices are on).
  * A new pay-as-you-go approach to our pricing structure, which helps ensure developers only ever have to pay for their actual usage (plus extra free minutes, automatic volume discounts, and more).

  Additionally, we've improved our transcription, live streaming, and "high quality audio" support. (Music mode, anyone? 🎶)

  As always, we've included performance enhancements to Daily Prebuilt to make sure every participant has the best call experience possible. And, speaking of Daily Prebuilt, we've finally said goodbye to our old prebuilt UI support. 🌇

  ***

  ## `daily-js` 0.27.0

  * 🗣️ [`startTranscription()`](/reference/daily-js/instance-methods/start-transcription) now accepts a `language` and `model` property so you can specify which language and/or model you want [Deepgram](https://deepgram.com/) to use for a specific transcript. Who are we to assume?
    * The [transcription events](/reference/daily-js/events/transcription-events) also include some new information related to these updated methods, including `model`, `language`, `startedBy`, and `updatedBy` values.
  * 👩‍👩‍👦 Multiple RTMP URLs can now be provided for a live stream via the [`startLiveStreaming()`](/reference/daily-js/instance-methods/start-live-streaming), [`addLiveStreamingEndpoints()`](/reference/daily-js/instance-methods/add-live-streaming-endpoints), and [`removeLiveStreamingEndpoints()`](/reference/daily-js/instance-methods/remove-live-streaming-endpoints) methods.
  * 🎼 We added new [DailyIframe properties](/reference/daily-js/types/daily-call-options) to support the high quality audio use case: [`micAudioMode`](/reference/daily-js/types/daily-call-options#param-mic-audio-mode) and [`userMediaAudioConstraints`](/reference/daily-js/types/daily-call-options#param-user-media-audio-constraints).
  * ☢️ You can opt in to making `daily-js` behave in a CSP-friendly way by specifying `dailyConfig: { avoidEval: true }` wherever you provide your call options (i.e. in your [`DailyIframe` properties](/reference/daily-js/types/daily-call-options)). If you do so, using `daily-js` will no longer require you to use `'unsafe-eval'` in your `script-src` directive. **IMPORTANT**: you will, however, have to specify `'https://\*.daily.co'` in its place.

  ## `react-native-daily-js` 0.25.0

  * 🗣️ Transcription improvements: As mentioned above in `daily-js`, `language` and `model` can now be set when you call [`startTranscription()`](/reference/react-native/instance-methods/start-transcription).
  * 🤳 Newer versions of React Native are now supported (≥ 0.67)
  * 🧅 [`camSimulcastEncodings`](/reference/react-native/types/daily-call-options#param-cam-simulcast-encodings) is *not* just for `daily-js` anymore. It's now available in `react-native-daily-js`, too!
  * 🎼 The high quality audio properties ([`micAudioMode`](/reference/react-native/types/daily-call-options#param-mic-audio-mode)) mentioned above have landed in `react-native-daily-js`, too.

  ## Daily Prebuilt

  * 🧑‍🤝‍🧑 People panel UI improvements have been added to support [interactive live stream](/docs/guides/scaling-calls/interactive-live-streaming-rtmp-output#interactive-live-streaming-up-to-100000-participants) settings. Interactive live streaming accommodates larger call sizes by making some participants "passive" viewers, so we've made sure the participant count now includes passive participants, too.
  * 👵 The `enable_new_call_ui` and `autojoin` properties are now deprecated. Story time: a long time ago (about a year ago) we completely redesigned and upgraded Daily Prebuilt's UI. We gave ample time for existing customers to switch over to our new UI and now the day we've been waiting for has finally come! We're officially sunsetting our old Daily Prebuilt UI.
  * 💻 We've updated the picture-in-picture (PiP) mode to better handle the screen share use case. You'll now see the screen sharer in the PiP window, and screen sharers will see the grid of remote participants. (Want to try our beta PiP mode? Use the [`enable_pip`](/reference/rest-api/rooms/get-room#response-config-enable-pip-ui) property.)
  * ⏺️ In [HIPAA mode](/docs/guides/privacy-and-security/hipaa), we've added an extra check to make sure cloud recordings can *never* be enabled as an additional security measure.
  * 🙅 Meeting owners can now stop active screen shares. Perfect for when the answer to the common question "Can you see my screen?" is: "Yes, but we'd rather not!"
  * 💬 Lots of chat UI improvements to keep even the longest chat threads performant and looking great.

  ## Dashboard

  * 💰 Updates to the [`/billing`](https://dashboard.daily.co/billing) page to support the new pricing structure for new customers. (Existing customers — you'll be seeing these updates in your Daily dashboard very soon!) Learn more about the new pricing structure in our [announcement post](https://www.daily.co/blog/announcing-our-new-pricing/). Tl;dr: Daily has dropped pricing plans in favor of pay-as-you-go features.

  ## REST API

  * 📣 Support for 15k real-time interactive live streaming went live earlier this month! This launch includes introducing new room and domain properties:
    * [`enable_mesh_sfu`](/reference/rest-api/rooms/get-room#response-config-enable-mesh-sfu)
    * [`enable_terse_logging`](/reference/rest-api/rooms/get-room#response-config-enable-terse-logging)
    * [`enable_hidden_participants`](/reference/rest-api/rooms/get-room#response-config-enable-hidden-participants)
    * [`experimental_optimize_large_calls`](/reference/rest-api/rooms/get-room#response-config-experimental-optimize-large-calls)
    * Read our [guide on interactive live streaming](/docs/guides/scaling-calls/interactive-live-streaming-rtmp-output#interactive-live-streaming-up-to-100000-participants) to learn more about how and when to use these settings.
  * Support for S3 storage for Daily recordings. See our [guide](/docs/guides/features/recording/custom-s3-storage) on how to get started.

  ## VCS

  * 📐 We're moving over to grid-base units instead of the mix of other relative and absolute units we were using for the [baseline composition properties](/reference/daily-js/types/daily-streaming-layout-config#baseline-composition-properties). Previous properties (like [`videoSettings.margin.left_vw`](/reference/daily-js/types/daily-streaming-layout-config#param-video-settings-margin-left-gu)) will still work for now but are considered deprecated. One unit to rule them all!
  * 🐛 Bugfix: The aspect ratio of image assets looked a little funky in some cases. We've fixed this so your images always look as intended.
  * 📖 Spoiler alert: The baseline composition is being open sourced soon to help our customers customize their live streams and cloud recordings even more. We've added lots of tweaks to our VCS library to help get it ready for all the customization that's about to happen.

  ## Launches

  * 💰 Introducing new pay-as-you-go pricing with even more free minutes, automatic volume discounts, and [more](https://www.daily.co/pricing). Learn more in our [announcement post](https://www.daily.co/blog/announcing-our-new-pricing/).
  * 📣 Daily calls just got a whole lot bigger.
    * As mentioned above, Daily now supports 15,000 participants in real-time interactive live streams. This means you can have 15,000 participants in a real-time call and up to 10 participants who have their devices on.
    * Daily calls now support 300 active participants who can *all* turn their devices on. This is more than any other WebRTC video API, so we'll just be over here patting ourselves on the back.
    * Read all about both call size increases in our [announcement post](https://www.daily.co/blog/introducing-15-000-person-large-calls/) and [interactive live streaming guide](/docs/guides/scaling-calls/interactive-live-streaming-rtmp-output#interactive-live-streaming-up-to-100000-participants).
</Update>

<Update label="May 17, 2022">
  The latest updates to the Daily real-time audio and video API, including new react-native-daily-js support.

  ## May 17, 2022

  In this latest release, [`react-native-daily-js`](/reference/react-native) device support has increased profoundly. You can now retrieve valuable information about local devices, as well as update your local video and audio devices with just a couple lines of code. Additionally, we've provided a new participant event so you can be alerted anytime device availability updates. These new additions get `react-native-daily-js` support even closer to feature parity with `daily-js`. (If this were a race, it'd be pretty close! 🏃)

  [`daily-js`](/reference/daily-js) is introducing some exciting changes as well that will help developers manage their video calls more easily. We've added a new method and event to help keep track of call size changes, and now let you specify your preferred `fps` for live streams and recordings.

  Read on for the complete list of updates landing in this release.

  ## daily-js 0.26.0

  * 📹 New video frame rate configuration: `fps` (frames per second). This can be set in the live streaming [options](/reference/daily-js/instance-methods/start-live-streaming), as well as with call [recordings](/reference/daily-js/instance-methods/start-recording).
  * 🛑 New warning and error messages when clients are using `daily-js` versions that are nearing their end of support or no longer supported. We know it can be easy to put it off so we'll remind you when it *really* is time to update your version!
  * ⛰️ Virtual backgrounds now accept data URL types, in addition to HTTP URLs for the source image, via the [`updateInputSettings()`](/reference/daily-js/instance-methods/update-input-settings) method.
  * 🧮 New instance method: [`participantCounts()`](/reference/daily-js/instance-methods/participant-counts). Get the total participant count for your current call (and a spoiler for an upcoming feature, while you're at it!)
    * New participant-related event: [`participant-counts-updated`](/reference/daily-js/events/participant-events#participant-counts-updated). Listen for changes to your participant counts to keep track of when your call size changes.

  ## react-native-daily-js 0.24.0

  * 📝 New instance method: [`enumerateDevices()`](/reference/react-native/instance-methods/enumerate-devices). Retrieve a list of available local video input devices, as well as the input and output audio devices. If it looks familiar, this was already supported in `daily-js`. React Native developers, we've got you covered now!
  * 👀 New instance method: [`getInputDevices()`](/reference/react-native/instance-methods/get-input-devices). Similar to `enumerateDevices()`, `getInputDevices()` will return device information of the video and audio devices currently in use in a call.
  * 📹 New instance method: [`setCamera()`](/reference/react-native/instance-methods/set-camera). Update your current camera in use by passing the `deviceId` found in the return value from `enumerateDevices()`.
  * 📣 New instance method: [`setAudioDevice()`](/reference/react-native/instance-methods/set-audio-device). Update your current audio input or output devices by passing the `deviceId` found in the return value from `enumerateDevices()`.
  * New event: [`available-devices-updated`](/reference/react-native/events/settings-events#available-devices-updated). Get notified whenever your local devices change, whether you have a new one or lost a connection.
  * ✔️ Added support for Android 12

  ## Daily Prebuilt

  * 🐛 Bugfix: gUM ([`getUserMedia()`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)) errors — i.e. device permissions — were sometimes unmuting the local microphone when permissions were provided. We've fixed this so you can stay muted until you're ready to talk.

  ## Dashboard

  * 🌈 Lots of UI improvements to keep the dashboard easy to use and nice to look at!

  ## Daily React Hooks

  * 👋 The [`useRoom()`](/reference/daily-react/use-room) hook no longer has a `includeRoomConfigDefaults` parameter.
  * [`useParticipantIds()`](/reference/daily-react/use-participant-ids) has a new `'screen'` filter to get participants with active screen shares.
  * 💫 Lots of improvements related to reducing re-render cycles to improve app performance.
  * 🏠 The [`useRoom()`](/reference/daily-react/use-room) hook has been updated to make room information available sooner in the lifecycle of the call.
  * 🐛 Bugfix: the [`useRoom()`](/reference/daily-react/use-room) return type was updated to `DailyRoomInfo | null`.

  ## REST API

  * 🌎 New room configuration: [`rtmp_geo`](/reference/rest-api/rooms/get-room#response-config-rtmp-geo). Choose where your RTMP stream should originate.

  ## VCS

  * 🌐 The VCS baseline composition and [VCS Simulator](https://www.daily.co/tools/vcs-simulator/daily_baseline.html) now have two new properties to help customize your video feed: [`image.enableFade`](/reference/daily-js/types/daily-streaming-layout-config#param-image-enable-fade) and [`videoSettings.preferScreenshare`](/reference/daily-js/types/daily-streaming-layout-config#param-video-settings-prefer-screenshare)
</Update>

<Update label="April 14, 2022">
  The latest updates to the Daily real-time audio and video API, including several bugfixes.

  ## April 14, 2022

  ## daily-js 0.25.0

  * 🐛 Bugfix: In iframe mode, the `leave()` Promise resolved a bit earlier than it should have, but we promise it will wait until the participant has completely left the call now.
  * 🐛 Bugfix: Participant usernames were not always available in the `participant-joined` or `joined-meeting` events. We updated it so you always know who each participant is as soon as they join.
  * 💀 The `publish` flag has been deprecated in `updateInputSettings()`.
  * New types have been added to the `getNetworkStats()` response: `totalSendPacketLoss` and `totalRecvPacketLoss`

  ## react-native-daily-js 0.23.0

  * New types have been added to the `getNetworkStats()` response: `totalSendPacketLoss` and `totalRecvPacketLoss`

  ## Daily React Hooks

  * 🐛 Bugfix: `useLocalParticipant` was hitting a race condition when the local participant was initialized. We made sure you always get the correct response every time.

  ## Additional

  * 🐛 Bugfix for Chrome: `setBandwidth()` settings were getting lost after stopping a screen share. What was once lost is now found — we've made sure this doesn't happen anymore.
</Update>

<Update label="March 30, 2022">
  Introducing Daily Prebuilt's (beta) Picture in Picture controls! Plus, lots of configuration and API improvements.

  <img src="https://mintcdn.com/daily-co/k5NXwOZS3v6Jul7S/assets/changelog/changelog-23-pip.jpg?fit=max&auto=format&n=k5NXwOZS3v6Jul7S&q=85&s=ca45a8ce6d53c4912fdb7d345ee826dc" alt="Picture in Picture UI for Daily Prebuilt" width="1480" height="840" data-path="assets/changelog/changelog-23-pip.jpg" />

  This release includes a highly requested new feature and lots of API improvements. Namely, we're introducing the beta version of Daily Prebuilt's newest feature: Picture in Picture! Picture in Picture (or PiP) works in any Daily Prebuilt call with the `enable_pip_ui` configuration turned on either as a domain level property or for specific Daily rooms. It can be used on both desktop and mobile devices in Daily Prebuilt. If you tend to keep lots of apps open or have a hard time focusing during video calls, you will love this feature! 💪

  In addition to PiP, we're releasing a bunch of useful API improvements to existing Daily methods and configurations. Our goal is to always make our APIs more flexible so please be sure to let us know if there are specific updates you would be interested in.

  ## daily-js 0.24.0

  * ✨ Beta ✨ New `enable_pip_ui` [room](/reference/rest-api/rooms/get-room#response-config-enable-pip-ui) and [domain](/reference/rest-api/domain/get-domain-config#response-config-enable-pip-ui) configuration property to enable Daily Prebuilt's Picture in Picture controls. When PiP is enabled, the video tile will show the active speaker or a grid view, depending on your current Daily Prebuilt settings.

  ```bash theme={null}
  curl -H "Content-Type: application/json" \
       -H "Authorization: Bearer $DAILY_API_KEY" \
       -XPOST -d \
       '{"properties":{"enable_pip_ui":true}}' \
       https://api.daily.co/v1/
  ```

  * 🪞 Our `enable_prejoin_ui` property is now available as a [meeting token configuration](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-enable-prejoin-ui), in addition to its existing [room](/reference/rest-api/rooms/get-room#response-config-enable-prejoin-ui) and [domain](/reference/rest-api/domain/get-domain-config#response-config-enable-prejoin-ui) configuration properties. This new token property will override the room and domain values for the same property.

  * 🌊 Live streaming improvement: Automatically retry RTMP connections if there is an error *unless* the URLs have all failed.

  * 📦 Advanced: Override default video constraints that Daily uses when it calls `getUserMedia()` by providing a new [DailyIframe property](/reference/daily-js/types/daily-call-options#param-user-media-video-constraints): `userMediaVideoConstraints`

  ```javascript theme={null}
  const callObject = DailyIframe.createCallObject({
    url,
    dailyConfig: {
      userMediaVideoConstraints: { frameRate: 10 },
    },
  });
  ```

  `userMediaVideoConstraints` can be a [MediaTrackConstraints](https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints) object or `true` when used with `react-native-daily-js`.

  * ▶️ [`persistentTrack`](/reference/daily-js/types/daily-track-state) is now officially in Daily's TypeScript definitions! 🎉 Using this track in your app can help avoid browser bugs related to auto-playing media tracks.

  * 🔀 [`startCamera()`](/reference/daily-js/instance-methods/start-camera) can now be used without a `url` parameter, in case you want to change the Daily room in between calling `startCamera()` and pre-authenticating or joining the room.

  ## react-native-daily-js 0.22.0

  * Advanced: Override default video constraints that Daily uses when it calls `getUserMedia()` by providing a new [DailyIframe property](): `userMediaVideoConstraints`
    * See the `daily-js` bullet above for `userMediaVideoConstraints` usage details.

  ## Daily Prebuilt

  <img src="https://mintcdn.com/daily-co/k5NXwOZS3v6Jul7S/assets/changelog/changelog-23-pip_bu.jpg?fit=max&auto=format&n=k5NXwOZS3v6Jul7S&q=85&s=f271ada8e81161f710fecba89ec15256" alt="Picture in Picture UI for Daily Prebuilt" width="3360" height="2048" data-path="assets/changelog/changelog-23-pip_bu.jpg" />

  * Daily Prebuilt's new Picture in Picture feature is now in beta! Keep track of the current speaker (or grid) in Daily calls by having their video tile open outside of the browser window.
  * 💅 Configure the prejoin UI settings for a participant using a meeting token. This configuration can turn the prejoin UI on or off for a specific participant using a token without affecting the room or domain's default setting for everyone else.
  * The show/hide self view UI logic got an upgrade to accommodate more Daily Prebuilt configurations.
  * 🐛 Bugfix: With new browser updates come new bugs. We fixed one related to auto-playing audio in a call for Chromium and Firefox browsers.

  ## REST API

  * The [`/logs`](/reference/rest-api/logs/list-logs) endpoint now has additional entries in the `metrics` field:
    * `inbound-cam-audio` has four new entries:
      * [`concealmentEvents`](https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-concealmentevents)
      * [`totalAudioEnergy`](https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalaudioenergy)
      * [`insertedSamplesForDecelerationPerSec`](https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-insertedsamplesfordeceleration)
      * [`removedSamplesForAccelerationPerSec`](https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-removedsamplesforacceleration)
    * `inbound-cam-video` has five new entries:
      * [`keyFramesDecoded`](https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-keyframesdecoded)
      * [`framesDropped`](https://www.w3.org/TR/webrtc-stats/#dom-rtcreceivedrtpstreamstats-framesdropped)
      * [`jitter`](https://www.w3.org/TR/webrtc-stats/#dom-rtcreceivedrtpstreamstats-jitter)
      * [`frameHeight`](https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-frameheight)
      * [`frameWidth`](https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-framewidth)

  ## Additional

  * Daily has a new SFU cluster in `eu-central-1`, which helps make server responses even faster regardless of where you're located.
  * 🔒 Some extra security improvements.
  * 🐛 Bugfix: Device selection issue fixed when using Daily Prebuilt inside an Android WebView.
  * 🐛 Bugfix: Prevent browsers from being wrongly detected as ["Plan B"](https://webrtc.org/getting-started/unified-plan-transition-guide).
</Update>

<Update label="February 15, 2022">
  Introducing server-side recordings in React Native Daily JS, and virtual backgrounds in Daily JS.

  This release introduces some highly-anticipated new features! Firstly, virtual backgrounds: our Virtual Backgrounds API (currently in beta) allows you to set your video background with the image of your choice. This is an extension of our existing [background blur](/reference/daily-js/instance-methods/update-input-settings) feature from a few releases ago.

  Virtual backgrounds can be used in desktop Daily Prebuilt calls or in your custom Daily apps to give you a little more privacy in calls regardless of where you're working. We appreciate any feedback or comments you have on it, especially during this beta period!

  <img src="https://mintcdn.com/daily-co/k5NXwOZS3v6Jul7S/assets/changelog/changelog-23.png?fit=max&auto=format&n=k5NXwOZS3v6Jul7S&q=85&s=c4f73cf601000836998767de099498fa" alt="Virtual backgrounds in a Daily app" width="740" height="506" data-path="assets/changelog/changelog-23.png" />

  Our React Native library also had a big new feature land in this release: You can now use server-side recording with your Daily calls via the Daily API! We know this has been a highly requested feature and we've been working hard to get our React Native library to feature parity with Daily JS. This change allows you to start, update, and stop recordings, as well as listen for recording errors.

  That covers our big additions but read on for the finer details, too!

  ## daily-js 0.23.0

  * ✨ Beta ✨ Virtual backgrounds: Replacing your video background with an image is now supported in Daily Prebuilt and custom Daily apps using the `updateInputSettings()` method:

  ```javascript theme={null}
  callObject.updateInputSettings({
    video: {
      processor: {
        type: 'background-image',
        config?: {
  				source?: 'default' | <public url to jpg, jpeg, or png> |	<int: 1-10>
  		  }
      }
    }
  });
  ```

  <Warning>
    Virtual backgrounds are currently only supported on desktop Firefox and Chromium-based browsers (such as Chrome).
  </Warning>

  * 🐛 Bug fix: If you set an input device (e.g. `videoSource`, `audioSource`) to `false` at the beginning of a call or during a call (e.g. `createCallObject()`, `join()`, `setInputDevicesAsync()`), the corresponding track state will now be reported as `off`. This behavior now matches how muting devices works (e.g. using `setLocalAudio(false)`), which — let's be honest — just makes more sense.

  * ☁️ The `cloud` recording type has officially been replaced by what we were previously referring to as `cloud-beta`. Our new `cloud` recording type gives you a lot more control over your recordings while still providing a server-side recording option.

  ## react-native-daily-js 0.21.0

  * ⏺️ Server-side recording is now supported! Use `startRecording()`, `updateRecording()`, and `stopRecording()` to manage `cloud` and `rtp-tracks` recordings. Similar to with Daily JS, you can control the recording layout for `cloud` recordings on our React Native library, too. Learn more about Daily recordings in our [recording guide](/docs/guides/features/recording/index#cloud).

  ```javascript theme={null}
  await callObject.startRecording({
    width: 1280,
    height: 720,
    backgroundColor: '#FF1F2D3D',
    layout: {
      preset: 'default',
      max_cam_streams: 5,
    },
  });
  ```
</Update>

<Update label="January 18, 2022">
  The latest updates to the Daily real-time audio and video API, including gifs in Daily Prebuilt chat and a new daily-js error type.

  ## daily-js 0.22.0

  * 🖥 Added a new `nonfatal-error` [event](/reference/daily-js/events/error-events#nonfatal-error) type to report screen share issues. Now if there is an error when a participant starts screen sharing, you can catch it with the following:

  ```javascript theme={null}
  call.on('nonfatal-error', (evt) => {
    if (evt.type === 'screen-share-error') {
      console.log(evt.errorMsg);
    }
  });
  ```

  * 💬 Updated `app-message` [event](/reference/daily-js/events/messaging-events#app-message) to support strictly typed custom payloads.
  * 🍽 Added ability to serve up `daily-js` using [webpack-dev-server](https://webpack.js.org/configuration/dev-server/).
  * 🐛 Other bug fixes and improvements.

  ## react-native-daily-js 0.20.0

  * ✅ Check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2022-01-18-0.20.0).

  ## Daily Prebuilt

  * ✨ Launched `/giphy` shortcut in text chat for sending gifs.
  * 👨‍👩‍👧‍👦 Introduced an `enable_people_ui` [room](/reference/rest-api/rooms/get-room#response-config-enable-people-ui) and [domain](/reference/rest-api/domain/set-domain-config#body-properties-enable-people-ui) property that configures whether the People panel displays in [Daily Prebuilt](/docs/prebuilt).
  * 🎥 Implemented confirmation menu when a participant starts or stops a recording.
  * 🖥 Improved error handling for screen sharing.
  * 🐞 Other bug fixes and improvements.

  ## Daily Dashboard

  * 🚪 Added `enable_people_ui` property option to the [Create room](https://dashboard.daily.co/rooms/create) page.
  * 🚦 Streamlined onboarding process when opening a Daily account.
  * 🪲 Other bug fixes and improvements.
</Update>
