Skip to main content
Archived changelog entries from 2024. For the latest updates, see the changelog.
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

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.
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.
  • 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 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:
  • 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:
  • 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:
  • 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.
Please reach out to help@daily.co if you see otherwise.

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

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:
  • 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:
  • 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 and VideoMediaTrackSettingsUpdate docs for detailed usage.Example usage is available for reference in our Android demo app.

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.
  • 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 for available options.
Complete list of changes is available in ourchangelog

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.

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 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.
Complete list of changes is available in ourchangelog

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

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.
  • startDialOut() 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 that gets run as part of its prejoin UI. Check out the docs for more info.
  • 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.

0.70.0

  • Support for multiple simultaneous call client instances is now in beta. For more information, check out our new guide.
  • 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.

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.

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

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

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.

daily-react

0.21.0

2 Breaking changes
  • Removed recoilRootProps from DailyProvider as we’ve internally migrated from Recoil to Jotai.
    • 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.
  • useAudioLevelObserver(): new hook to handle participant mic volume levels. This hook is based on audio level observers in daily-js. useAudioLevel() is now deprecated. Use useAudioLevelObserver() instead.
  • useParticipantIds(): the fix to avoid potential stale state introduced in 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
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() 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.

Release notes

To learn more about the release, check out the release notes.

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.

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.

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 to learn more.

Release notes

For more information, check out the release notes.

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 to learn more.

Release notes

For more information, check out the release notes.

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.

daily-react

0.19.1

Bugfixes

  • useParticipantIds(): when using a custom filter or sort it was possible that useParticipantIds() would return stale state until a participant-updated event was emitted.
  • useActiveSpeakerId(): the internally stored id of the last active speaker is now correctly reset when receiving a left-meeting event.
  • useParticipantProperty(): 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.
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(). 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.

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() to learn more.

Prevent meeting token abuse

We’ve introduced a new domain and room 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 of a type 'ejected'.

Release notes

To learn more about the release, check out the release notes.

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() 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.

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() to learn more.

Release notes

For more information, check out the release notes.

daily-android

0.20.0

Release notes

This release contains a number of bugfixes. For more information, check out the release notes.

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() method. We’ve also provided convenience methods making it easier to control the camera and flashlight:

Release notes

For more information, check out the release notes.

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.

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.

daily-react

0.19.0

useCallFrame updated

  • ⚠️ Breaking change: useCallFrame: 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.
  • Removed unnecessary playsInline attributes from rendered <audio> 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 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 for more information.
  • The oldest supported version of daily-js is now 0.55.0.
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 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" as a the video processor type when calling updateInputSettings(). When a face is detected a 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.

0.62.0

Highlights

  • Daily Adaptive Bitrate is now available as a beta for multi-party calls. Contact us to get started.
  • daily-js has updated the browser versions it supports. Check out this page to learn about the latest update. Also, this update means that daily-js no longer supports Plan B browsers.

Release notes

For more information, check out the release notes.

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.

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.

Release notes

For more information, check out the release notes.

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:and events:

Release notes

For more information, check out the release notes.

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:

Release notes

For more information, check out the release notes.

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.Get started by setting allowAdaptiveLayers when calling updatePublishing. For example:

Release notes

For more information, check out the release notes.

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:

Release notes

For more information, check out the release notes.

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.Get started by setting allowAdaptiveLayers when calling updatePublishing. For example:

Release notes

For more information, check out the release notes.

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.

daily-react

0.18.0

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() 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:

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

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.
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.
  • We fixed an issue where base64 data URLs were failing when used in updateInputSettings().
  • We’ve added the ability to disable the microphone when it’s muted using a new forceDiscardTrack option for setLocalAudio(false). 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.

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

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() method. We’ve also provided convenience methods making it easier to control the camera and flashlight:

Release notes

For more information, check out the release notes.

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:

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

Release notes

For more information, check out the release notes.

daily-ios

0.17.0

Added

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.

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:

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

Release notes

For more information, check out the release notes.

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.

daily-react

0.17.3

  • Fixed an issue where useTranscription() returned isTranscribing: true after a meeting ended.
  • Fixed an issue where useActiveSpeakerId() unnecessarily initialized its state with null, when an active speaker id was already present.
  • Fixed an issue where useAudioLevel() 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

Additional

  • The oldest supported version of daily-js is now 0.51.0.
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 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.

Release notes

For more information, check out the release notes.

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 to get started now.

Release notes

For more information, check out the release notes.

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.

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

Release notes

For more information, check out the release notes.

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.

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.

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:

Daily Prebuilt

Features and improvements

  • Added support for Daily Adaptive Bitrate for 1:1 calls.
  • Added support for live captions in Daily Prebuilt. To use this feature, you need to set 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.
  • 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(), for transmitting DTMF signals during calls.
  • Added support for allowing PSTN dial-in and SIP-dial-in to run simultaneously in a room.

Webhooks

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 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.
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 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 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 to programmatically determine which browsers support video processing.

New metrics and precall test changes

availableOutgoingBitrate is now available in getNetworkStats(). In addition, one of the precall test methods has been updated. Previously, the testConnectionQuality() 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.

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 in the next few days.

New metrics and precall test changes

availableOutgoingBitrate is now available in getNetworkStats(). In addition, one of the precall test methods has been updated. Previously, the testConnectionQuality() 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.

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:

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