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

> Archived Daily changelog entries from 2024 (8 updates), retained for reference.

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

<Update label="November 25, 2024">
  Improved recording recovery, support for virtual background and custom audio tracks on mobile SDKs, and various platform-wide improvements.

  ## Overview

  November brings background effects, enhanced reliability, and platform-wide improvements to our SDKs and Media Services. Key updates include:

  * Support for automatic client-side recording recovery during meeting moves (pre-beta).
  * Background blur, virtual background, and custom audio track support for iOS and Android SDKs.
  * Better logging for recordings and streaming-related errors and other transcription improvements.

  Additional improvements include better state management, permission handling, and various stability fixes across all platforms. Complete release history 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.73.0

  #### Recording and Streaming Recovery During Meeting Moves (Pre-beta)

  Added client-side support for automatic recovery of recordings and streaming during meeting moves.

  <Info>
    <strong>What is a meeting move?</strong>

    Meeting moves are Daily's automatic process for transferring ongoing meetings between servers. This happens during planned maintenance and deployments, as well as for automatic failover if server connectivity issues occur. In most cases, these moves are harmless to end users. However, they previously required manual handling for features like recording and streaming.
  </Info>

  * When enabled, your recordings and live streams will automatically resume after a meeting move occurs, eliminating the need for manual intervention or custom recovery logic.
  * This feature ensures continuous recording/streaming during both planned maintenance and unexpected server transitions, reducing gaps in your recorded and streamed content.
  * Currently available as an opt-in feature. Contact [help@daily.co](mailto:help@daily.co) if you're interested in testing this functionality on your domain.

  #### Fixed `leave()` race condition

  Fixed a timing issue where calling `leave()` immediately after `join()` could result in unexpected behavior:

  ```js theme={null}
  // Previously this could occasionally cause issues
  await call.join();
  call.leave(); // might be ignored
  ```

  * Resolved edge cases where `leave()` calls would sometimes return a promise that never fulfilled, particularly when:

    * Transitioning between meeting states rapidly
    * Managing multiple join/leave operations in quick succession

  * Added additional state validation to prevent race conditions between `join()` and `leave()` operations

  * This change improves reliability for applications that need to handle rapid meeting state transitions, such as moving participants between rooms or implementing reconnection logic.

  #### Fixed Chrome 129 Device Selection Issues

  Fixed device selection behavior in Chrome 129+ where setting a `deviceId` as `ideal` (instead of `exact`) would silently fall back to the default device:

  ```js theme={null}
  // Previously in Chrome 129+:
  const constraints = {
    video: {
      deviceId: { ideal: 'requested-camera-id' }, // Would silently use default camera
    },
  };
  ```

  * Added proper error handling when requested devices aren't available
  * This resolves issues where camera/microphone selection would appear to succeed but continue using the previous or default device
  * This fix ensures consistent device selection behavior, particularly important when users need to switch between multiple cameras or microphones.

  #### Fixed Audio Processing Detection in Safari 17.0-17.3

  * Corrected browser capability detection for audio processing features in Safari versions 17.0 through 17.3. Previously, these versions would incorrectly report support for audio processing features.
  * This ensures that applications using audio processing features (like Krisp's noise cancellation) can accurately determine browser compatibility and provide appropriate fallback experiences.
  * Audio processing is now correctly reported as supported only in Safari 17.4 and above.

  #### Fixed Resource Loading URL Resolution

  Fixed an edge case in URL resolution when calling methods in a specific order:

  ```js theme={null}
  // Previously this could cause resource loading from incorrect servers
  await call.startCamera(); // Without a URL
  // Any resource loading here would use incorrect server
  await call.join({ url: 'https://your-domain.daily.co/room' });
  ```

  * This ensures resources are always loaded from the correct Daily production server, particularly important when using features that require additional resources before joining a call, especially in restrictive network environments.

  #### Dependency updates including Sentry

  We've updated dependencies including Sentry to the latest versions to resolve security vulnerabilities. This required a change in how we use Sentry, but our usage should not interfere or bleed into your Sentry and vice versa.

  <Info>
    Please reach out to [help@daily.co](mailto:help@daily.co) if you see otherwise.
  </Info>

  #### Improved Error Logging for Participant Updates

  Fixed misleading error messages that would appear in dashboard logs when calling `updateParticipant()` or `updateParticipants()`:

  * Reduced noise in dashboard logs by no longer treating participant-not-found cases as errors.
  * These messages commonly occurred during normal operation when participants left the call but pending updates were still being processed.
  * Now only logs actual errors related to permissions or other substantial issues.
  * No changes to functionality - calls to `updateParticipant()` for unknown participants continue to be handled as no-ops.

  <Info>
    If you were previously monitoring logs for `update can't be applied` errors,
    you may notice a significant reduction in these messages. This is expected and
    indicates better error classification, not a change in behavior.
  </Info>

  #### Removed Legacy Device Handling System

  The legacy device handling system has been fully deprecated and removed:

  * The `v2CamAndMic` configuration flag now has no effect as all clients automatically use the modern device handling system.
  * No action required for existing applications since this system has been the default since version 0.49.0.
  * If you see references to `v2CamAndMic` in your codebase, you can safely remove them.

  #### Version Support Update

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

  ***

  ## daily-react

  ### 0.22.0

  #### Improved Browser Compatibility for Audio Level Observation

  * Added error handling to prevent unhandled exceptions when local audio monitoring is not supported by the browser.
  * Applications using useAudioLevelObserver now continue functioning normally in browsers that don't support audio level monitoring.
  * This improves the stability of features that depend on audio level detection, like audio visualizers or speaking indicators.

  #### Fixed Room Expiration Logic for Mixed Token and Room Settings

  * Fixed `useRoomExp` hook to correctly handle combinations of token expiration (`exp`) and room ejection settings.
  * This resolves UI inconsistencies where expiration countdown banners would appear based on token expiration even when room ejection wasn't configured.
  * Ensures expiration warnings only show when actual ejection will occur, preventing confusing user experiences.
  * Particularly important for applications using token-based authentication alongside room expiration settings.

  ### 0.21.3

  #### Improved Graceful Degradation for Disabled WebRTC

  Added graceful fallback handling to prevent application crashes when WebRTC features are disabled or blocked by privacy browser extensions:

  * This improves compatibility with privacy-focused browser extensions that often disable WebRTC features.
  * Components like `<DailyProvider/>` and `<DailyAudio/>` now handle these scenarios gracefully instead of throwing runtime errors.
  * Particularly important for applications that need to maintain functionality even when users have restricted WebRTC access.

  ***

  ## react-native-daily-js

  ### 0.70.0

  #### Fixed iOS Camera Orientation in Portrait Mode

  Fixed a camera initialization issue affecting iOS 16.x devices where initial video constraints would be incorrectly set in portrait mode:

  ```js theme={null}
  // Previously in iOS 16.x on initial join:
  { height: 720, width: 1280 }  // Incorrect landscape dimensions

  // After fix - correct portrait dimensions:
  { height: 1280, width: 720 }  // Correct portrait dimensions
  ```

  * This resolves an issue where users would experience zoomed-in video feeds when first joining a call in portrait orientation.
  * The fix ensures correct video dimensions are set on initial join, eliminating the need to rotate the device to fix the view.
  * Primarily affected iOS 16.x devices in Chrome and WKWebView-based browsers (embedded webviews).

  #### Improved Android Permission Handling

  * Fixed several Android-specific permission issues:

  ```js theme={null}
  // Previously requested both permissions regardless of call settings
  const audioOnlyCall = Daily.createCallObject({
    videoSource: false, // Camera permission still requested
    audioSource: true,
  });

  // Now correctly requests only needed permissions
  const audioOnlyCall = Daily.createCallObject({
    videoSource: false, // No camera permission requested
    audioSource: true, // Only microphone permission requested
  });
  ```

  * Fixed a race condition where tracks weren't properly initialized if users took longer to respond to permission prompts

  These changes improve the permission flow on Android by:

  * Only requesting necessary permissions based on call configuration.
  * Ensuring permissions are properly handled regardless of user response time.
  * Preventing unnecessary camera permission requests for audio-only calls.
  * Optimizing foreground service permissions:
    * It is recommended that developers remove `FOREGROUND_SERVICE_CAMERA` permission from `AndroidManifest.xml` when not needed.
    * Update `foregroundServiceType` configuration to exclude camera when not required.

  #### Fixed Global Event Listener Cleanup

  * Added missing `removeEventListener` when cleaning up global shims.
  * Resolves potential conflicts with other React Native libraries that use global variables.

  #### Additional Updates

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

  * Automatic recording/streaming recovery during meeting moves.
  * Fixed join/leave timing issue.
  * Dependency updates including Sentry upgrade.
  * Less noisy logging for participant updates.
  * Removal of legacy device handling system.

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

  ***

  ## daily-android

  ### 0.26.0

  #### Background Effects Support

  Added support for camera background blur and virtual background effects via `VideoProcessor`:

  * `BackgroundBlur`: Apply adjustable background blur (strength: 0.0 to 1.0).
  * `BackgroundImage`: Replace background with an image from your assets directory.

  To use this feature, add `co.daily:client-videoprocessor-plugin:0.1.0` as a dependency to your app's `build.gradle` file.

  Use `VideoMediaTrackSettingsUpdate.processor` to configure background effects. See our [VideoProcessor](https://reference-android.daily.co/daily-android/co.daily.settings/-video-processor/index.html) and [VideoMediaTrackSettingsUpdate](https://reference-android.daily.co/daily-android/co.daily.settings/-video-media-track-settings-update/index.html) docs for detailed usage.

  Example usage is available for reference in our [Android demo app](https://github.com/daily-demos/daily-android-demo/).

  #### Custom Audio Tracks Support

  Added support for playing custom audio tracks during calls - useful for scenarios like background music, high-quality audio playback, sound effects, and more. New methods include:

  * `addCustomAudioTrack()`: Add a new custom audio track to the call.
  * `updateCustomAudioTrack()`: Modify an existing custom audio track.
  * `removeCustomAudioTrack()`: Remove a custom audio track from the call.

  These tracks are independent of participant audio/video streams, allowing for flexible audio playback during calls. See implementation examples in our [Android demo app](https://github.com/daily-demos/daily-android-demo/).

  * Fixed `setTransform()` crash with `VideoTextureView` on older Android versions.
  * Renamed `org.webrtc` package to `co.daily.webrtc` to avoid conflicts.
  * Updated subscription state method names for better clarity.

  #### Fixed VideoTextureView Crash on Older Android Versions

  Fixed a crash that occurred when using `VideoTextureView` on Android API levels 23-25. The issue was related to thread restrictions when calling `setTransform()` on older Android versions. This fix improves compatibility for apps supporting Android 6.0 (Marshmallow) and above.

  ### 0.25.0

  #### WebRTC Package Namespace Change

  Renamed our WebRTC package from org.webrtc to co.daily.webrtc to prevent conflicts with other WebRTC implementations in your application. This change allows you to safely use multiple WebRTC-based SDKs in the same project.

  #### Added Resolution Change Detection for VideoTextureView

  Added VideoTextureView\.Listener interface and setListener() method to monitor video resolution changes. This enables applications to respond to video dimension updates in real-time, useful for implementing dynamic video overlays or layouts.

  ### 0.24.0

  #### Added Support for REST API App Messages

  Added new `CallClientListener.onAppMessageFromRestApi()` callback to handle app messages sent through Daily's REST API. This addition maintains backward compatibility while allowing your app to receive app messages from both client-side participants and server-side REST API calls.

  #### Deprecated Transcription `tier` Property

  The transcription property `tier` has been deprecated in favor of `model`. This change aligns with Deepgram's updated API which has moved away from the tier-based system. See Deepgram's [model documentation](https://developers.deepgram.com/docs/model) for available options.

  <Info>
    Complete list of changes is available in our{' '}

    <a href="https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md">
      changelog
    </a>
  </Info>

  ***

  ## daily-ios

  ### 0.25.0

  #### Added support for custom audio tracks

  Added support for playing custom audio tracks during calls - useful for scenarios like background music, high-quality audio playback, sound effects, and more. New methods include:

  * `addCustomAudioTrack()`: Add a new custom audio track to the call.
  * `updateCustomAudioTrack()`: Modify an existing custom audio track.
  * `removeCustomAudioTrack()`: Remove a custom audio track from the call.

  These tracks are independent of participant audio/video streams, allowing for flexible audio playback during calls. See implementation examples in our [iOS demo app](https://github.com/daily-demos/daily-ios-demo/).

  ### 0.24.0

  #### Added REST API App Message Support

  Added new `CallClientListener.onAppMessageFromRestApi()` callback for receiving app messages sent through Daily's REST API. This addition maintains backward compatibility while allowing your app to receive app messages from both client-side participants and server-side REST API calls.

  #### Deprecated Transcription Tier Property

  The transcription property `tier` has been deprecated in favor of `model`. This change aligns with Deepgram's updated API which has moved away from the tier-based system. See Deepgram's [model documentation](https://developers.deepgram.com/docs/model) for available options.

  * Added new delegate methods for handling custom audio tracks.
  * Fixed camera zoom issues in Portrait mode.
  * Enhanced resource cleanup processes.
  * Improved error handling for audio device selection.

  <Info>
    Complete list of changes is available in our{' '}

    <a href="https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md">
      changelog
    </a>
  </Info>

  ***

  ## daily-python

  ### 0.13.0

  #### Added Comprehensive Dial-in Event Support

  Added new event handlers to provide complete visibility into dial-in call lifecycle:

  * `on_dialin_connected`: Triggered when initial connection is established with SIP/PSTN endpoint.
  * `on_dialin_stopped`: Fired when remote endpoint disconnects the call.
  * `on_dialin_warning`: Handles non-fatal issues (e.g., codec fallbacks).
  * `on_dialin_error`: Captures fatal errors that prevent service continuation.

  Each event handler receives relevant data payload containing details about the dial-in session state. See our [Python SDK reference](https://reference-python.daily.co/api_reference.html) for complete event payload details.

  #### Fixed Virtual Speaker Deadlock

  Resolved a deadlock issue that could occur when:

  * Reading from a virtual speaker before any remote participants joined.
  * Subsequently attempting to exit the application.

  The fix corrects the initialization sequence between the Daily speaker device and its proxy component, preventing situations where the speaker could become permanently blocked waiting for nonexistent audio data.

  ***

  ## Daily Prebuilt

  * Added `visualState` option for `customTrayButtons` giving developers more control over button appearance and behavior.
  * Fixed an issue where resizing the Prebuilt window with chat open could result in a fatal error. This occurred when sending emojis and scrolling through chat messages in a room with advanced chat enabled.
  * Participants now automatically leave the call when encountering a fatal error or crash to prevent orphaned participants.
  * Enhanced custom button UX by rendering labels instead of tooltips in the more menu.
  * Fixed recording/streaming status indicator disappearing during meeting moves.

  ***

  ## Media Services

  ### Webhooks

  * Fixed an issue with meeting ended webhook that was reporting wrong meeting start\_time
  * Added missing payload properties to dial-in and dial-out webhook events:
    * Added `userId` to dial-out webhook events.
    * Added `sessionId` to dial-in webhook events.

  ### Transcription

  * `display_name` for HIPAA customers:
    * Transcripts now include participant display names when stored in customer-managed infrastructure, improving speaker identification while maintaining HIPAA compliance.

  ### Recording and Live Streaming

  * Enhanced error handling and logging:
    * Improved error message detection and logging for better troubleshooting.
    * Added detection of common recording/streaming issues including authorization failures and publishing restrictions.
    * Expanded known error patterns for recording/streaming connection failures and S3 permission problems.
  * Fixed a bug in VCS where participant order changes with dominant flag even when `dominant.followDomFlag` is off.

  ### Batch Processor

  The Batch Processor API now uses the improved `nova-2-general` Deepgram model by default, which supports all languages and provides improved accuracy. This change removes language-specific model handling since `nova-2-general` works universally.
</Update>

<Update label="October 17, 2024">
  Lots of updates in the last 3 months. Live transcriptions, PSTN and SIP, streaming and recording.

  ## Overview

  Over the past quarter, we've rolled out several updates to our SDKs. To explore the full scope of these improvements, check out our GitHub repositories:

  Follow the individual release notes on GitHub:

  * [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)
  * [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)

  Check out the notes below for the highlights.

  ## daily-js

  ### 0.72.1 and 0.72.0

  * Fixed issue in Chrome 129 that could prevent some users from changing microphone and camera devices.
  * Fixed the camera zoom issue that occurred in Portrait mode specifically when using Chrome or within a webview on iOS 16.

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-10-04-0.72.1).

  ### 0.71.2

  * Now you can transcribe a subset of participants along with the ability to initiate multiple simultaneous transcription on the same call. For more information, check out our [updated guide](/docs/guides/features/transcription).
  * [`startDialOut()`](/reference/daily-js/instance-methods/start-dial-out) now supports setting a `userId` that gets associated with all dial out events
  * Added a new `test-completed` event that gets emitted whenever a pre-join test has completed, providing a way for accessing the results asynchronously. This also provides a way for Daily Prebuilt customers to access the results of the [call quality test](/reference/daily-js/instance-methods/test-call-quality) that gets run as part of its prejoin UI. [Check out the docs for more info](/reference/daily-js/events/network-events#test-completed).
  * Fixed issue with background processing where the raw background would appear for a brief moment when switching between backgrounds.

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-09-12-0.71.2).

  ### 0.70.0

  * Support for multiple simultaneous call client instances is now in beta. For more information, [check out our new guide](/docs/daily-js/guides/multi-instance).
  * Improved noise cancellation (specified via `updateInputSettings()` or the `inputSettings` call property) and made it available on desktop and mobile Safari.
  * Added a `networkThreshold` property to `call.participants()` objects and related events (e.g. `participant-updated`, etc.), showing their network quality.

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-08-07-0.70.0).

  ### 0.69.0

  * Fixed an issue in Chrome 127 where the video was freezing when applying background effects.

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-07-25-0.69.0).

  ### 0.68.0

  * New getter methods `isLocalAudioLevelObserverRunning()` and `isRemoteAudioLevelObserverRunning()`
  * Exposing custom SIP headers received during the connection within the `dialin connected` event.
  * Updated console deprecation warning for `testConnectionQuality()` to point to daily's preferred alternative of `testCallQuality()`.
  * Updated cookies to follow the new CHIPS (Cookies Having Independent Partitioned State) guidelines and 3rd party restrictions. More details [here](https://developers.google.com/privacy-sandbox/cookies).
  * Improved internals of testCallQuality() so that the test's server connections better match what is expected to be in use during the actual call.

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-07-18-0.68.0).

  ## react-native-daily-js

  ### 0.69.0

  Now you can transcribe a subset of participants along with the ability to initiate multiple simultaneous transcription on the same call.

  ### 0.68.0

  * Support for multiple simultaneous call client instances is now in beta. For more information, [check out our new guide](/docs/daily-js/guides/multi-instance).
  * Added a `networkThreshold` property to `call.participants()` objects and related events (e.g. `participant-updated`, etc.), showing their network quality.

  ### 0.67.0

  Added alpha support for multiple call client instances. Beta support starts in `react-native-daily-js` 0.68.0.

  ### 0.66.0

  * New getter methods `isLocalAudioLevelObserverRunning()` and `isRemoteAudioLevelObserverRunning()`.
  * Exposing custom SIP headers received during the connection within the dialin connected event.

  ## daily-android

  ### 0.24.0

  * Added the `CallClientListener.onAppMessageFromRestApi()` callback for receiving app messages sent through the REST API.
  * `TranscriptionStatus.transcriptId` is now nullable, fixing an error where null values from the server would prevent the onTranscriptionStarted() callback from being invoked.
  * Transcription property `tier` has been deprecated. Use `model` instead. See [https://developers.deepgram.com/docs/model](https://developers.deepgram.com/docs/model).
  * Fixed a logging-related crash (stack overflow) that could occur when rapidly starting and stopping the SDK.

  ### 0.23.0

  * Added `callConfig` field to `CallJoinData`.
  * The `VideoView` class is now marked as `open`.

  ### 0.22.0

  * Added new metrics that will allow us to better understand the meeting quality.
  * Fixed a crash when stopping screen share
  * Fixed an issue to show the correct state when the mic is muted remotely.

  ## daily-ios

  ### 0.24.0

  New delegate function for receiving app messages sent through the REST API.

  `func callClient(_ callClient: CallClient, appMessageFromRestApiAsJson jsonData: Data) { }`

  * Transcription property `tier` has been deprecated. Use `model` instead. See [https://developers.deepgram.com/docs/model](https://developers.deepgram.com/docs/model).
  * Fixed a logging-related crash (stack overflow) that could occur when rapidly starting and stopping the SDK.

  ### 0.23.0

  Added `callConfig` field to `CallJoinData`

  ### 0.22.0

  * Added new metrics that will allow us to better understand the meeting quality.
  * Fixed an issue to show the correct state when the mic is muted remotely.
  * Fixed network stats to use `Float64` and `Int64` data types to improve precision.

  ## daily-python

  ### 0.11.0

  #### Added

  * Added `callerId` field to `DialoutSettings`.
  * Added `CallClient.start_live_stream()`, `CallClient.stop_live_stream()`,
    `CallClient.update_live_stream()`, `CallClient.add_live_streaming_endpoints()`
    and `CallClient.remove_live_streaming_endpoints()`.
  * Added `EventHandler.on_live_stream_updated()`.
  * Added support for specifying custom TURN servers via
    `CallClient.set_ice_config()`.
  * Added support for specifying a proxy URL via `CallClient.set_proxy_url()`.
  * Added missing dialin/dialout handlers in `daily.pyi`.
  * `EventHandler.on_dialin_answered` should be
    `EventHandler.on_dialout_answered`.

  #### Changed

  * Transcription property `tier` has been deprecated. Use `model` instead.
    See [https://developers.deepgram.com/docs/model](https://developers.deepgram.com/docs/model)

  #### Fixed

  * Fixed an issue that caused app messages sent from the REST API to not be
    received correctly.
  * Fixed `daily.pyi` type completions.
  * Fixed a crash caused by passing non-serializable data to
    `CallClient.send_app_message`.

  #### Release notes

  These releases contain a few small features and bugfixes. For more information, check out the [release notes](https://github.com/daily-co/daily-python/releases).

  ## daily-react

  ### 0.21.0

  **2 Breaking changes**

  * Removed `recoilRootProps` from [`DailyProvider`](/reference/daily-react/daily-provider) as we've internally migrated from Recoil to [Jotai](https://jotai.org/).
    * Improved Jotai state atoms for reduced CPU and memory usage.
    * Added `jotai` as peer dependency
  * Added `jotaiStore` prop to `DailyProvider`, which, when passed with a Jotai store, is equivalent to passing `recoilRootProps={{ override: false }}` in previous versions.

  ### 0.20.0

  The 0.20.0 requires [@daily-co/daily-js@>=0.68.0](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-07-18-0.68.0).

  * [`useAudioLevelObserver()`](/reference/daily-react/use-audio-level-observer): new hook to handle participant mic volume levels. This hook is based on audio level observers in daily-js. [`useAudioLevel()`](/reference/daily-react/use-audio-level) is now deprecated. Use `useAudioLevelObserver()` instead.
  * [`useParticipantIds()`](/reference/daily-react/use-participant-ids): the fix to avoid potential stale state introduced in [0.19.1](https://github.com/daily-co/daily-react/releases/tag/daily-react-2024-06-27-0.19.1) was reverted, due to negative performance impact. Instead stale state is now avoided by prioritizing internal event handlers in Daily React over application level event handlers.

  ## Daily Prebuilt

  ### Improvements and fixes

  * Allow custom buttons to have active states
  * Allow changing hover color in Prebuilt UI
  * Fixed text overlapping with chat in breakout rooms
  * Prebuilt chat resizes as per content
  * Cam and Mic icons are now hidden when `canSend` is set to `false`
  * Added support for new `enable_shared_chat_history` domain and room properties, which controls whether newly-joined participants can see chat history from before they joined.
  * Added Danish language support to Prebuilt.
  * Allow users to override userMediaAudioConstraints when using Prebuilt.

  ## Media Services

  ### Dial-in & Dial-out

  * Added support for SIP Dial-in to automatically start a room when no user is present in Daily room
  * Add webhooks for dialout and dialin events
  * Added support for creating room when initiating PSTN or SIP dialout via REST API.
  * Reduced the room creation time when SIP/PSTN properties are set in the domain or room properties
  * Participant joined event fires for dial-out
  * Allow setting `user_id` in startDialOut
  * Send dialin-ready as soon as participant join
  * Add ability to configure dialin IVR message
  * Exposed custom SIP headers in `dialin-connected`
  * Added support for SIP REFER after the call is connected

  ### Recording and Live streaming

  * Close the recording on meeting move
  * Fixed a bug in recordings API: `totalParticipant` should include all the participants

  ### VCS

  * Prevent transcription messages from being printed twice in VCS recordings/streams
  * VCSRender rounded corners for video layers
  * Released in beta a new VCS pipeline that performs 4x-5x better. Will eventually replace the current pipeline. No customer action is needed.
  * VCS WebFrame renders at correct aspect ratio when embedded in the dominant layout mode using the param `videoSettings.dominant.includeWebFrame`
  * Ensure WebFrame is immediately loaded when params are passed in startLiveStreaming / startRecording

  ### Batch processor

  * Fix the default path for soap-note/summarize
  * Custom prompts have a length limit
  * Added setting a transcription\_template
  * Tag each live transcription request with transcriptId
  * Add `updateTranscription` API across all SDKs and APIs
  * Fix formatting of speaker identification tags in WebVTT output of transcriptions
</Update>

<Update label="July 5, 2024">
  daily-js improves the precall network test method and adds support for multiple call instances.

  ## Overview

  `daily-js` upgrades its precall method to allow for easier and more accurate network performance estimates before joining a call. Also, `daily-js` and `react-native-daily-js` both add early support to build with multiple call instances. Lastly, dial-in and dial-out support more capabilities.

  ## daily-js

  ### 0.67.0

  #### Pre-beta: Multiple call instances

  We've added pre-beta support for using multiple call instances within the same browser window context. You can opt-in to using this feature by setting `allowMultipleCallInstances` to `true` in your Daily constructor properties.

  #### New precall test method

  The new [`testCallQuality()`](/reference/daily-js/instance-methods/test-call-quality) method allows you assess a client's network performance before joining a call. The results returned by this test provide a measurement of the available outgoing bitrate, packet loss, latency, and round trip time. These values provide information to set appropriate send settings before a user joins their call. To learn more about this method, check out the [docs](/reference/daily-js/instance-methods/test-call-quality).

  #### Release notes

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-07-02-0.67.0).

  ### 0.66.0

  #### Bugfixes

  * Fixed an issue where the call machine was not loading inside webviews on iOS 16.
  * Improved handling of an underlying Chrome bug with regards to screensharing. We have witnessed issues when sharing a tab with audio on Chrome where the audio track will end when switching which tab is shared using Chrome’s built-in “Share this tab instead” button. Previously, when this happened we would end the screenshare. Now, we will send a `nonfatal-error` (see example below) but will not end the screenshare so that video can continue. However, a user will have to restart the screenshare in order to recover audio. We have [filed an issue with Chromium](https://issues.chromium.org/issues/344876285).

  ```json theme={null}
  {
    "action": "nonfatal-error",
    "type": "screen-share-error",
    "errorMsg": "Error with ScreenShare audio",
    "details": {
      "sourceError": "audio track ended unexpectedly"
    }
  }
  ```

  ## react-native-daily-js

  ### 0.65.0

  #### Pre-beta: Multiple call instances

  We've added pre-beta support for using multiple call instances within the same browser window context. You can opt-in to using this feature by setting `allowMultipleCallInstances` to `true` in your Daily constructor properties.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-07-02-0.65.0).

  ## daily-android

  ### 0.21.0

  #### Advanced firewall controls

  `daily-android` now supports an IP proxy and the ability to override Daily's TURN servers with your own. These new features will help customers who have users in a locked down network environment. Rather than provide an extensive allow list, these new features can help simplify the network requirements for your customers' environment.

  [Contact us](https://www.daily.co/company/contact/support/) to learn more.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md#0210---2024-06-25).

  ## daily-ios

  ### 0.21.0

  #### Advanced firewall controls

  `daily-ios` now supports an IP proxy and the ability to override Daily's TURN servers with your own. These new features will help customers who have users in a locked down network environment. Rather than provide an extensive allow list, these new features can help simplify the network requirements for your customers' environment.

  [Contact us](https://www.daily.co/company/contact/support/) to learn more.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md#0210---2024-06-25).

  ## daily-python

  ### 0.10.0, 0.10.1

  #### Release notes

  These releases contain a few small features and bugfixes. For more information, check out the [release notes](https://github.com/daily-co/daily-python/releases).

  ## daily-react

  ### 0.19.1

  #### Bugfixes

  * [`useParticipantIds()`](/reference/daily-react/use-participant-ids): when using a custom `filter` or `sort` it was possible that `useParticipantIds()` would return stale state until a `participant-updated` event was emitted.
  * [`useActiveSpeakerId()`](/reference/daily-react/use-active-speaker-id): the internally stored id of the last active speaker is now correctly reset when receiving a `left-meeting` event.
  * [`useParticipantProperty()`](/reference/daily-react/use-participant-property): when embedding a Daily React app inside Angular's NgZone, attempting to resolve a `MediaStreamTrack` property could result in a recursive loop, due to NgZone's monkey-patching behavior on certain browser objects.

  ## Daily Prebuilt

  ### Improvements and fixes

  * Improved the handling of audio when receiving an incoming call for iOS 16 users.
  * Fixed an issue where raising and lowering hands wasn't immediately visible in the UI.
  * Fixed an issue where the call machine was not loading inside the webview on iOS 16.

  ## Media Services

  ### Dial-in & Dial-out

  * Added domain config `pin_dialin`,which allows assigning phone numbers for pin dial-in.
  * Added the `/release-phone-number/:id` endpoint to delete a purchased phone number.
  * Added a new `dialout-answered` event, which is emitted when a call is answered.

  ### VCS

  * Added more audio-specific options for the VCS simulator (make audio-only participant dominant, and associate with screenshare track)
  * VCS baseline composition bug fixes for audio-only participants with the dominant flag set (i.e. active speaker): dominant mode + `preferScreenshare` now works as expected
  * Fixed the inconsistent behavior with `preferScreenshare` when in grid mode and the VCS baseline comp param `videoSettings.grid.useDominantForSharing` is enabled
  * New VCS param `'videoSettings.pip.includeWebFrame'` allows WebFrame content to be automatically included as the primary content in the pip (picture-in-picture) layout mode

  ### Batch processor

  * Batch processor returns a specific error if input audio is silent
  * Batch processor now uses the remux-mp4 operation to process recordings over 2GB in size

  ## Additional

  * Fixed an issue where the `/meetings` REST endpoint no longer returned info for deleted rooms if the request included a room name.
  * The oldest supported version of `daily-js` is now 0.57.0.
</Update>

<Update label="June 5, 2024">
  Daily’s client SDKs add support for a number of top feature requests as well as continue to add support for phone and SIP use cases.

  ## Overview

  In May, we were busy extending support for SIP, dial-in, and dial-out use cases. Additionally, we've continued to round out our client SDKs with the top feature requests from Q1 of this year, including:

  * Adding zoom and flashlight controls to `daily-ios`
  * Adding the ability to cycle cameras with `daily-js`
  * Dynamically control screen share audio and video tracks with `daily-js`

  ...and more! Check out the changelog below for details.

  ## daily-js

  ### 0.65.0

  #### Cycle cameras on mobile browsers

  To help users more easily cycle through front and back cameras on their mobile devices, we've added a new method called [`cycleCamera()`](/reference/daily-js/instance-methods/cycle-camera). For example, to cycle, you can simply call `cycleCamera({ preferDifferentFacingMode: true })`.

  #### SIP: Dial-in ready event

  If you're building a SIP-enabled workflow, your `daily-js` clients now have the ability to determine when a SIP room is ready by listening to the `dialin-ready` event.

  #### Release notes

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-05-23-0.65.0).

  ### 0.64.0

  #### Control screen share audio and video

  Screen sharing now supports the ability to control the screenAudio and screenVideo track states. For example, this functionality allows you to mute a screen share's audio while allowing the video to continue playing. Check out the [`updateScreenShare()`](/reference/daily-js/instance-methods/update-screen-share) to learn more.

  #### Prevent meeting token abuse

  We've introduced a new [domain](/reference/rest-api/domain/get-domain-config#response-config-enforce-unique-user-ids) and [room](/reference/rest-api/rooms/get-room#response-config-enforce-unique-user-ids) property called `enforce_unique_user_ids`. Setting this to `true` along with usage of setting user\_id’s on tokens will enforce that only one participant with a given user\_id can be in a call at once, securing against token sharing. Note: If someone joins with an id already in use, they will be allowed in and the existing participant will be ejected, receiving an [`error` event](/reference/daily-js/events/error-events#error) of a type `'ejected'`.

  #### Release notes

  To learn more about the release, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-05-07-0.64.0).

  ## react-native-daily-js

  ### 0.63.0

  #### Receive settings for custom tracks

  If you're using custom tracks in your `react-native-daily-js`, you can now control the receive settings with the [`updateReceiveSettings()`](/reference/react-native/instance-methods/update-receive-settings) method.

  #### SIP: Dial-in ready event

  If you're building a SIP-enabled workflow, your `daily-js` clients now have the ability to determine when a SIP room is ready by listening to the `dialin-ready` event.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-05-23-0.63.0).

  ### 0.62.0

  #### Control screen share audio and video

  Screen sharing now supports the ability to control the screenAudio and screenVideo track states. For example, this functionality allows you to mute a screen share's audio while allowing the video to continue playing. Check out the [`updateScreenShare()`](/reference/react-native/instance-methods/update-screen-share) to learn more.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-05-07-0.62.0).

  ## daily-android

  ### 0.20.0

  #### Release notes

  This release contains a number of bugfixes. For more information, check out the [release notes](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md#0200---2024-05-14).

  ## daily-ios

  ### 0.20.0

  #### Zoom and flashlight controls

  `daily-ios` now provides native controls to turn on the flashlight and control the camera zoom. You can control both using the [`updateInputs()`](https://reference-ios.daily.co/documentation/daily/callclient/updateinputs\(_:\)) method. We've also provided convenience methods making it easier to control the camera and flashlight:

  * Camera zoom control convenience method: [`CallClient.setCameraZoom()`](https://reference-ios.daily.co/documentation/daily/callclient/setcamerazoom\(_:completion:\))
  * Flashlight control convenience method: [`CallClient.setCameraTorch()`](https://reference-ios.daily.co/documentation/daily/callclient/setcameratorch\(_:completion:\))

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md#0200---2024-05-14).

  ## daily-python

  ### 0.9.0, 0.9.1

  #### Release notes

  These releases contains a number of bugfixes. For more information, check out the [release notes](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md#090---2024-05-28).

  ### 0.8.0

  #### Dial-in events

  `daily-python` added support for a number of dial-in events:

  * `dialin-ready`
  * `dialout-connected`
  * `dialout-stopped`
  * `dialout-error`
  * `dialout-warning`

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md#080---2024-05-23).

  ## daily-react

  ### 0.19.0

  #### useCallFrame updated

  * ⚠️ **Breaking change**: [`useCallFrame`](/reference/daily-react/use-call-frame): Instead of accepting the resolved value for a given `parentEl`, it will now accept a React Ref `parentElRef`. This generally improves the DX when working with conditionally rendered call frame wrappers.

  ```js theme={null}
  // Before
  const ref = useRef(null);
  const callFrame = useCallFrame({
    parentEl: ref.current,
  });

  // Now
  const ref = useRef(null);
  const callFrame = useCallFrame({
    parentElRef: ref,
  });
  ```

  * Removed unnecessary `playsInline` attributes from rendered [`<audio>`](/reference/daily-react/daily-audio-track) elements
  * Updated devDependencies

  ## Daily Prebuilt

  ### Disable PiP support in Safari

  Daily Prebuilt is disabling Picture-in-Picture support for Safari users. Safari does not sufficiently support Picture-in-Picture functionality, which results in Safari crashing for users when a video stream ends. We will investigate reintroducing this feature for Safari in later versions.

  ### Improvements and fixes

  * Fixed an issue where the Prebuilt client could stop subscribing to remove videos.
  * Fixed an issue where background effects were not working for browsers with WebGL disabled.
  * Fixed an issue where some users were not able to download the call object bundle, which prevented them from joining a Prebuilt call.

  ## Media Services

  ### Dial-in & Dial-out

  * Added support for pinless dial-in.

  ### VCS

  * In the VCS baseline composition, long participant labels are now truncated with ellipsis when space is tight.
  * Fixed an issue with VCS dominant mode preferScreenshare.
  * New VCS param `'videoSettings.dominant.includeWebFrame'` allows WebFrame content to be automatically included in the dominant layout mode.

  ## Webhooks

  * Added support to enable multiple webhooks for a domain. [Contact us](https://www.daily.co/company/contact/support/) to learn more.

  ## Dashboard

  * Fixed a bug where session logs would appear to overlap one another.

  ## Additional

  * Added REST API for ejecting and banning users by user\_id. See [`/rooms/:name/eject`](/reference/rest-api/rooms/session/eject) for more information.
  * The oldest supported version of `daily-js` is now 0.55.0.
</Update>

<Update label="May 1, 2024">
  Daily Adaptive Bitrate comes to daily-ios, daily-android, react-native-daily-js and is now the default setting for daily-js 1:1 calls.

  ## Overview

  In the month of April, we've been busy adding Daily Adaptive Bitrate support to all of our client libraries. [Check out our announcement post](https://www.daily.co/blog/introducing-daily-adaptive-bitrate/) to learn more.

  Related, Daily Adaptive Bitrate is now the default configuration for 1:1 calls on daily-js.

  In addition, we've shipped a number of smaller features to all platforms and have continue to improve the reliability and performance of our products and platform. Check out the release notes below for more details.

  ## daily-js

  ### 0.63.0

  #### Count faces found within a camera stream

  We added the ability to detect the number of faces that appear in a camera stream. To use this, set [`"face-detection"`](/reference/daily-js/instance-methods/update-input-settings#video-processor) as a the video processor type when calling `updateInputSettings()`. When a face is detected a [`face-counts-updated`](/reference/daily-js/events/media-events#face-counts-updated) event is emitted.

  #### Release notes

  This release contained a number of bug fixes and package upgrades to resolve security issues. For more information, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-04-25-0.63.0).

  ### 0.62.0

  #### Highlights

  * Daily Adaptive Bitrate is now available as a beta for multi-party calls. [Contact us](https://www.daily.co/company/contact/support/) to get started.
  * `daily-js` has updated the browser versions it supports. Check out this [page](/reference/daily-js/static-methods/supported-browser) to learn about the latest update. Also, this update means that `daily-js` no longer supports [Plan B browsers](https://webrtc.github.io/webrtc-org/web-apis/chrome/unified-plan/).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-04-04-0.62.0).

  ### 0.61.1

  #### Release notes

  This release contains a number of small features, bug fixes, and package upgrades. For more information, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-03-22-0.61.1).

  ## react-native-daily-js

  ### 0.61.0

  #### Daily Adaptive Bitrate now available

  Daily Adaptive Bitrate is now available for 1:1 calls on `react-native-daily-js`. [Read more about Daily Adaptive Btirate](https://www.daily.co/blog/introducing-daily-adaptive-bitrate/).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-04-25-0.61.0).

  ### 0.60.0

  #### Get local and remove audio levels

  We've added new audio level APIs, which provide to you the local client's and remote participants' audio levels. These APIs efficiently retrieve audio levels, so that you can add audio level animation to your UI.

  To get started, check out these methods:

  * [`startLocalAudioLevelObserver()`](/reference/react-native/instance-methods/start-local-audio-level-observer)
  * [`stopLocalAudioLevelObserver()`](/reference/react-native/instance-methods/stop-local-audio-level-observer)
  * [`getLocalAudioLevel()`](/reference/react-native/instance-methods/get-local-audio-level)
  * [`startRemoteParticipantsAudioLevelObserver()`](/reference/react-native/instance-methods/start-remote-participants-audio-level-observer)
  * [`stopRemoteParticipantsAudioLevelObserver()`](/reference/react-native/instance-methods/stop-remote-participants-audio-level-observer)
  * [`getRemoteParticipantsAudioLevel()`](/reference/react-native/instance-methods/get-remote-participants-audio-level)

  and events:

  * [`local-audio-level`](/reference/react-native/events/media-events#local-audio-level)
  * [`remote-participants-audio-level`](/reference/react-native/events/media-events#remote-participants-audio-level)

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-04-04-0.60.0).

  ## daily-android

  ### 0.19.0

  #### Added a local audio level observer

  `daily-android` now adds support to retrieve the local audio level from the local client. With the existing remote audio level observer, you can now retrieve audio from all participants in a call, so that your app can display an animation driven by client audio levels.

  To get started check out:

  * [`startLocalAudioLevelObserver()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/start-local-audio-level-observer.html?query=fun%20startLocalAudioLevelObserver\(intervalMs:%20Long?%20=%20null,%20listener:%20RequestListener?%20=%20null\))
  * [`stopLocalAudioLevelObserver()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/stop-local-audio-level-observer.html?query=fun%20stopLocalAudioLevelObserver\(listener:%20RequestListener?%20=%20null\))

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md#0190---2024-04-16).

  ### 0.18.0

  #### Daily Adaptive Bitrate now available

  Daily Adaptive Bitrate is now available for 1:1 calls on `daily-android`. [Read more about Daily Adaptive Btirate](https://www.daily.co/blog/introducing-daily-adaptive-bitrate/).

  Get started by setting `allowAdaptiveLayers` when calling `updatePublishing`. For example:

  ```
  callClient?.updatePublishing(
      PublishingSettingsUpdate(
          camera = CameraPublishingSettingsUpdate(
              sendSettings = VideoSendSettingsUpdate(
                  allowAdaptiveLayers = Enable()
              )
          )
      )
  )
  ```

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md#0180---2024-03-28).

  ## daily-ios

  ### 0.19.0

  #### Added a local audio level observer

  `daily-ios` now adds support to retrieve the local audio level from the local client. With the existing remote audio level observer, you can now retrieve audio from all participants in a call, so that your app can display an animation driven by client audio levels.

  To get started check out:

  * [`startLocalAudioLevelObserver()`](https://reference-ios.daily.co/documentation/daily/callclient/startlocalaudiolevelobserver\(intervalms:\))
  * [`stopLocalAudioLevelObserver()`](https://reference-ios.daily.co/documentation/daily/callclient/stoplocalaudiolevelobserver\(interval:\))

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md#0190---2024-04-16).

  ### 0.18.0

  #### Daily Adaptive Bitrate now available

  Daily Adaptive Bitrate is now available for 1:1 calls on `daily-ios`. [Read more about Daily Adaptive Btirate](https://www.daily.co/blog/introducing-daily-adaptive-bitrate/).

  Get started by setting `allowAdaptiveLayers` when calling `updatePublishing`. For example:

  ```
  self.callClient.updatePublishing(.set(
      camera: .set(
          isPublishing: .set(self.cameraIsPublishing),
          sendSettings: .set(
              allowAdaptiveLayers: .set(true)
          )
      )
  ), completion: nil)
  ```

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md#0180---2024-03-28).

  ## daily-python

  ### 0.7.2 through 0.7.4

  #### Release notes

  These releases contain a number of bugfixes. For more information, check out the [release notes](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md#070---2024-02-29).

  ## daily-react

  ### 0.18.0

  * Adds `onTranscriptionMessage` to [`useTranscription()`](/reference/daily-react/use-transcription) and deprecates `onTranscriptionAppData`

  This adds a behavioral change in how transcription messages are handled, when interim results were configured. In order to distinguish interim from final results, transcription needs to be configured with `includeRawResponse: true`. See [`startTranscription()`](/reference/daily-js/instance-methods/start-transcription) for details.

  ## Daily Prebuilt

  ### Improvements and fixes

  * Issued a fix for state mismatch issues in breakout rooms between different hosts and clients
  * We've added support for custom avatar images, which can be added by including an `avatar` property when setting `userData`:

  ```
  Daily.createFrame(parentEl, {
    // ...
    userData: {
      avatar: 'https://example.com/avatar.jpg',
    }
  );
  ```

  ## Media Services

  * (Auto-recording)\[/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-start-cloud-recording] parameter can now start raw tracks.
  * The value of `room-peers` is now sent to the VCS server.
  * VCS now supports zipped assets in the session asset loader.

  ### Dial-in & Dial-out

  * If a dial-out number is purchased for the domain, allow user to use that number for dial-in as well.
  * SIP now supports multiple instances for dial-in.
  * CallerID now supports unverified numbers.

  ## Webhooks

  * Added support for two new webhooks: [`batch-processor.job-finished`](/reference/rest-api/webhooks/events/batch-processor-job-finished) and [`batch-processor.error`](/reference/rest-api/webhooks/events/batch-processor-error).

  ## Additional

  * The oldest supported version of `daily-js` is now 0.53.0.
  * Increased the rate limit of internal methods to support higher frequency of the `testWebhookConnectivity()` method.
</Update>

<Update label="March 19, 2024">
  Daily’s client SDKs add a number of new features including camera zoom and flashlight control on Android, VAD on Python, and two new participant events for webhooks.

  ## Overview

  The latest releases include the following highlights:

  * `daily-android` adds camera zoom and flashlight control and custom tracks are now generally available.
  * `daily-ios` adds new custom track methods and custom tracks are now generally available.
  * `daily-python` now supports native Voice Activity Detection (VAD) to enable building voice AI applications.
  * Two new participant webhooks are added, indicating when a participant joins and leaves a session.

  ## daily-js

  ### 0.60.0

  #### Highlights

  * If you're using Daily to dial out from your calls, you can now specify the [`displayName`](/reference/daily-js/instance-methods/start-dial-out#parameters).
  * We fixed an issue where base64 data URLs were failing when used in [`updateInputSettings()`](/reference/daily-js/instance-methods/update-input-settings).
  * We've added the ability to *disable* the microphone when it's muted using a new `forceDiscardTrack` option for [`setLocalAudio(false)`](/reference/daily-js/instance-methods/set-local-audio). This option will enforce Daily to discard the track along with muting the mic. Doing so will have the effect of turning off mic-in-use indicators. While this sounds ideal, **this flag should be used cautiously**. By default, we do not discard the microphone track because unmuting requires re-fetching the track and introduces a delay that likely clips the start of someone talking. Popular web based video calling services do not use this. We've added this capability for use cases where users are connected to a Daily session for a very long time and they aren't speaking (e.g. a virtual work or office).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-03-06-0.60.0).

  ## react-native-daily-js

  ### 0.58.0

  #### Highlights

  * If you're using Daily to dial out from your calls, you can now specify the `displayName`.
  * We've added the ability to *disable* the microphone when it's muted using a new `forceDiscardTrack` option for [`setLocalAudio(false)`](/reference/react-native/instance-methods/set-local-audio). This option will enforce Daily to discard the track along with muting the mic. Doing so will have the effect of turning off mic-in-use indicators. While this sounds ideal, **this flag should be used cautiously**. By default, we do not discard the microphone track because unmuting requires re-fetching the track and introduces a delay that likely clips the start of someone talking. Popular web based video calling services do not use this. We've added this capability for use cases where users are connected to a Daily session for a very long time and they aren't speaking (e.g. a virtual work or office).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-03-06-0.58.0).

  ## daily-android

  ### 0.17.0

  #### Zoom and flashlight controls

  `daily-android` now provides native controls to turn on the flashlight (introduced in 0.16.0) and control the camera zoom. You can control both using the [`updateInputs()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/update-inputs.html) method. We've also provided convenience methods making it easier to control the camera and flashlight:

  * Camera zoom control convenience method: [`CallClient.setCameraZoom()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/set-camera-zoom.html)
  * Flashlight control convenience method: [`CallClient.setCameraTorch()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/set-camera-torch.html)

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md#0170---2024-03-07).

  ### 0.16.0

  #### Custom tracks are now GA

  Custom tracks for `daily-android` are now generally available. In this first GA release, here are the highlights:

  * `CallClient.beta.addCustomVideoTrack()` has been deprecated, in favor of [`CallClient.addCustomVideoTrack()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/add-custom-video-track.html).
  * We've added the ability to remove and update custom tracks, using [`CallClient.updateCustomVideoTrack()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/update-custom-video-track.html) and [`CallClient.removeCustomVideoTrack()`](https://reference-android.daily.co/daily-android/co.daily/-call-client/remove-custom-video-track.html).

  #### HIPAA: User analytics improvements

  For customers with HIPAA compliance enabled for their account, you can now set a user's `user_id` to a [UUID](https://www.ietf.org/rfc/rfc4122.txt) using a meeting token. Since this UUID doesn't contain and PHI or PII, it can be stored by Daily. Using this UUID, you can map between the Daily call and tracking you have for that individual to provide better troubleshooting support, usage tracking, and analytics. You can read more about this in our [docs](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-user-id).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-android/blob/main/CHANGELOG.md#0160---2024-02-26).

  ## daily-ios

  ### 0.17.0

  #### Added

  * Add support for an `audio-only` recording layout preset.
  * Add transcription management features:
    * New `CallClient` methods:
      * [`startTranscription(withSettings:completion:)`](https://reference-ios.daily.co/documentation/daily/callclient/starttranscription\(withsettings:completion:\)) and [`startTranscription(withSettings:)`](https://reference-ios.daily.co/documentation/daily/callclient/starttranscription\(withsettings:\))
      * [`stopTranscription(completion:)`](https://reference-ios.daily.co/documentation/daily/callclient/stoptranscription\(completion:\)) and [`stopTranscription()`](https://reference-ios.daily.co/documentation/daily/callclient/stoptranscription\(\))
    * New delegate methods:
      * `callClient(_:transcriptionStarted:)`
      * `callClient(_:transcriptionStoppedBy:)`
      * `callClient(_:transcriptionError:)`
  * Add `rawResponse` field to `TranscriptionMessage`. It's included if `includeRawResponse` was specified when starting the transcription

  #### Fixed

  * Fixed an issue that could cause join to fail if recording/transcription/live stream was started from the REST API.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md#0170---2024-03-07).

  ### 0.16.0

  #### Custom tracks are now GA

  Custom tracks for `daily-ios` are now generally available. In this first GA release, here are the highlights:

  * We've added the ability to add, remove, and update custom tracks, using:
    * [`CallClient.addCustomVideoTrack()`](https://reference-ios.daily.co/documentation/daily/callclient/addcustomvideotrack\(name:source:\))
    * [`CallClient.removeCustomVideoTrack()`](https://reference-ios.daily.co/documentation/daily/callclient/removecustomvideotrack\(name:\))
    * [`CallClient.updateCustomVideoTrack()`](https://reference-ios.daily.co/documentation/daily/callclient/updatecustomvideotrack\(name:source:\))

  #### HIPAA: User analytics improvements

  For customers with HIPAA compliance enabled for their account, you can now set a user's `user_id` to a [UUID](https://www.ietf.org/rfc/rfc4122.txt) using a meeting token. Since this UUID doesn't contain and PHI or PII, it can be stored by Daily. Using this UUID, you can map between the Daily call and tracking you have for that individual to provide better troubleshooting support, usage tracking, and analytics. You can read more about this in our [docs](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-user-id).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-client-ios/blob/main/CHANGELOG.md#0160---2024-02-26).

  ## daily-python

  ### 0.7.0, 0.7.1

  #### Voice Activity Detection (VAD)

  `daily-python` now includes built-in voice activity detection (VAD). This advanced feature enhances applications by accurately identifying when human speech is occurring, making it particularly beneficial in noise-rich environments. VAD is pivotal for developers building voice integrations with Large Language Model (LLM) agents, ensuring seamless and efficient interactions by initiating processing only when actual speech is detected.

  #### Completion callbacks change

  ⚠️ Breaking change ⚠️: Completion callbacks now receive only the necessary arguments. For example, before `CallClient.leave(completion=...)` completion callback would receive `(None, Error | None)` arguments when it should only receive `(Error | None)`. Check out the release notes for more information.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-python/blob/main/CHANGELOG.md#070---2024-02-29).

  ## daily-react

  ### 0.17.3

  * Fixed an issue where [`useTranscription()`](/reference/daily-react/use-transcription) returned `isTranscribing: true` after a meeting ended.
  * Fixed an issue where [`useActiveSpeakerId()`](/reference/daily-react/use-active-speaker-id) unnecessarily initialized its state with `null`, when an active speaker id was already present.
  * Fixed an issue where [`useAudioLevel()`](/reference/daily-react/use-audio-level) broke echo cancellation in Firefox, due to unintentionally playing out an audio track when it was meant to be analyzed only.

  ## Daily Prebuilt

  ### Improvements and fixes

  * Mobile users now see higher resolution and frame rate for the active speaker on page one.
  * Fixed an infrequent issue where it was possible to encounter a CORS error when trying to join a call.
  * Fixed an issue where some Safari users would see translation keys instead of text in the UI.
  * Fixed an issue on mobile where Daily Prebuilt would render a custom button light mode icon when the device was in dark mode.
  * Fixed an issue where after applying a custom virtual background and switching to "None", Daily Prebuilt still applied the original custom background when the page refreshes.

  #### Features and improvements

  ## Media Services

  ### Batch Processor

  * Added Swedish language support.

  ### Dial-in & Dial-out

  * Added verified caller IDs for outbound calls.

  ## Webhooks

  * Added two new webhooks events: [`participant.joined`](/reference/rest-api/webhooks/events/participant-joined) and [`participant.left`](/reference/rest-api/webhooks/events/participant-left)
  * Added a new retry configuration for webhooks. You now have the option for: 1) a circuit breaker, 2) exponential retry per message.
  * Added support to provide an HMAC to the [`'POST /webhooks'`](/reference/rest-api/webhooks/create-webhook) and [`'POST /webhooks/:id'`](/reference/rest-api/webhooks/update-webhook) endpoints, instead of using an on-demand generated secret.

  ## Additional

  * The oldest supported version of `daily-js` is now 0.51.0.
</Update>

<Update label="February 22, 2024">
  Daily Prebuilt and daily-js now support Adaptive Bitrate, which automatically optimizes the quality of your calls.

  ## Overview

  In this release, we've shipped two new features:

  * Daily Adaptive Bitrate (Early access) for 1:1 calls
  * Live captions for Daily Prebuilt
  * Improved user analytics for HIPAA compliant customers

  ## daily-js

  ### 0.59.0

  #### HIPAA: User analytics improvements

  For customers with HIPAA compliance enabled for their account, you can now set a user's `user_id` to a [UUID](https://www.ietf.org/rfc/rfc4122.txt) using a meeting token. Since this UUID doesn't contain and PHI or PII, it can be stored by Daily. Using this UUID, you can map between the Daily call and tracking you have for that individual to provide better troubleshooting support, usage tracking, and analytics. You can read more about this in our [docs](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-user-id).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-02-22-0.59.0).

  ### 0.58.0

  ### Daily Adaptive Bitrate: Early Access

  Unlock enhanced video quality and performance with Daily Adaptive Bitrate, combining ultra-reliable calls and the best visual experience your network can offer—automatically adjusting in real-time to suit fluctuating bandwidth availability.

  During early access, Daily Adaptive Bitrate is available for 1:1 calls only. Multi-party call support will be available shortly. Check out the [early access docs](https://dailyco.notion.site/Daily-Adaptive-Bitrate-Early-Access-3d8950c6078e4dc6a33c57f96b8fc1dc?pvs=74) to get started now.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-02-09-0.58.0).

  ### 0.57.1-4

  #### Release notes

  We released `daily-js` 0.57.4, which includes a number of small bug fixes. For more information, check out the [release notes for 0.57.1 through 0.57.4](https://github.com/daily-co/daily-js/releases).

  ## react-native-daily-js

  ### 0.57.0

  #### HIPAA: User analytics improvements

  For customers with HIPAA compliance enabled for their account, you can now set a user's `user_id` to a [UUID](https://www.ietf.org/rfc/rfc4122.txt) using a meeting token. Since this UUID doesn't contain and PHI or PII, it can be stored by Daily. Using this UUID, you can map between the Daily call and tracking you have for that individual to provide better troubleshooting support, usage tracking, and analytics. You can read more about this in our [docs](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-user-id).

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-02-22-0.57.0).

  ### 0.56.0

  #### Release notes

  We released `react-native-daily-js` 0.56.0, which includes a PSTN features, bugfixes, and other improvements. For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-02-09-0.56.0).

  ### 0.55.2

  #### Release notes

  We released `react-native-daily-js` 0.55.2, which includes a few bugfixes. For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-01-30-0.55.2).

  ## daily-android

  ### 0.15.0

  #### Improvements

  * Added `participantId` field to `TranscriptionMessageData`.
  * Added `transcriptId` field to `TranscriptionStatus`.

  #### Bugfixes

  * Fixed multiple issues which could cause a deadlock during network reconnection.
  * Ensure that `updateInputs()` continues to be usable while the network is down.
  * Fixed an issue where the SDK could fail to release resources when turning off the camera track.
  * Fixed a crash which could occur if the network connection drops soon after joining.

  ## daily-ios

  ### 0.15.0

  #### Bugfixes

  * Fixed multiple issues which could cause a deadlock during network reconnection.
  * Ensure that updateInputs() continues to be usable while the network is down.
  * Fixed a crash which could occur if the network connection drops soon after joining.

  ## daily-python

  ### 0.6.3

  #### Release notes

  We released `daily-python` 0.6.2 and 0.6.3, which contain a number of audio quality improvements and bug fixes. For more information, check out the release notes:

  * [0.6.2](https://github.com/daily-co/daily-python/releases/tag/v0.6.2)
  * [0.6.3](https://github.com/daily-co/daily-python/releases/tag/v0.6.3)

  ## Daily Prebuilt

  #### Features and improvements

  * Added support for [Daily Adaptive Bitrate](https://dailyco.notion.site/Daily-Adaptive-Bitrate-Early-Access-3d8950c6078e4dc6a33c57f96b8fc1dc?pvs=74) for 1:1 calls.
  * Added support for live captions in Daily Prebuilt. To use this feature, you need to set [`enable_live_captions_ui`](/reference/rest-api/domain/get-domain-config#response-config-enable-live-captions-ui) to true for your domain or room and also ensure that transcriptions are configured to start, which you can read more about [here](/docs/guides/features/transcription#permissions).
  * Add an option to hide the screen share overlay, which appears for the screen sharer.

  #### Bugfixes

  * When a camera is turned back on, fix an issue where the video tile appears frozen while loading.
  * Fixed an issue where Prebuilt would get an undefined error when `useLegacyVideoProcessor` was not defined.
  * Fixed instructions when microphone access is blocked in Chrome 119+.

  ## Media Services

  ### Dial-in & Dial-out

  * Added support for a new method, [`sendDTMF()`](/reference/daily-js/instance-methods/send-dtmf), for transmitting DTMF signals during calls.
  * Added support for allowing PSTN dial-in and SIP-dial-in to run simultaneously in a room.

  ## Webhooks

  * Added two new webhooks events: [`meeting.started`](/reference/rest-api/webhooks/events/meeting-started) and [`meeting.ended`](/reference/rest-api/webhooks/events/meeting-ended).

  ## Dashboard

  * Enable live captions for Daily Prebuilt for either your entire domain or room using the dashboard setting called `Live Captions UI`.

  ## Additional

  * SFU mode is now the default calling mode. You can configure your domain or rooms for SFU calls by setting the [`sfu_switchover`](/reference/rest-api/rooms/update-room#body-properties-sfu-switchover) property.
  * Fixed an issue where `raw-tracks` recordings were not ending the recording after the `maxDuration` flag was set.
  * The oldest supported version of `daily-js` is now 0.50.0.
</Update>

<Update label="January 25, 2024">
  The latest update adds dial-in and dial-out support to Daily’s SDKs

  ## Overview

  Dial-in and dial-out is now supported on a number of Daily's SDKs. Check out our [guide](/docs/guides/features/dial-in-dial-out) to learn more.

  Also, we've made a number of smaller improvements, fixed a number of bugs, and improved performance. Check out the release notes below for more details.

  ## daily-js

  ### 0.57.0

  #### Dial-out

  In December, we launched dial-in. This time around, we're adding dial-out support. You can now dial-out from any Daily meeting to a user on their phone using `daily-js`. This feature is hot off the presses and will be added to [this guide page](/docs/guides/features/dial-in-dial-out) in the next few days.

  #### Background blur and effects available in Safari

  In December, we announced video processing as GA, and now we're adding support for Safari desktop. Use the [`supportedBrowser()` static method](/reference/daily-js/static-methods/supported-browser) to programmatically determine which browsers support video processing.

  #### New metrics and precall test changes

  `availableOutgoingBitrate` is now available in [`getNetworkStats()`](/reference/daily-js/instance-methods/get-network-stats). In addition, one of the precall test methods has been updated. Previously, the [`testConnectionQuality()`](/reference/daily-js/instance-methods/test-connection-quality) method was recommended to detect network connection quality. That method is now deprecated and is being replaced by a new test called `testPeerToPeerCallQuality()`. We're testing out a new method, called `testCallQuality()` that provides even more accurate information; that method is in pre-beta testing. If you're interested in learning more, let us know at `help@daily.co`.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/daily-js/releases/tag/daily-js-2024-01-24-0.57.0).

  ## react-native-daily-js

  ### 0.55.0

  #### Dial-out

  In December, we launched dial-in. This time around, we're adding dial-out support. You can now dial-out from any Daily meeting to a user on their phone using `react-native-daily-js`. This feature is hot off the presses and will be added to [this guide page](/docs/guides/features/dial-in-dial-out) in the next few days.

  #### New metrics and precall test changes

  `availableOutgoingBitrate` is now available in [`getNetworkStats()`](/reference/react-native/instance-methods/get-network-stats). In addition, one of the precall test methods has been updated. Previously, the [`testConnectionQuality()`](/reference/react-native/instance-methods/test-peer-to-peer-call-quality) method was recommended to detect network connection quality. That method is now deprecated and is being replaced by a new test called `testPeerToPeerCallQuality()`. We're testing out a new method, called `testCallQuality()` that provides even more accurate information; that method is in pre-beta testing. If you're interested in learning more, let us know at `help@daily.co`.

  #### Release notes

  For more information, check out the [release notes](https://github.com/daily-co/react-native-daily-js/releases/tag/react-native-daily-js-2024-01-24-0.55.0).

  ## daily-python

  ### 0.6.0

  #### Dial-out

  You can now dial-out using `daily-python`. This feature allows your `daily-python` client to call any user on the phone. For example, if you're building an AI agent, you can have that agent dial a user directly.

  #### Release notes

  For more information, check out the release notes:

  * [0.6.0](https://github.com/daily-co/daily-python/releases/tag/v0.6.0)
  * [0.6.1](https://github.com/daily-co/daily-python/releases/tag/v0.6.1)

  ## Daily Prebuilt

  #### Features and improvements

  * Added support for Speaker View in a breakout session.
  * Added support for using a custom background in your Daily Prebuilt call.

  #### Bugfixes

  * Fixed an issue where touch tablet devices, like Windows Surface devices, weren't displaying the A/V device change shortcut menus.

  ## Media Services

  ### VCS Features & Fixes

  * Added a new opacity prop on VCS Video element.
  * Added a new VCS param for `videoSettings.grid.fullScreenHighlightItemIndex` for fast switching to temporary full-screen mode and back when in grid mode.
  * Corrected the TypeScript definition for `layout.participants` in streaming / recording.

  ### Dial-in & Dial-Out

  * New guide and APIs detailing how to add dial-out to your Daily domain. See the [guide](/docs/guides/features/dial-in-dial-out) to learn more.

  ### Bugfixes

  * Fixed an issue where, when the batch processor finishes transmuxing files, it will now reupload files to the S3 bucket with the `Content-Disposition` to `inline` if `allow_streaming_from_bucket` is set.

  ## Dashboard

  * The REST API logs now have a retention limit that matches the call log retention limit. Both limits are based on your support plan. For longer retention periods, you can update using the developer dashboard or contact us at `help@daily.co`.

  ## Additional

  * Update generic `'Error during call'` meeting errors to now have more informative messages about what actually went wrong.
  * A new [`local-screen-share-canceled`](/reference/daily-js/events/media-events#local-screen-share-canceled) event was added, which triggers when a Chrome users initiates a screen share but closes the "Select a screen" Chrome menu before starting the screen share.
  * The oldest supported version of `daily-js` is now 0.48.0.
</Update>
