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

> Archived Daily changelog entries from 2025: transcription webhooks, canReceive permissions, meeting-move-aware recording and streaming, SIP/PSTN join-time permissions, and React Native New Architecture support.

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

<Update label="June 29, 2025">
  SIP/PSTN join-time permissions, React Native New Architecture support, recording and telephony improvements.

  ## Overview

  This month, we've shipped join-time permissions for SIP/PSTN users across our client SDKs. React Native developers can now build with the New Architecture enabled. We've also fixed some recording and telephony bugs.

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

  * Added support for setting permissions for SIP/PSTN users at join time.
  * Removed the use of STUN from Xirsys.
  * Updated dependencies to resolve security vulnerabilities.

  ***

  ## react-native-daily-js

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

  ### 0.77.0

  * Added support for setting permissions for SIP/PSTN users at join time.
  * Fixed a build issue when using React Native's New Architecture.
  * Removed the use of STUN from Xirsys.
  * Updated dependencies to resolve security vulnerabilities.

  ***

  ## daily-python

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

  ### 0.19.3

  * Added an option to ignore audio level when creating a custom audio track.

  ### 0.19.2

  * Fixed a segmentation fault that could occur on exit when a custom audio source was still writing data.

  ***

  ## Media Services

  ### Recording

  * Fixed a bug where a failed session asset image URL could cause a recording composition to crash.

  ### Telephony

  * Fixed a bug to correctly extract the `displayName` from custom SIP headers for dial-in participants.
</Update>

<Update label="May 31, 2025">
  Meeting move aware recording and streaming, new call transfer webhooks, improved telephony features, and platform-wide bug fixes.

  ## Overview

  Mobile SDKs now support canReceive permissions and improved connection reliability. The Python SDK gets powerful custom audio track capabilities. Meeting move aware recording is enabled by default, we've added call transfer webhooks, and transcription saves are now more resilient.

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

  * Improved Krisp error handling.
  * Removed a client-side limit on `max_live_streams`.
  * Disabled Redux DevTools in production builds.

  ***

  ## react-native-daily-js

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

  ### 0.76.0

  * Removed a client-side limit on `max_live_streams`.
  * Disabled Redux DevTools in production builds.

  ***

  ## daily-android

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

  ### 0.31.0

  * Added support for the `canReceive` permission to manage which media tracks remote participants can receive.
  * Improved connection reliability by retrying signaling channel connections and using an alternate WebSocket URI format.
  * Fixed a bug where custom ICE server configurations were not being applied.

  ***

  ## daily-ios

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

  ### 0.31.0

  * Added support for the `canReceive` permission to manage which media tracks remote participants can receive.
  * Improved connection reliability by retrying signaling channel connections and using an alternate WebSocket URI format.

  ***

  ## daily-python

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

  ### 0.19.1

  * Fixed an audio renderer issue that caused garbled audio with remote stereo tracks.
  * Added handling for meeting session ID changes that occur mid-call.

  ### 0.19.0

  * Introduced `CustomAudioTrack` for use as an additional custom track or as the main microphone input.
  * Added support for `displayName`, `userId`, `video`, `codecs`, and `permissions` in `start_dialout()`.
  * Added `sample_rate` and `callback_interval_ms` arguments to `set_audio_renderer()` for more control over audio data.
  * Updated `add_custom_audio_track()` and `update_custom_audio_track()` to accept a `CustomAudioTrack` instance.
  * Switched to using system-level root certificates on all platforms.
  * Fixed a bug where blocking virtual microphones could fail to send audio.

  ### 0.18.2

  * Fixed an installation issue on macOS versions older than 15.0.
  * Corrected type hints for `remove_custom_track()`.

  ### 0.18.1

  * Improved connection reliability by retrying signaling channel connections and using an alternate WebSocket URI format.
  * Fixed a bug with virtual microphone completion callbacks.

  ***

  ## Media Services

  ### Recording

  * Meeting move aware recording and streaming is now enabled by default. This feature [(previously in pre-beta)](/changelog/2024#recording-and-streaming-recovery-during-meeting-moves-pre-beta) automatically resumes recordings and live streams when meetings are transferred between servers during maintenance or failovers, eliminating gaps in recorded content.

  ### Telephony

  * Introduced new webhooks to track call transfer status: `calltransfer.triggered`, `calltransfer.initiated`, `calltransfer.answered`, and `calltransfer.complete`.
  * Added support for passing custom SIP headers during pinless dial-in, which are now available in the `sipHeaders` object in the webhook payload.
  * Added `canReceive` permission controls for dial-in and dial-out participants via the `startDialOut()` API and room properties.
  * On-demand SIP dial-out endpoints are now the default behavior, improving resource efficiency.

  ### Transcription

  * Transcripts are now saved to storage every two minutes by default, improving data resilience.
  * The `/transcript` and `/transcripts` API endpoints now include `roomName`, `participantMinutes`, and `isVttAvailable` for more detailed information.
  * Fixed a race condition that could cause duplicate transcription messages when participant settings were updated rapidly.
</Update>

<Update label="April 30, 2025">
  Stability fixes for ejection logic and network states, Python custom audio tracks, enhanced recording webhooks, improved telephony features, and performance diagnostics for slow joins.

  ## Overview

  We've shipped stability improvements across the board this month. Key fixes include meeting ejection logic, network state calculations, and slow join diagnostics. The Python SDK now supports custom audio tracks, and raw tracks recordings now include instance IDs in webhooks.

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

  * Fixed ejection logic to prevent incorrect ejections or joins when a user's local clock is out of sync. ⚠️ **Note:** Participants can no longer join if `eject_after_elapsed` is set to a negative value.
  * Fixed an `OverconstrainedError` on Chrome that occurred when providing an invalid audio `deviceId`.
  * Fixed an issue where unhandled errors during Krisp initialization could cause problems when joining a call.
  * Reverted a change that disabled background effects on Windows when software WebGL is in use. Instead, a `video-processor-warning` is now logged, as this scenario can significantly reduce video frame rates.
  * Improved `networkState` calculations by removing `recvPacketLoss`, which could be misleading.
  * Added `instanceId` to webhooks for raw tracks recordings.
  * Added performance logging for `enumerateDevices()` to help identify slow join times, especially on Firefox when the tab is not in focus.
  * Removed the beta feature warning from `testCallQuality()`.

  ***

  ## react-native-daily-js

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

  ### 0.75.0

  * Fixed ejection logic to prevent issues caused by mismatched local clock times. ⚠️ **Note:** Participants can no longer join if `eject_after_elapsed` is set to a negative value.
  * Improved `networkState` calculation by removing `recvPacketLoss` from the formula.
  * Added `instanceId` to webhooks for raw tracks recordings.
  * Added performance logging for `enumerateDevices()` to help diagnose slow join times.

  ***

  ## daily-python

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

  ### 0.18.0

  * Introduced support for creating, updating, and removing custom audio tracks. You can now use `CallClient.add_custom_audio_track()`, `CallClient.update_custom_audio_track()`, and `CallClient.remove_custom_audio_track()` for advanced audio manipulation.
  * Improved `canReceive` permission support to ensure track states (`"off"`, `offReasons`) update correctly when permissions are granted or revoked.
  * Audio and video renderer callbacks (`set_audio_renderer()`, `set_video_renderer()`) now receive the audio or video source as the last argument.
  * Reduced "no subscription for consumer" and "Failed to close consumer" log messages from error to debug, as these often occur during normal participant disconnections.

  ## Media Services

  ### Recording

  * **Instance ID in Webhooks**: The `recording.ready-to-download` and `raw-tracks-recording-error` webhooks now include an `instance_id` to uniquely identify raw tracks recording sessions.
  * Fixed an issue to ensure the `instanceId` is correctly propagated for raw tracks recordings from the initial API call through to the final webhook event.

  ### Telephony

  * **`dialin.ready` Webhook**: Introduced the `dialin.ready` webhook event, which notifies you when a room's SIP endpoint is ready to receive an inbound call.

  * **`origin` Field in Dial-Out Webhooks**: Dial-out webhook events now include an `origin` field, specifying the PSTN number or SIP URI that initiated the call.

  * **Default SIP Codec**: Added a domain-level property to set default codecs for SIP/PSTN calls. Opus is now the default codec for all dial-in calls.

  * **On-Demand SIP Endpoints**: SIP endpoints for dial-out are now created on-demand when `startDialOut()` is called, improving resource efficiency and room creation reliability.

  * **Error Messaging**: Enhanced error messages for dial-in/out configurations during room creation.
</Update>

<Update label="March 30, 2025">
  New canReceive permission, dynamic track constraints, revamped network stats, enhanced telephony features (caller ID, SIP fixes), improved platform stability and compatibility (reconnection, ICE, and more), and security updates.

  ## Overview

  As we close out the first quarter, recent updates across the Daily ecosystem deliver major new features and bug fixes. We've introduced the `canReceive` permission for fine-grained media control, revamped network statistics (networkState, networkStateReasons) while deprecating older metrics, enhanced telephony capabilities (caller ID, SIP stability, API improvements), refined recording composition, and fixed bugs across the 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.77.0

  #### Introduced `canReceive` Permission

  We extended the available permissions to include `canReceive`, which allows meeting owners to control the media tracks of others in the session. This feature enables use cases like "warm transfers" (e.g., ensuring a customer doesn't hear an agent before the handoff is complete) and other scenarios requiring selective visibility or audibility within a call. See the [participant permissions documentation](/reference/daily-js/instance-methods/participants#param-permissions) for details.

  #### Improved Network Quality Statistics

  We introduced two new fields in the object returned by [`getNetworkStats()`](/reference/daily-js/instance-methods/get-network-stats) to provide more accurate network quality data: `networkState` and `networkStateReasons`. These replace the deprecated `threshold` and `quality` fields, offering a more reliable assessment based on send/receive packet loss, round-trip time, and available outgoing bitrate.

  #### Bug fixes and improvements

  * Fixed `proxyUrl` support in `dailyConfig`.
  * Optimized background effects on Windows by disabling them when hardware acceleration is unavailable.
  * Updated internal dependencies to resolve security vulnerabilities.
  * Simplified `recordings_bucket` response in `room()` method for enhanced security.

  ### 0.76.0

  #### Bug fixes and performance improvements

  * Updated Krisp noise cancellation library to v2.2.1.
  * Fixed switching back from custom video track to device track via `setInputDevicesAsync()`.
  * Fixed `iceTransportPolicy` configuration to correctly override domain defaults.
  * Added `enable_dialout` to TypeScript definitions for `DailyRoomInfo`.

  ### 0.75.2

  #### Bug fixes

  * Fixed unnecessary video track re-acquisition during input settings updates.

  ### 0.75.1

  #### Bug fixes

  * Fixed video constraint preservation when changing devices.
  * Removed console error for null `deviceId` in `setInputDevicesAsync`.

  ### 0.75.0

  #### Enhanced Participant Type for Dial-in/out

  The `participant` object now includes specific `participantType` values to identify telephony participants: `sip-dial-in`, `sip-dial-out`, `pstn-dial-in`, and `pstn-dial-out`. This allows for clearer identification of how participants joined via SIP or PSTN dial-in/out.

  #### Dynamic Input Track Constraints

  Introduced support for dynamically customizing media track constraints during a call using [`updateInputSettings()`](/reference/daily-js/instance-methods/update-input-settings). This allows changing camera resolution, frame rate, or switching between front and rear cameras without rejoining. The previous constraint-setting methods (`userMediaAudioConstraints`, `userMediaVideoConstraints`, and `setBandwidth` trackConstraints) are now deprecated.

  #### Bug fixes and improvements

  * Fixed track event reliability for rapid muting/unmuting and custom tracks.
  * Fixed track event participant info on leave.
  * Improved Krisp initialization error handling.
  * Fixed `ondevicechange` undefined error on certain systems.
  * Updated Banuba SDK to eliminate need for `'unsafe-eval'` CSP directive with `avoidEval: true`.
  * Updated minimum supported version to 0.64.0.

  ***

  ## react-native-daily-js

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

  ### 0.74.0

  #### Introduced `canReceive` Permission

  Added support for the new `canReceive` permission for granular control over which media tracks participants receive. See the [participant permissions documentation](/reference/daily-js/instance-methods/participants#param-permissions) for details.

  #### Improved Network Quality Statistics

  Introduced `networkState` and `networkStateReasons` fields in [`getNetworkStats()`](/reference/react-native/instance-methods/get-network-stats), replacing deprecated `threshold` and `quality` metrics.

  #### Bug fixes and improvements

  * Added caller ID support for SIP PSTN transfers in `sipCallTransfer()`.
  * Fixed `proxyUrl` support.
  * Updated dependencies for security fixes.
  * Simplified `recordings_bucket` response in `room()` method.

  ### 0.73.0

  #### Bug fixes

  * Fixed switching from custom video track back to device track.
  * Fixed `iceTransportPolicy` configuration override.
  * Added `enable_dialout` to TypeScript definitions.

  ### 0.72.1

  #### Reverted Erroneous API Changes

  Reverted unintended deprecation notices for `updateInputSettings()` and dynamic track constraints to maintain React Native's existing device handling APIs.

  ### 0.72.0

  #### Enhanced Participant Type for Dial-in/out

  Added specific `participantType` values for telephony participants: `sip-dial-in`, `sip-dial-out`, `pstn-dial-in`, and `pstn-dial-out`.

  #### Added Audio-Only Raw Tracks Recording

  Added `raw-tracks-audio-only` streaming config for audio-only recording support.

  #### Bug fixes

  * Fixed track event reliability for muting and custom tracks.
  * Updated internal REST APIs to use native utilities.
  * Added participant info to `track-stopped` events on leave.

  ### 0.71.0

  #### Bug fixes and improvements

  * Added `sessionId` to dial-in events.

  ***

  ## daily-android

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

  ### 0.30.0

  #### Ignore Network Devices API

  Introduced `CallClient.GlobalConfig.setIgnoredNetworkDevices()` to exclude specific network interfaces (VPNs, virtual adapters) during ICE candidate gathering for improved connection reliability.

  #### Bug fixes

  * Fixed ICE server configuration application via `CallClient.setIceConfig()`.

  ### 0.29.0

  #### Automatic Cloud Recording Start

  Added support for automatically starting cloud recording on join when `start_cloud_recording: true` is set in the meeting token.

  #### Bug fixes and improvements

  * Fixed reconnection with expired meeting tokens.
  * Updated dependencies (ffmpeg, libav, libvpx) for security patches.

  ***

  ## daily-ios

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

  ### 0.30.0

  #### Bug fixes

  * Fixed ICE server configuration application via `setIceConfig()`.

  ### 0.29.0

  #### Automatic Cloud Recording Start

  Added support for automatically starting cloud recording on join when `start_cloud_recording: true` is set in the meeting token.

  #### Bug fixes

  * Fixed reconnection with expired meeting tokens.

  ***

  ## daily-python

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

  ### 0.17.0

  #### Improved Linux Compatibility

  Recompiled against glibc 2.28 for broader Linux distribution support.

  ### 0.16.1

  #### Bug fixes

  * Fixed virtual speaker device selection.

  ### 0.16.0

  #### Update `canReceive` Permissions Support

  Added support for modifying remote participant's `canReceive` permission via `update_remote_participants()`.

  #### Bug fixes

  * Fixed ICE server configuration application.

  ### 0.15.0

  #### Automatic Cloud Recording Start

  Added support for automatically starting cloud recording on join when `start_cloud_recording: true` is set in the meeting token.

  #### Bug fixes

  * Fixed reconnection with expired meeting tokens.

  ***

  ## Daily Prebuilt

  #### Transcription Language Defaults

  Transcription now defaults to the room/domain `lang` configuration when started via Closed Captions, falling back to English if not configured.

  ***

  ## Media Services

  ### Recording and Live Streaming

  #### New Features

  * **Scale Mode Overrides**: Added `videoSettings.split.scaleModeOverrides` for individual participant scaling in split layout compositions.
  * **Background Color Support**: VCS render pipeline now supports custom background colors via `backgroundColor` parameter.

  #### Bug fixes

  * Fixed audio-only participant filtering in baseline compositions.
  * Fixed instance ID handling for raw tracks recording.

  ### Telephony

  #### Enhanced Caller ID Control

  Added `callerId` support in `sipCallTransfer()` for PSTN transfers with improved default caller ID selection logic.

  #### API Improvements

  * Domain dial-in configs endpoint now supports filtering by multiple phone numbers.
  * Purchased phone numbers endpoint now includes pagination support.
  * Room creation API provides more specific telephony provisioning error messages.

  #### Bug fixes and improvements

  * Improved SIP INVITE handling to prevent signaling state errors.
  * Enhanced error messages for invalid call transfers.
  * Fixed layout updates for disconnected SIP participants.
  * Added comprehensive [transfer guide documentation](/docs/guides/features/dial-in-dial-out/transfers).

  ### Transcription

  #### Bug fixes

  * Fixed race condition when stopping or updating transcription immediately after starting.
</Update>

<Update label="January 31, 2025">
  New transcription webhooks, better multi-instance recording support, improved telephony features, platform-wide bug fixes, and strengthened SDK reliability.

  ## Overview

  Rounding out 2024 and kicking off 2025 with major improvements across Daily's platform components: bug fixes (Safari audio processing detection, call quality test error handling), expanded feature set (improved PSTN/SIP support, expanded multi-instance recording, new transcription webhooks), and strengthened infrastructure (SDK and media service reliability).

  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

  ### 0.74.0

  #### Updated Krisp CSP Requirements

  Added missing `blob:` source to the [CSP guide](/docs/guides/privacy-and-security/content-security-policy):

  ```js theme={null}
  script-src 'self' https://unpkg.com/@daily-co/daily-js blob:;
  ```

  #### Follow-up fix for Safari Audio Processing Detection

  Fixed a logical error in Safari version comparison for audio processing support. We resolved an edge case where Safari versions above 18 were incorrectly flagged as unsupported. This completes the [Safari 17.4+ audio processing detection fix](/changelog/2024#fixed-audio-processing-detection-in-safari-17-0-17-3) from our previous release.

  This change ensures accurate audio processing support detection across all Safari versions.

  #### Fixed Call Quality Test Error Handling

  Fixed error handling in `testCallQuality()` when rate limits are hit and improved promise rejection handling to avoid uncaught errors. Test failures now properly resolve with a FAILED result instead of throwing.

  #### Added Session ID to Dial-in Events

  Added sessionId field to all dial-in events: `dialin-connected`, `dialin-error`, `dialin-stopped`, and `dialin-warning`.

  For example:

  ```js theme={null}
  dialinConnected: { sessionId: 'abc-123', sipFrom: '+1234567890', ... }
  ```

  #### Version Support Update

  * The oldest supported version of `daily-js` is now 0.63.0.

  ***

  ## react-native-daily-js

  ### 0.71.0

  This release also includes several core improvements shared with daily-js 0.74.0:

  * Added sessionId to dial-in events

  See the daily-js 0.74.0 section for full details on these changes.

  ***

  ## daily-android

  ### 0.28.0

  #### Added support for Cloudflare TURN/STUN servers

  Added support for using Cloudflare TURN/STUN servers for ICE connections. If you're interested in using this for your Daily domain, please contact [help@daily.co](mailto:help@daily.co)

  #### Fixed Android Proguard Build Configuration

  Fixed an issue where apps using R8/Proguard would fail to build due to missing Banuba video processor classes:

  * Added proper Proguard configuration for optional Banuba SDK dependencies
  * Ensured R8 optimization doesn't fail on missing video processor classes
  * Maintained backwards compatibility with existing video processor integrations

  This change prevents build failures in release builds when the video processor plugin is not included.

  ### 0.27.0

  #### Fixed crash when creating and deleting `VideoTextureView`/`VideoTrackCapturerToSurface` without also creating a `CallClient`.

  Fixed an issue where `daily-android` would crash when cleaning up video views without an active CallClient:

  * Moved native library initialization to shared context to prevent premature loading
  * Added safety checks to prevent cleanup of uninitialized native contexts
  * Improved synchronization of client tracking in shared context

  This change prevents crashes when creating and destroying video views without an active call client, improving stability for applications that conditionally initialize video components.

  #### Enhanced Call Reliability during Meeting Moves

  Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.

  ***

  ## daily-ios

  ### 0.28.0

  #### Added support for Cloudflare TURN/STUN servers

  Added support for using Cloudflare TURN/STUN servers for ICE connections. If you're interested in using this for your Daily domain, please contact [help@daily.co](mailto:help@daily.co)

  ### 0.27.0

  #### Enhanced Call Reliability during Meeting Moves

  Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.

  ***

  ## daily-python

  ### 0.14.2

  #### Fixed type hints for CallClient.send\_app\_message()

  Fixed type hints for `CallClient.send_app_message()` to match the expected payload structure.

  ### 0.14.1

  #### Enhanced App Message Serialization

  Added `serialize_none` option to `CallClient.send_app_message()` to control whether `None` values are serialized to JSON `null` or ignored. This enables more flexible data handling in application messages.

  ### 0.14.0

  #### Added DTMF Support for Dial-out Calls

  Added the ability to send DTMF tones in dial-out sessions using `CallClient.send_dtmf()`[docs](https://reference-python.daily.co/api_reference.html#daily.CallClient.send_dtmf):

  * Send numeric tones (0-9), symbols (#, \*) and letters (A-D) to control interactive voice systems
  * Control automated phone menus and voicemail systems during dial-out calls
  * Specify session ID and tone sequences via simple settings object

  This addition enables programmatic interaction with phone systems that require DTMF input during dial-out calls.

  #### Added SIP REFER Support

  Added support for transferring SIP calls to external endpoints via `CallClient.sip_refer()` ([docs](https://reference-python.daily.co/api_reference.html#daily.CallClient.send_dtmf)):

  * Transfer ongoing SIP dial-in calls to external SIP endpoints
  * Control transfers using session ID and destination endpoint
  * Support for standard SIP REFER mechanism

  This addition enables seamless call transfers between Daily and external SIP systems.

  #### Added Daily-to-Daily SIP Call Transfer Support

  Added support for transferring SIP/PSTN calls between Daily rooms via `CallClient.sip_call_transfer()` ([docs](https://reference-python.daily.co/api_reference.html#daily.CallClient.sip_call_transfer)):

  * Transfer SIP dial-in calls between Daily rooms
  * Transfer dial-out calls to other SIP/PSTN endpoints
  * Control transfers using session ID and destination endpoint

  This addition enables seamless call transfers within the Daily ecosystem and to external numbers.

  #### Changed field name in Dial Events

  Renamed `participantId` to `sessionId` in `DialoutEvent` and `DialinEvent` objects for consistency

  #### Enhanced Call Reliability during Meeting Moves

  Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.

  ***

  ## Daily Prebuilt

  * Enhanced accessibility across Prebuilt with ARIA attributes, improved keyboard navigation, semantic HTML, updated labels and roles, and better screen reader support to meet WCAG standards.
  * Fixed issue where GIFs with empty titles were not rendered in chat.
  * Fixed a case where flickering in chat input height occurred while typing.

  ***

  ## Media Services

  ### Recording and Live Streaming

  #### Support Multiple Recording Types with Multi-Instance Recording

  Added support for running different recording types simultaneously using instance IDs:

  ```js theme={null}
  // Start a cloud recording
  await call.startRecording({
    instanceId: '123e4567-e89b-12d3-a456-426614174000',
    type: 'cloud',
    layout: {
      preset: 'default',
    },
  });

  // Start raw-tracks recording in parallel
  await call.startRecording({
    instanceId: '987fdef0-c65b-11d1-b2e2-526614174000',
    type: 'raw-tracks',
  });
  ```

  * New `type` parameter in `startRecording()` ([docs](/reference/daily-js/instance-methods/start-recording)) API accepts `'cloud'`, `'raw-tracks'`, or `'local'`
  * Recording types must be enabled via `enable_recording` property on room/domain
  * Each recording instance requires a unique UUID via `instanceId` parameter

  You can now run cloud recordings and raw track captures simultaneously, enabling both processed and unprocessed recording workflows from a single call.

  #### Added Audio-Only Support for Raw Tracks Recording

  Added support for audio-only recording in raw-tracks recordings:

  ```typescript theme={null}
  // Start a raw-tracks recording with audio only
  await call.startRecording({
    instanceId: '123e4567-e89b-12d3-a456-426614174000',
    type: 'raw-tracks',
    layout: {
      preset: 'raw-tracks-audio-only',
    },
  });
  ```

  * New `raw-tracks-audio-only` preset captures only audio tracks, reducing storage requirements and simplifying post-processing workflows
  * Preset must be specified at recording start - cannot be changed via `updateRecording()`
  * Compatible with existing `raw-tracks` processing tools for audio extraction and analysis

  This addition makes raw-tracks recordings more flexible for audio-focused use cases where individual tracks are needed for post-processing like podcasting, voice analysis, and audio archival.

  #### Added Raw Tracks Processing Tools

  Released an open-source suite of tools for processing raw-tracks recordings:

  * New [`raw-tracks-tools` CLI](https://github.com/daily-co/raw-tracks-tools) provides tools for analyzing, converting and compositing WebM files from raw-tracks recordings
  * Supports track alignment, synchronization, and layout composition using Daily's VCS engine
  * Complements existing GUI tools like CloudConvert and Handbrake with more precise control over WebM processing

  This release makes raw-tracks recordings more accessible for post-processing workflows, especially for high-quality audio/video production.

  #### Added Audio Recording Loss Detection

  Added automatic detection of audio quality issues in recordings and streams. This fixes issues where audio quality issues where audio or video tracks were visible during the live call but not in the final recording/stream.

  #### Improved Recording Reliability with Network Optimizations

  Enhanced network reliability for all recording types (cloud, raw-tracks, live streaming) and phone integration:

  * Increased UDP buffer sizes to prevent packet loss between servers
  * Added server-to-server retransmission between SFU and media workers
  * Reduces recording freezes and dropped tracks in environments with network congestion

  #### Fixed Missing Tracks in Recordings

  Fixed an issue where tracks could be missing from recordings when added during WebSocket reconnections between SFU and recording services. New tracks are now properly subscribed even during connection re-establishment.

  ### Telephony

  #### Renamed Dialout Timeout Configuration Field

  Renamed dialout configuration parameter from `max_alone_duration_sec` to `max_idle_timeout_sec` to better describe its purpose of controlling how long dialout participants remain in an idle room.

  #### Added Participant Type Support in participants() for Phone Participants

  Added distinct participant types for phone participants in [participants()](/reference/daily-js/instance-methods/participants) to enable better handling of SIP and PSTN users:

  * New participant types: `sip-dial-in`, `sip-dial-out`, `pstn-dial-in`, `pstn-dial-out`
  * Automatically set for all phone-based participants, including umbrella participants

  This helps developers better identify and manage phone participants in their applications.

  #### Fixed Dialout ICE Connection Reliability

  Fixed an issue where SIP dialout calls could hang during ICE connection negotiation, improving the reliability of phone system integration.

  #### Added `dialout_config` to Room Configuration

  Added `dialout_config` ([docs](/reference/rest-api/rooms/get-room#response-config-dialout-config)) as a room-level configuration option to control dialout behavior:

  * `dialout_config.allow_room_start`: Allow dialouts to start an empty room
  * `dialout_config.max_idle_timeout_sec`: Control how long a dialout participant can remain in a room alone
  * `dialout_config.dialout_geo`: Specify region for dialout sessions

  ### Transcription

  #### Unified Transcription Configuration Across Live and Batch Processing

  Aligned transcription configuration options between live transcription and batch processing for consistent API usage:

  ```js theme={null}
  // Live transcription
  await call.startTranscription({
    language: 'fr-CA',
    model: 'nova-2-general',
  });
  ```

  * All configuration options from [live transcription](/reference/daily-js/instance-methods/start-transcription) (language, model, punctuate, etc.) now supported in [batch processing](/reference/rest-api/batch-processor/reference/submit-job)
  * Previous undocumented `params` field maintained for backward compatibility
  * Added new `extra` field for additional Deepgram parameters in both APIs

  Simplifies transcription configuration by providing a consistent interface across real-time and batch processing workflows.

  #### Added Room Name in Transcription API

  Enhanced transcription list and info endpoints with room name support:

  ```js theme={null}
  // List transcripts with room name filter
  GET /api/transcripts?room_name=my-room*

  // Transcript info now includes room name
  {
   "transcriptId": "123",
   "roomId": "456",
   "roomName": "my-room",
   // ...other fields
  }
  ```

  ### Webhooks

  #### New transcription webhook events

  Added three new webhook events to track the full lifecycle of transcriptions:

  * [`transcript.started`](/reference/rest-api/webhooks/events/transcript-started) indicates transcription has begun, including metadata like room ID, instance ID and initial status
  * [`transcript.ready-to-download`](/reference/rest-api/webhooks/events/transcript-ready-to-download) fires when transcription completes, providing S3 location details for downloading the transcript
  * [`transcript.error`](/reference/rest-api/webhooks/events/transcript-error) provides detailed error information and context if transcription fails during any stage

  Monitor and automate transcription workflows with comprehensive status updates and error handling through webhooks.

  ## Other

  ### Added support for Cloudflare TURN/STUN servers

  Added support for using Cloudflare TURN/STUN servers for TURN/STUN connections. If you're interested in using this for your Daily domain, please contact [help@daily.co](mailto:help@daily.co)
</Update>
