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

> The latest updates and improvements from the Daily engineering team.

Updates from the Daily engineering team across daily-js, Daily React, React Native, daily-python, telephony, and the REST API. Older entries live in the [yearly archives](#older-updates).

<Update label="August 26, 2026">
  Custom SIP headers in dial-out errors, SIP trunk support for the Daily provider, OCI storage for recordings and transcripts, and a 100KB cap on update-permissions payloads.

  ## Overview

  daily-js 0.92.0 and react-native-daily-js 0.87.0 include custom SIP headers in dial-out error events, add the missing types for several event objects, and extend the `daily.co` → `dailywebrtc.com`/`.net` domain failover to iframe embeds. Server-side, recordings and transcripts can now be stored in OCI buckets, SIP trunking is supported with the Daily SIP provider, and the HLS master playlist now reports `BANDWIDTH` in bits per second so players adapt correctly. The `update-permissions` REST endpoint now returns a `400` naming its 100KB limit instead of an opaque `500`.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-js

  [View full release notes →](https://github.com/daily-co/daily-js/releases/tag/release-daily-js-0.92.2)

  ### 0.92.2

  * Fixed an issue introduced in 0.91.0 causing [`testWebsocketConnection()`](/reference/daily-js/instance-methods/test-websocket-connectivity) to fail when called before a room URL was provided.

  ### 0.92.0

  * [`dialout-error`](/reference/daily-js/events/telephony-events#dialout-error) events now include custom SIP headers.
  * Added the missing types for the [`dialout-answered`](/reference/daily-js/events/telephony-events#dialout-answered) and `meeting-session-summary-updated` event objects, which previously fell back to the generic event type.
  * Improved handling of device mutes caused by `canSend` [permissions](/reference/daily-js/types/daily-participant-permissions) being revoked.
  * Fixed [custom tracks](/reference/daily-js/instance-methods/start-custom-track) whose names begin with `cam` or `screen` being misclassified as camera or screen tracks.
  * Prebuilt iframe embeds now use the same domain failover (`daily.co` → `dailywebrtc.com`/`dailywebrtc.net`) that was introduced for custom clients in 0.91.0.
  * Updated `mediasoup-client` to 3.21.0 and refreshed dependencies to resolve vulnerabilities.

  ***

  ## react-native-daily-js

  [View full release notes →](https://github.com/daily-co/react-native-daily-js/releases/tag/release-react-native-daily-js-0.87.1)

  ### 0.87.1

  * Fixed an issue introduced in 0.91.0 causing `testWebsocketConnection()` to fail when called before a room URL was provided.

  ### 0.87.0

  * `dialout-error` events now include custom SIP headers.
  * Added the missing types for the `dialout-answered` and `meeting-session-summary-updated` event objects.
  * Improved handling of device mutes caused by `canSend` permissions being revoked.
  * Updated `mediasoup-client` to 3.21.0 and refreshed dependencies to resolve vulnerabilities.

  ***

  ## daily-python

  [View full release notes →](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ### 0.32.0

  * Fixed an issue where SIP transfer server error messages were not handled properly.
  * Fixed multiple memory, thread, and file descriptor leaks when creating and releasing `CallClient`s.

  ***

  ## Daily Prebuilt

  * Added Slovak and Czech language support. Both are now selectable with [`setDailyLang()`](/reference/daily-js/instance-methods/set-daily-lang).
  * Improved handling of device mutes when a participant's `canSend` permissions are revoked mid-call.

  ***

  ## Media Services

  ### Telephony

  * Added SIP trunk support for the Daily SIP provider, so a customer-managed trunk can deliver calls into Daily rooms.
  * Consolidated dial-in parameter validation and case conversion. Room-level `dialin-sip` configuration remains `snake_case`, while the REST API takes `camelCase` parameters, matching the dial-out APIs.
  * Added duplicate call-id detection in the SIP trunk webhook, so a redelivered invite no longer creates a second session.
  * Fixed a race between concurrent SIP trunk creation requests.
  * Fixed SIP participant ejection in cascaded (mesh-SFU) meetings.

  ### Recording

  * Added support for storing recordings in an OCI bucket, alongside the existing AWS S3 support. REST API errors are now consistent across both providers.
  * Access links for recordings in Daily-owned buckets are now issued as CloudFront signed URLs.
  * Improved raw-tracks S3 upload reliability and observability.
  * A meeting move that fails to restore a recording now emits a [`recording-error`](/reference/daily-js/events/recording-events#recording-error) event rather than an RTMP error.
  * Recording state is no longer cleared when a recording type and instance ID don't match, which could stop an unrelated in-progress recording.

  ### Transcription

  * Added support for storing transcripts in an OCI bucket. Transcription responses now include a `storage_provider` field.

  ### Streaming

  * Fixed the HLS master playlist writing `BANDWIDTH` and `AVERAGE-BANDWIDTH` in kbps instead of the bits per second required by RFC 8216. Every value was 1000x too small, so players never adapted down to a lower variant.

  ### Other

  * Oldest supported daily-js version bumped to 0.87.0, with 0.89.0 approaching end-of-support.
  * Fixed meeting-move restore failures in large meetings caused by stale lock-holder data on peer SFUs.

  ***

  ## REST API

  * [`POST /rooms/:name/update-permissions`](/reference/rest-api/rooms/session/update-permissions) now enforces a 100KB payload limit, returning a `400` naming the limit instead of an opaque `500`. This matches the existing session-data limit; payloads that succeed today are unaffected.
  * `redirect_on_meeting_exit` is now validated against a per-domain host allowlist, including in self-signed meeting tokens.
  * Retired legacy plan endpoints now return a `400` pointing at support instead of attempting a plan change against a retired plan ID.
  * `/get-period-usage` no longer returns a `500` when the usage cache is unavailable; usage is computed and returned regardless.
  * Batch processor summary artifacts are now stored with a `text/plain` content type instead of the malformed `plain/text`.
  * Documented that participant webhook consumers should dedupe on `type` plus `session_id`.

  ***

  ## Dashboard

  * Participant call-log fetches are now capped at 3000 rows, keeping the page responsive for very large meetings.
</Update>

<Update label="July 29, 2026">
  daily-react dial-in/dial-out hooks, raw-tracks audio-only recording across native SDKs, SIP multi-codec negotiation, and phone number redaction for SIP/PSTN.

  ## Overview

  daily-react 0.26.0 adds first-class `useDialOut` and `useDialin` hooks, a `useMeetingSessionSummary` hook, and custom track support in `DailyVideo` and `DailyAudioTrack`. The native SDKs — daily-ios 0.39.0, daily-android 0.39.1, and daily-python 0.31.0 — add the `raw-tracks-audio-only` recording layout preset and fix several crashes. Server-side, SIP calls can now negotiate multiple codecs, phone numbers are redacted from SIP/PSTN logs, and raw-tracks recording is more resilient to slow S3 uploads.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-react

  [View full release notes →](https://github.com/daily-co/daily-react/releases/tag/daily-react-2026-07-15-0.26.0)

  ### 0.26.0

  * Added `useDialOut` and `useDialin` hooks for the PSTN/SIP telephony APIs. `useDialOut` exposes a sessions map keyed by `sessionId` plus `startDialOut`, `stopDialOut`, `sendDTMF`, `sipCallTransfer`, and `sipRefer`, with `onDialOut*` callbacks. `useDialin` exposes `isReady`, `sipEndpoint`, `provider`, and a sessions map, with `onDialin*` callbacks. Both reset on [`left-meeting`](/reference/daily-js/events/lifecycle-events#left-meeting) and on call-instance destruction.
  * Added a `useMeetingSessionSummary` hook that reactively surfaces the server-assigned session id, useful for correlating a call with recordings, logs, and REST API resources. It returns `null` until the session has started.
  * `DailyVideo` and `DailyAudioTrack` now accept a custom `trackName` for tracks started with [`startCustomTrack()`](/reference/daily-js/instance-methods/start-custom-track), and their `type` prop is now optional. Custom tracks can be read with `useMediaTrack(id, trackName)`. Note that `trackName` is resolved as a participant-property path, so names containing `.` are unsupported.
  * A local participant's own custom track is no longer incorrectly forced playable or mirrored.
  * Fixed the local self-view losing its mirror transform after leaving picture-in-picture, such as a browser-triggered auto-PiP on tab switch.

  ### 0.25.3

  * `atomFamily` now imports from the `jotai-family` package instead of the deprecated `jotai/utils` export, keeping daily-react compatible with jotai v3.

  ***

  ## daily-ios

  [View full release notes →](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)

  ### 0.39.0

  * Added `StreamingLayout.rawTracksAudioOnly`, the `raw-tracks-audio-only` recording layout preset for audio-only raw-tracks recordings.
  * Fixed an issue where participants would appear as `guest` in saved transcriptions.
  * Fixed an issue where the `raw-tracks-audio-only` recording layout preset in a meeting token's `start_cloud_recording_opts` was ignored, causing raw-tracks recordings to include video.

  ***

  ## daily-android

  [View full release notes →](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)

  ### 0.39.1

  * Fixed a crash when microphone capture fails. The error is now reported through `CallClientListener.onError(...)`.

  ### 0.39.0

  * Added `StreamingLayout.RawTracksAudioOnly`, the `raw-tracks-audio-only` recording layout preset for audio-only raw-tracks recordings.
  * Fixed an issue where participants would appear as `guest` in saved transcriptions.
  * Fixed an issue where the `raw-tracks-audio-only` recording layout preset in a meeting token's `start_cloud_recording_opts` was ignored, causing raw-tracks recordings to include video.
  * Server-side `startRecording()` failures are now reported as proper recording errors instead of an opaque deserialization error.

  ### 0.38.1

  * Constructing a `CallClient` no longer crashes with an `ExceptionInInitializerError` on devices where EGL/GLES initialization fails. A non-fatal error is reported through `CallClientListener.onError(...)` instead, and an audio-only session remains possible.

  ***

  ## daily-python

  [View full release notes →](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ### 0.31.0

  * daily-python now requires Python 3.8 or newer, a consequence of the pyo3 0.29.0 upgrade below.
  * Upgraded pyo3 to 0.29.0 to address [GHSA-36hh-v3qg-5jq4](https://github.com/advisories/GHSA-36hh-v3qg-5jq4), an out-of-bounds read in the `nth` / `nth_back` implementations of `PyList` and `PyTuple` iterators.

  ***

  ## Daily Prebuilt

  * Fixed the local self-view losing its mirror transform after a browser-triggered automatic picture-in-picture, such as Chrome's auto-PiP on tab switch. Previously, toggling between grid and speaker view was the only workaround.
  * Fixed the chat sidebar scrollbar flickering on Linux and Windows when message content height sat right at the panel boundary.
  * Prebuilt now serves Next.js framework and dynamic assets from the fallback domain rather than `daily.co`, so the call loads correctly during a `daily.co` outage.
  * daily-js now discovers a working base domain at iframe load time, falling back to `dailywebrtc.com`/`dailywebrtc.net` if `daily.co` is unreachable.
  * Fixed custom track stream type classification in the SFU. Only the exact canonical tags (`cam-audio`/`cam-video`, `screen-audio`/`screen-video`) are mapped to `cam` and `screen`; custom tracks whose names begin with `cam` or `screen` keep their own media tag instead of being misclassified.

  ***

  ## Media Services

  ### Telephony

  * SIP calls can now offer and accept multiple codecs. Dial-out offers all supported codecs with your preferred codec ranked first, and dial-in accepts any codec supported by the bridge, selecting your preferred codec when the invite offers it and otherwise the top codec from the invite. This is gated by the `enable_sip_multi_codec` domain property.
  * The [`dialout-answered`](/reference/daily-js/events/telephony-events#dialout-answered) event is now emitted for calls using the Daily SIP provider, alongside [`dialout-connected`](/reference/daily-js/events/telephony-events#dialout-connected).
  * Phone numbers are now redacted in SIP/PSTN logs, with all but the last four digits replaced.
  * Fixed a crash in the SIP bridge when a provider delivered DTMF under a second SSRC, which Twilio does when a key is pressed.
  * Fixed overlapping calls to remove all SIP participants, which could trigger redundant stop-SIP calls.

  ### Recording

  * Cloud recording finalization is no longer preempted by teardown errors, such as a participant video resolution change racing the stop. This previously truncated recordings by dropping the final container metadata.
  * Raw-tracks recordings now tolerate slow S3 uploads: the per-request timeout and retry count are configurable, and the sink queue is deeper, so a transient upload stall no longer tears down the track pipeline.
  * Fixed raw-tracks transcoded audio being replaced with silence when decoded audio arrived late, by giving the audio mixer explicit latency.

  ### Streaming

  * Fixed the counting of streaming instances for limit checks so that stopped instances no longer count against the limit.

  ### Other

  * Meeting [session data](/reference/daily-js/instance-methods/set-meeting-session-data) writes are now retried when the backing store is failing over, instead of being silently dropped.

  ***

  ## REST API

  * Added `transcription_geo` (`global` or `eu`) to the [`POST /rooms/:name/transcription/start`](/reference/rest-api/rooms/transcription/start) OpenAPI schema. The field was already supported and honored by the server, but was missing from the REST reference.
</Update>

<Update label="June 24, 2026">
  EU region transcription, SIP video dial-out quality parameters, cross-SDK domain failover, native SDK stability fixes, and SIP 488 codec negotiation responses.

  ## Overview

  June brings automatic domain failover (`daily.co` → `dailywebrtc.com`/`.net`) across all client SDKs for improved connection resilience. daily-js 0.91.0 and react-native-daily-js 0.86.0 add support for specifying the EU region for transcription and new quality parameters (`fps`, `width`, `height`, `videoBitrate`) for SIP video dial-out. The native SDKs — daily-ios 0.38.0, daily-android 0.38.0, and daily-python 0.30.0 — ship important stability fixes, and daily-python adds custom screen-share audio tracks. On the server side, SIP interoperability improves with proper `488 Not Acceptable` responses for incompatible codecs and custom SIP header passthrough for the Daily provider.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-js

  [View full release notes →](https://github.com/daily-co/daily-js/releases/tag/daily-js-2026-06-10-0.91.0)

  ### 0.91.0

  * Added support for specifying the EU region for [transcription](/reference/daily-js/instance-methods/start-transcription).
  * Added `fps`, `width`, `height`, and `videoBitrate` parameters to SIP video [dial-out](/reference/daily-js/instance-methods/start-dial-out).
  * External-facing track names are now included in the list of reserved values that are disallowed as custom track names.
  * Added automatic client domain failover (`daily.co` → `dailywebrtc.com`/`dailywebrtc.net`) for improved connection resilience.
  * Updated dependencies to resolve vulnerabilities.

  ***

  ## react-native-daily-js

  [View full release notes →](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2026-06-10-0.86.0)

  ### 0.86.0

  * Added support for specifying the EU region for transcription.
  * Added `fps`, `width`, `height`, and `videoBitrate` parameters to SIP video dial-out.
  * Added support for AsyncStorage v2 and v3.
  * External-facing track names are now included in the list of reserved values that are disallowed as custom track names.
  * Added automatic client domain failover (`daily.co` → `dailywebrtc.com`/`dailywebrtc.net`) for improved connection resilience.
  * Updated dependencies to resolve vulnerabilities.

  ***

  ## daily-ios

  [View full release notes →](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)

  ### 0.38.0

  * Added `CallClient.initAsync()`, a static async factory that runs the blocking WebRTC/MediaSoup initialization off the main thread, keeping the UI responsive during `CallClient` creation.
  * Added automatic fallback to `dailywebrtc.com` and `dailywebrtc.net` when `daily.co` authoritative nameservers are unreachable, improving connection resilience.
  * Adaptive Bitrate (ABR) is now enabled by default for camera tracks. It can still be disabled by setting `allowAdaptiveLayers` to `false` in the camera `sendSettings`.
  * Fixed an issue where SDK resources were not properly cleaned up when all `CallClient` instances were released.
  * Fixed an intermittent crash when force-quitting and relaunching the app while the camera was active.
  * Fixed support for the `cloud-audio-only` recording type.
  * Improved connection performance with a new HTTP client featuring connection timeouts and TLS configuration reuse.

  ***

  ## daily-android

  [View full release notes →](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)

  ### 0.38.0

  * Added automatic fallback to `dailywebrtc.com` and `dailywebrtc.net` when `daily.co` authoritative nameservers are unreachable, improving connection resilience.
  * Adaptive Bitrate (ABR) is now enabled by default for camera tracks. It can still be disabled by setting `allowAdaptiveLayers` to `false` in the camera `sendSettings`.
  * Fixed a segmentation fault that could occur when a `CallClient` was released (or garbage collected) while still in a call.
  * Fixed support for the `cloud-audio-only` recording type.
  * Improved connection performance with a new HTTP client featuring connection timeouts and TLS configuration reuse.

  ***

  ## daily-python

  [View full release notes →](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ### 0.30.0

  * Added automatic fallback to `dailywebrtc.com` and `dailywebrtc.net` when `daily.co` authoritative nameservers are unreachable, improving connection resilience.
  * Fixed a use-after-free that could cause a segmentation fault in the audio playout thread if a `CallClient` was released while still in a call with participant audio renderers registered.
  * Fixed a segmentation fault that could occur when a `CallClient` was released (or garbage collected) while still in a call.

  ### 0.29.1

  * Fixed an issue where a room configured with `enable_recording` set to `cloud-audio-only` was ignored when starting a recording, causing the recording to also capture video.
  * Fixed an issue where `StartRecordingProperties` none properties were serialized to `null`.

  ### 0.29.0

  * Added support for `screenAudio` input, making it possible to send a custom screen-share audio track alongside or independently of `screenVideo`.

  ***

  ## Media Services

  ### Telephony

  * Added server-side support for a new `startDialIn()` method to dynamically start a SIP dial-in endpoint. The client-side API will be included in an upcoming daily-js release.
  * SIP calls with incompatible codecs now receive a proper `488 Not Acceptable` error response, and the `rtpmap` for the offered Opus codec has been fixed for better codec negotiation interoperability.
  * Custom SIP headers are now passed through for calls using the Daily SIP provider.
  * `dialout-error` events now include custom SIP headers.
  * Fixed a crash that could occur when a SIP session timed out after the session had already been terminated.

  ### Recording

  * The `recording-error` event now includes the `recordingId`, making it easier to correlate errors with specific recordings.

  ### Streaming

  * Fixed a VCS composition issue where pinned tracks that dropped from an explicit pin list were not evicted from the layout.

  ### Other

  * Oldest supported daily-js version bumped to 0.85.0, with 0.86.0 approaching end-of-support.

  ***

  ## REST API

  * Added `created_at` and `updated_at` to [transcripts API](/reference/rest-api/transcripts) responses.
  * Added an opt-in `include_sip_participants` query parameter to [`GET /meetings/:id`](/reference/rest-api/meetings/get-meeting).
</Update>

<Update label="May 21, 2026">
  Critical Firefox 149 fix, `provider` and `sipCallId` in telephony events, `mtgSessionId` in presence endpoints, and VCS simulator video mode.

  ## Overview

  May brings daily-js 0.90.0 and react-native-daily-js 0.85.0 with a critical fix for a Firefox 149 regression that prevented remote participant media from playing, and new `provider` and `sipCallId` fields across all dial-in and dial-out events for improved telephony observability. On the server side, presence endpoints now include `mtgSessionId`, and the VCS simulator gains video mode support along with a layer pinning fix.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-js

  [View full release notes →](https://github.com/daily-co/daily-js/releases/tag/daily-js-2026-05-13-0.90.0)

  ### 0.90.0

  * Added `provider` and `sipCallId` fields to all `dialin-*` and `dialout-*` events, making it easier to correlate telephony events with specific calls and providers.
  * ⚠️ Fixed a Firefox 149 regression that caused remote participant media not to play.
  * Fixed a corner case in iOS user-agent detection.
  * Updated dependencies to resolve vulnerabilities.

  ***

  ## react-native-daily-js

  [View full release notes →](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2026-05-13-0.85.0)

  ### 0.85.0

  * Added `provider` and `sipCallId` fields to all `dialin-*` and `dialout-*` events.
  * Updated dependencies to resolve vulnerabilities.

  ***

  ## daily-python

  [View full release notes →](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ### 0.28.1

  * Fixed a segmentation fault that could occur after virtual microphone or speaker inputs or publishing updates.

  ***

  ## Media Services

  ### Streaming

  * Added video mode to the VCS simulator, allowing developers to test video layouts directly in the simulator.
  * Fixed a track add bug in VCS layer pinning.

  ***

  ## REST API

  * Added `mtgSessionId` to the responses of [`GET /presence`](/reference/rest-api/presence/get-presence) and `GET /rooms/:name/presence`.
</Update>

<Update label="April 29, 2026">
  daily-react 0.25.0 with multi-instance recording and streaming, daily-python 0.28.0 with screen share custom tracks, and SIP telephony improvements.

  ## Overview

  April brings daily-react 0.25.0 with support for multiple concurrent recording and live streaming instances, and daily-python 0.28.0 with screen share custom tracks and Adaptive Bitrate enabled by default for camera tracks. On the server side, SIP dial-in and dial-out events now include `sipCallId` and `provider` fields, Signalwire is selectable as a telephony provider, and VCS streaming gains a configurable label placement parameter along with a mic status indicator.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-react

  [View full release notes →](https://github.com/daily-co/daily-react/releases)

  ### 0.25.0

  * Added support for multiple concurrent recording and live streaming instances. `useRecording()` and `useLiveStreaming()` now accept an `instanceId` parameter for per-instance state. New `useRecordingInstances()` and `useLiveStreamingInstances()` hooks return all active instances, and new `RecordingInstanceState` and `LiveStreamingInstanceState` types are exported. Stopping or erroring one instance no longer clears state for others.
  * Added `networkStatus` to the return value of `useNetwork()`.
  * Added support for the `cloud-audio-only` recording type.
  * The daily-react version is now reported through daily-js via the new `aboutClient` API, so it's included in call logs regardless of which library creates the call instance.

  ***

  ## daily-python

  [View full release notes →](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ### 0.28.0

  * Added support for `screenVideo` custom tracks. You can now send a custom screen share track by setting `inputs.screenVideo.settings.customTrack.id`.
  * Adaptive Bitrate (ABR) is now enabled by default for camera tracks. It can still be disabled by setting `allow_adaptive_layers` to `False` in the camera `send_settings`.
  * Fixed support for the `cloud-audio-only` recording type.
  * Fixed panics in signalling reconnect paths when room lookup returns no worker.

  ***

  ## Daily Prebuilt

  * Tightened the iOS user-agent match to reject spoofed iOS substrings.
  * Fixed transcription language fallback so that an empty string falls back to the default language (switched from `??` to `||`).

  ***

  ## Media Services

  ### Telephony

  * SIP dial-in and dial-out events now include `sipCallId` and `provider` fields, making it easier to correlate events with specific calls and providers.
  * Signalwire and Daily can now be selected as a telephony provider for dial-in and dial-out.
  * Standardized the `provider` value to lowercase `signalwire` in dial-in and dial-out events.
  * Added `provider` as a valid parameter for the `startDialout` API.
  * Added support for video track updates on SIP video calls.
  * Fixed screen share track addition for SIP video.
  * Added support for configuring a Cloudflare anycast IP address instead of the STUN server hostname.

  ### Recording

  * Added a new `enable_raw_tracks_event_json` domain and room property to opt into JSON event output for raw-tracks recordings.
  * Added more WAV settings for raw-tracks transcoded mode.
  * Raw-tracks listings now verify S3 item `ContentType` to avoid including unexpected files.

  ### Streaming

  * Added a new VCS parameter `videoSettings.grid.labelPlacement` for customizing participant label position in streaming layouts.
  * Added a mic status indicator and a highlight border inset to VCS layouts.
  * Fixed VCS participant label misindexing in audio-only layouts.
</Update>

<Update label="March 29, 2026">
  Smaller call-machine bundle (\~2MB less), VCS layout animations, configurable max API keys, and daily-js 0.81.0 minimum version bump.

  ## Overview

  March includes significant performance improvements for daily-js and react-native-daily-js, with the initial call-machine bundle now \~2MB smaller through dynamic loading. Audio processor errors no longer automatically mute the microphone, and `testCallQuality()` reliability has been fixed. On the server side, VCS streaming layouts gain animation support, and a new `max_api_keys` domain property lets you limit API key creation per domain. The oldest supported daily-js version has been bumped to 0.81.0, with versions through 0.83.1 approaching end-of-support.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-js

  [View full release notes →](https://github.com/daily-co/daily-js/releases)

  ### 0.89.1

  * Fixed an issue causing all `testCallQuality()` tests to fail.
  * Fixed remaining vulnerabilities in dependencies.

  ### 0.89.0

  * Reduced initial call-machine bundle download size by \~2MB. Larger portions are now dynamically loaded as-needed.
  * Audio processor errors no longer automatically mute the microphone.
  * Removed the client-side 3-hour limit for raw-tracks recordings. Limits are now handled server-side.
  * Fixed auto-syncing audio output device on Safari, where `setSinkId` requires a user gesture and was causing repeated errors.
  * Improved system idle detection to avoid stale reconnect retries after 5 minutes of inactivity. Calls will now leave cleanly in idle scenarios.
  * **Breaking:** If you self-host the call-machine-bundle using `callObjectBundleUrlOverride`, a new separate bundle is now required for Krisp noise cancellation. Contact [help@daily.co](mailto:help@daily.co) for upgrade instructions.

  ***

  ## react-native-daily-js

  [View full release notes →](https://github.com/daily-co/react-native-daily-js/releases)

  ### 0.84.1

  * Fixed remaining vulnerabilities in dependencies.

  ### 0.84.0

  * Reduced initial call-machine bundle download size by \~2MB with dynamic loading.
  * Added `digitDurationMs` option to `sendDTMF()` for configurable DTMF digit duration.
  * Removed the client-side 3-hour limit for raw-tracks recordings.
  * Improved system idle detection to avoid stale reconnect retries after 5 minutes of inactivity.
  * **Breaking:** If you self-host the call-machine-bundle using `callObjectBundleUrlOverride`, a new separate bundle is now required for Krisp noise cancellation. Contact [help@daily.co](mailto:help@daily.co) for upgrade instructions.

  ***

  ## Dashboard

  * Added a configurable `max_api_keys` domain property to set the maximum number of API keys allowed per domain.

  ***

  ## Media Services

  ### Telephony

  * Fixed video not working with Linphone SIP client.
  * Improved STUN server fallback during SDP negotiation retry.
  * Fixed hung media workers caused by unresolved SIP transport promises.
  * Improved handling of active SIP sessions during meeting moves.
  * Broadcast app messages are no longer sent to participants in the knocking (waiting room) state.
  * Oldest supported daily-js version bumped to 0.81.0. Versions through 0.83.1 are approaching end-of-support.

  ### Streaming

  * The new VCS pipeline is now the default for new customers. In April, we are transitioning existing customers to the new pipeline; the legacy pipeline will be EOLed later this summer. In the meantime, you can switch between the new and legacy pipelines with the `enable_legacy_compositor` flag.
  * Added a layout animation system for VCS (Video Compositing Service) streaming layouts.
  * Fixed RTMP URL handling for streaming destinations.
  * Improved jitter buffer latency and added video stall detection for RTMP streaming.

  ### Recording

  * Added `event-json` as a valid `dataOutputs` option for recordings via the REST API. We’re considering making `event-json` the default output format and invite feedback from the community. Note that this would add an additional `event-json` file to the existing S3 folder and may break downstream workflows that assume only media files are present.

  ### REST API

  * Added validation for the `cloud-audio-only` room and meeting token property.
  * New `max_api_keys` domain property to configure the maximum number of API keys per domain.
</Update>

<Update label="February 24, 2026">
  DTMF tone support for SIP calls, raw-tracks recording improvements, Krisp SDK lazy loading, and webhook event ID timestamps.

  ## Overview

  February brings DTMF tone support for SIP calls, improved raw-tracks recording reliability during meeting moves, and a Krisp SDK performance optimization that splits noise cancellation into a separate bundle for faster page loads. Audio processor errors no longer mute the microphone, and the 3-hour limitation for raw-tracks recordings has been removed.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## Daily Prebuilt

  * Audio processor error handling updated to no longer mute the microphone on Krisp errors.
  * Fixed a mute state sync race condition on the first call of the day.
  * Krisp SDK is now loaded as a separate bundle for faster initial page load.
  * Added a user-facing notification when the Krisp SDK fails to load.
  * Updated noise cancellation overload translations.

  ***

  ## Dashboard

  * Improved dashboard loading speed.
  * Removed references to the deprecated `owner_only_broadcast` property.

  ***

  ## Media Services

  ### Telephony

  * Added DTMF (telephone-event) support for sending and receiving DTMF tones during SIP calls.
  * Added a setting to keep rooms open without WebRTC participants (for SIP-only scenarios).
  * Fixed the call transfer initiated event for SIP REFER.
  * Fixed dial-in events to be preserved when no peer is in the room yet.

  ### Recording

  * Removed the 3-hour limitation for raw-tracks recordings.
  * Improved raw-tracks recording reliability during meeting moves when the SFU connection changes.
  * Added `user_name` and `user_id` to raw-tracks recording events.
  * Recording finished webhooks are now reliably sent from the upload finisher for improved delivery.

  ### Webhooks

  * Webhook event IDs now include timestamps, matching the format shown in the documentation.

  ### Transcription

  * Added model parameters to the transcription info field.

  ### REST API

  * Fixed the `/domains/member` endpoint to return all non-revoked API tokens.
</Update>

<Update label="January 29, 2026">
  Recording dataOutputs for transcripts and chat, cloud-audio-only recording, laptop lid session handling, CPU load detection improvements, and Kamailio call transfer support.

  ## Overview

  January is a feature-rich month with new recording capabilities including `dataOutputs` for recording-synchronized transcripts, chat messages, and event logs, plus a new `cloud-audio-only` recording type. We've also improved session handling for laptop lid closures, refined CPU load detection, and shipped call transfer support on our new telephony infrastructure.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-js

  [View full release notes →](https://github.com/daily-co/daily-js/releases)

  ### 0.87.0

  * Fixed an issue in Chrome where the Compute Pressure API did not work inside an iframe due to permissions policy restrictions.

  ### 0.86.0

  * Introduced a new `dataOutputs` option in `startRecording()` to capture auxiliary data alongside the recording media. Three output types are supported:

    * `event-json` — a JSON file describing recording session events (media file starts, track updates, etc.)
    * `transcript-webvtt` — a WebVTT file with transcription events, timecode-aligned with the recording media (requires an active live transcription)
    * `chat-webvtt` — a WebVTT file with chat messages, timecode-aligned with the recording media

    Data output files are included in the recording download link and written to your custom S3 bucket when configured. Note: these outputs capture events, they do not start services.

  * Added support for a new `cloud-audio-only` recording type. This produces m4a files with the `audio/mp4` content type. It can be used alongside other recording types and does not share an instance ID with RTMP/HLS streaming.

  * Fixed an issue where sessions would attempt to reconnect after long periods of laptop lid closure. Sessions now automatically disconnect after 5 minutes of detected inactivity.

  * Fixed uncaught errors in `join()` and `startCamera()` when no room URL is provided or the URL is invalid. These now properly throw an error and leave `meetingState()` in `"left-meeting"`.

  * Improved the `cpu-load-change` event by requiring multiple consecutive high CPU readings before reporting high load and by refining global decode time calculation to exclude videos with empty frame metrics.

  * Added [compute pressure state](https://developer.mozilla.org/en-US/docs/Web/API/Compute_Pressure_API) to the [`getCpuLoadStats()`](/reference/daily-js/instance-methods/get-cpu-load-stats) API when supported by the browser.

  * Added `max_app_message_size` to `DailyRoomInfo` types.

  ***

  ## react-native-daily-js

  [View full release notes →](https://github.com/daily-co/react-native-daily-js/releases)

  ### 0.83.0

  * Introduced a new `dataOutputs` option in `startRecording()` to capture auxiliary data alongside the recording media. Supports `event-json`, `transcript-webvtt`, and `chat-webvtt` output types.
  * Added support for the new `cloud-audio-only` recording type.
  * Fixed an issue where sessions would attempt to reconnect after long periods of laptop lid closure.
  * Fixed uncaught errors in `join()` and `startCamera()` when no room URL is provided or the URL is invalid.
  * Improved the `cpu-load-change` event accuracy.
  * Added `max_app_message_size` to `DailyRoomInfo` types.
  * Added missing type definitions for streaming and recordings.

  ***

  ## Daily Prebuilt

  * Removed automatic camera turn-off behavior on bad network conditions.

  ***

  ## Dashboard

  * Updated Cloud recording storage tooltip.
  * Removed HIPAA 30-day trial wording.

  ***

  ## Media Services

  ### Telephony

  * Added call transfer support on the new Kamailio-based telephony infrastructure.
  * Added support for numeric SIP usernames.

  ### Recording

  * Added server-side support for `dataOutputs` recording option and the `cloud-audio-only` recording type.
  * Fixed download link file extensions for recordings stored in custom S3 buckets.
</Update>

<Update label="December 19, 2025">
  Recording-synchronized transcripts, gapless audio for raw-tracks, CPU warning notifications, and Prebuilt session resume and background effects fixes.

  ## Overview

  December brings recording-synchronized transcripts, a new gapless audio pipeline for raw-tracks recording, and configurable CPU warning notifications in Daily Prebuilt. We've also improved session resume reliability after laptop lid closures and added automatic detection to disable background effects on underpowered hardware.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## Daily Prebuilt

  * Added a new `enable_cpu_warning_notifications` domain and room property to control whether CPU warning notifications are shown to users.
  * Background effects are now automatically disabled when a WebGL software renderer is detected, preventing poor performance on underpowered hardware.
  * Fixed poor network state handling.
  * Fixed session resume issues that could occur after closing and reopening laptop lids.

  ***

  ## Dashboard

  * Added configuration for the new `enable_cpu_warning_notifications` property.
  * Updated settings deletion copy.

  ***

  ## Media Services

  ### Recording

  * Added support for recording-synchronized transcripts via `dataOutputs` in `startRecording()`.
  * New transcoded gapless audio pipeline for raw-tracks recording, producing continuous audio files without gaps.
  * Raw-tracks recording now works with the `force_audio_only_recording` flag.
  * Fixed file extension for WAV files in transcoded gapless audio mode.
  * Fixed a missing room state update during meeting move restore that could cause recording state inconsistencies.

  ### Transcription

  * Deepgram model improvement program opt-out is now enabled by default for improved data privacy.
</Update>

<Update label="November 20, 2025">
  SIP codec negotiation, call transfer fixes, recording enhancements, and Prebuilt breakout room and screen sharing fixes.

  ## Overview

  November is a server-focused release with telephony improvements including SIP codec negotiation and call transfer reliability fixes, recording enhancements, and Daily Prebuilt bug fixes for breakout rooms and screen sharing on Chrome.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## Daily Prebuilt

  * Fixed the "request for help" feature from the main room during breakout sessions.
  * Improved handling of blocked-by-browser screen share errors in Chrome.

  ***

  ## Dashboard

  * Removed Intercom chat widget from the dashboard. Contact us at `help@daily.co` for support.

  ***

  ## Media Services

  ### Telephony

  * Added support for preferred codec negotiation based on the SIP invite SDP.
  * Fixed room ID preservation during call transfers when a room is deleted mid-transfer.
  * Fixed SIP username filtering for pinless dial-in configuration.

  ### Recording

  * Fixed stop recording by instance ID to correctly detect the recording type.
  * Optimized audio bitrate to 96kbps for audio-only recordings.
  * The GET recordings API now includes `roomName` in the response.

  ### REST API

  * Fixed 404 errors for presence queries on deleted rooms.
</Update>

<Update label="October 30, 2025">
  Narrower CSP for video backgrounds, audio-only recording property, dynamic SIP dial-in endpoints, and telephony and recording fixes.

  ## Overview

  October brings a Content Security Policy improvement for video background processing, removing the need for the broad `unsafe-eval` directive. We've also added a new `force_audio_only_recording` domain property, dynamic SIP dial-in endpoint creation, and several telephony and recording reliability fixes across our platform.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-js

  [View full release notes →](https://github.com/daily-co/daily-js/releases)

  ### 0.85.0

  * You no longer need to specify the broad `unsafe-eval` in your Content Security Policy (CSP) when using video background processing (virtual backgrounds or background blur). You can now use the narrower `wasm-unsafe-eval` instead.
  * Fixed an issue where the initial send settings were not being respected for cam video.

  ***

  ## react-native-daily-js

  [View full release notes →](https://github.com/daily-co/react-native-daily-js/releases)

  ### 0.82.0

  * Fixed an issue where the initial send settings were not being respected for cam video.

  ***

  ## Daily Prebuilt

  * Added a Krisp system overload notification to inform users when audio processing is under heavy CPU load.
  * Fixed recording handling when recording types are configured as comma-separated values.
  * Fixed dynamic chunk loading issues that could cause failures in certain deployment configurations.

  ***

  ## Dashboard

  * Removed Daily Bots dashboard links and unified domain handling.

  ***

  ## Media Services

  ### Telephony

  * Added support for dynamically creating SIP dial-in endpoints.
  * SIP participants are now properly ejected when a room is deleted.
  * Fixed presence data for dial-out participants who are the first to join a room.
  * Fixed pagination in the list phone numbers API.
  * Fixed error handling in the list available numbers API.

  ### Recording and Transcription

  * Added a new `force_audio_only_recording` domain property for audio-only recording.
  * Meeting-move-aware transcription is now enabled by default.
  * Fixed Deepgram extra metadata encoding for transcription sessions.
</Update>

<Update label="September 23, 2025">
  Phone extension support for dial-out, Android 16KB page size compatibility, auto-start recording reliability, and new Picture-in-Picture events.

  ## Overview

  September adds phone extension support for dial-out operations across our client SDKs, Android 16KB page size compatibility for React Native, and improved reliability for auto-start recording and transcription. We've also added new Picture-in-Picture events for Daily Prebuilt and improved handling for unsupported browsers.

  Complete release history for our client SDKs is available in our Github release notes:

  * [daily-js](https://github.com/daily-co/daily-js/releases)
  * [react-native-daily-js](https://github.com/daily-co/react-native-daily-js/releases)
  * [daily-react](https://github.com/daily-co/daily-react/releases)
  * [daily-ios](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md)
  * [daily-android](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md)
  * [daily-python](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md)

  ***

  ## daily-js

  [View full release notes →](https://github.com/daily-co/daily-js/releases)

  ### 0.84.0

  * Added support for calling phone extensions during dial-out operations. You can now specify an extension number and wait time before dialing the extension after the main call connects.
  * Added Prebuilt-specific `pip-started` and `pip-stopped` events.
  * Improved reliability of handling auto-start recording and transcription options when joining a room.
  * Improved handling for unsupported browsers. The Daily constructor will now throw an error of `WebRTC not supported or suppressed` if the browser cannot support a call.

  ***

  ## react-native-daily-js

  [View full release notes →](https://github.com/daily-co/react-native-daily-js/releases)

  ### 0.81.0

  * Added support for Android 16KB page size.
  * Added support for calling phone extensions during dial-out operations. You can now specify an extension number and wait time before dialing the extension after the main call connects.
  * Improved reliability of handling auto-start recording and transcription options when joining a room.

  ***

  ## Dashboard

  * Added a cancel plan button to the billing interface.
</Update>

## Older updates

<CardGroup cols={3}>
  <Card title="2025" href="/changelog/2025">
    7 updates from 2025.
  </Card>

  <Card title="2024" href="/changelog/2024">
    8 updates from 2024.
  </Card>

  <Card title="2023" href="/changelog/2023">
    18 updates from 2023.
  </Card>

  <Card title="2022" href="/changelog/2022">
    16 updates from 2022.
  </Card>

  <Card title="2021" href="/changelog/2021">
    12 updates from 2021.
  </Card>

  <Card title="2020" href="/changelog/2020">
    8 updates from 2020.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.