Improved recording recovery, support for virtual background and custom audio tracks on mobile SDKs, and various platform-wide improvements.
Fixed
Fixed a timing issue where calling
Deprecated Transcription
The transcription property
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.
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()andleave()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 adeviceId 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 callingupdateParticipant() 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
v2CamAndMicconfiguration 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
v2CamAndMicin your codebase, you can safely remove them.
Version Support Update
- The oldest supported version of
daily-jsis 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
useRoomExphook 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
- 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_CAMERApermission fromAndroidManifest.xmlwhen not needed. - Update
foregroundServiceTypeconfiguration to exclude camera when not required.
- It is recommended that developers remove
Fixed Global Event Listener Cleanup
- Added missing
removeEventListenerwhen 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.
daily-android
0.26.0
Background Effects Support
Added support for camera background blur and virtual background effects viaVideoProcessor:BackgroundBlur: Apply adjustable background blur (strength: 0.0 to 1.0).BackgroundImage: Replace background with an image from your assets directory.
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.
- Fixed
setTransform()crash withVideoTextureViewon older Android versions. - Renamed
org.webrtcpackage toco.daily.webrtcto avoid conflicts. - Updated subscription state method names for better clarity.
Fixed VideoTextureView Crash on Older Android Versions
Fixed a crash that occurred when usingVideoTextureView 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 newCallClientListener.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.
0.24.0
Added REST API App Message Support
Added newCallClientListener.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 propertytier 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.
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.
Daily Prebuilt
- Added
visualStateoption forcustomTrayButtonsgiving 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
userIdto dial-out webhook events. - Added
sessionIdto dial-in webhook events.
- Added
Transcription
display_namefor 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.followDomFlagis off.
Batch Processor
The Batch Processor API now uses the improvednova-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.
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 auserIdthat gets associated with all dial out events- Added a new
test-completedevent 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.
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 theinputSettingscall property) and made it available on desktop and mobile Safari. - Added a
networkThresholdproperty tocall.participants()objects and related events (e.g.participant-updated, etc.), showing their network quality.
0.69.0
- Fixed an issue in Chrome 127 where the video was freezing when applying background effects.
0.68.0
- New getter methods
isLocalAudioLevelObserverRunning()andisRemoteAudioLevelObserverRunning() - Exposing custom SIP headers received during the connection within the
dialin connectedevent. - Updated console deprecation warning for
testConnectionQuality()to point to daily’s preferred alternative oftestCallQuality(). - 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.
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
networkThresholdproperty tocall.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 inreact-native-daily-js 0.68.0.0.66.0
- New getter methods
isLocalAudioLevelObserverRunning()andisRemoteAudioLevelObserverRunning(). - 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.transcriptIdis now nullable, fixing an error where null values from the server would prevent the onTranscriptionStarted() callback from being invoked.- Transcription property
tierhas been deprecated. Usemodelinstead. 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
callConfigfield toCallJoinData. - The
VideoViewclass is now marked asopen.
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
tierhas been deprecated. Usemodelinstead. 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
AddedcallConfig field to CallJoinData0.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
Float64andInt64data types to improve precision.
daily-python
0.11.0
Added
- Added
callerIdfield toDialoutSettings. - Added
CallClient.start_live_stream(),CallClient.stop_live_stream(),CallClient.update_live_stream(),CallClient.add_live_streaming_endpoints()andCallClient.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_answeredshould beEventHandler.on_dialout_answered.
Changed
- Transcription property
tierhas been deprecated. Usemodelinstead. See 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.pyitype 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
recoilRootPropsfromDailyProvideras we’ve internally migrated from Recoil to Jotai.- Improved Jotai state atoms for reduced CPU and memory usage.
- Added
jotaias peer dependency
- Added
jotaiStoreprop toDailyProvider, which, when passed with a Jotai store, is equivalent to passingrecoilRootProps={{ 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. UseuseAudioLevelObserver()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
canSendis set tofalse - Added support for new
enable_shared_chat_historydomain 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_idin 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:
totalParticipantshould 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
updateTranscriptionAPI 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 settingallowMultipleCallInstances to true in your Daily constructor properties.New precall test method
The newtestCallQuality() 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 settingallowMultipleCallInstances 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 customfilterorsortit was possible thatuseParticipantIds()would return stale state until aparticipant-updatedevent was emitted.useActiveSpeakerId(): the internally stored id of the last active speaker is now correctly reset when receiving aleft-meetingevent.useParticipantProperty(): when embedding a Daily React app inside Angular’s NgZone, attempting to resolve aMediaStreamTrackproperty 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/:idendpoint to delete a purchased phone number. - Added a new
dialout-answeredevent, 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 +
preferScreensharenow works as expected - Fixed the inconsistent behavior with
preferScreensharewhen in grid mode and the VCS baseline comp paramvideoSettings.grid.useDominantForSharingis 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
/meetingsREST endpoint no longer returned info for deleted rooms if the request included a room name. - The oldest supported version of
daily-jsis 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
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 calledcycleCamera(). For example, to cycle, you can simply call cycleCamera({ preferDifferentFacingMode: true }).SIP: Dial-in ready event
If you’re building a SIP-enabled workflow, yourdaily-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 theupdateScreenShare() to learn more.Prevent meeting token abuse
We’ve introduced a new domain and room property calledenforce_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 yourreact-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, yourdaily-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 theupdateScreenShare() 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:- Camera zoom control convenience method:
CallClient.setCameraZoom() - Flashlight control convenience method:
CallClient.setCameraTorch()
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-readydialout-connecteddialout-stoppeddialout-errordialout-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 givenparentEl, it will now accept a React RefparentElRef. This generally improves the DX when working with conditionally rendered call frame wrappers.
- Removed unnecessary
playsInlineattributes 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/ejectfor more information. - The oldest supported version of
daily-jsis 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-jshas updated the browser versions it supports. Check out this page to learn about the latest update. Also, this update means thatdaily-jsno 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 onreact-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:startLocalAudioLevelObserver()stopLocalAudioLevelObserver()getLocalAudioLevel()startRemoteParticipantsAudioLevelObserver()stopRemoteParticipantsAudioLevelObserver()getRemoteParticipantsAudioLevel()
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 ondaily-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 ondaily-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
- Adds
onTranscriptionMessagetouseTranscription()and deprecatesonTranscriptionAppData
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
avatarproperty when settinguserData:
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-peersis 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-finishedandbatch-processor.error.
Additional
- The oldest supported version of
daily-jsis 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-androidadds camera zoom and flashlight control and custom tracks are now generally available.daily-iosadds new custom track methods and custom tracks are now generally available.daily-pythonnow 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
forceDiscardTrackoption forsetLocalAudio(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
forceDiscardTrackoption forsetLocalAudio(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:- Camera zoom control convenience method:
CallClient.setCameraZoom() - Flashlight control convenience method:
CallClient.setCameraTorch()
Release notes
For more information, check out the release notes.0.16.0
Custom tracks are now GA
Custom tracks fordaily-android are now generally available. In this first GA release, here are the highlights:CallClient.beta.addCustomVideoTrack()has been deprecated, in favor ofCallClient.addCustomVideoTrack().- We’ve added the ability to remove and update custom tracks, using
CallClient.updateCustomVideoTrack()andCallClient.removeCustomVideoTrack().
HIPAA: User analytics improvements
For customers with HIPAA compliance enabled for their account, you can now set a user’suser_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
- Add support for an
audio-onlyrecording layout preset. - Add transcription management features:
- New
CallClientmethods: - New delegate methods:
callClient(_:transcriptionStarted:)callClient(_:transcriptionStoppedBy:)callClient(_:transcriptionError:)
- New
- Add
rawResponsefield toTranscriptionMessage. It’s included ifincludeRawResponsewas 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.0.16.0
Custom tracks are now GA
Custom tracks fordaily-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:
HIPAA: User analytics improvements
For customers with HIPAA compliance enabled for their account, you can now set a user’suser_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, beforeCallClient.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()returnedisTranscribing: trueafter a meeting ended. - Fixed an issue where
useActiveSpeakerId()unnecessarily initialized its state withnull, 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
- Added two new webhooks events:
participant.joinedandparticipant.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'and'POST /webhooks/:id'endpoints, instead of using an on-demand generated secret.
Additional
- The oldest supported version of
daily-jsis 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’suser_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 releaseddaily-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’suser_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 releasedreact-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 releasedreact-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
participantIdfield toTranscriptionMessageData. - Added
transcriptIdfield toTranscriptionStatus.
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 releaseddaily-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_uito 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
useLegacyVideoProcessorwas 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
- Added two new webhooks events:
meeting.startedandmeeting.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_switchoverproperty. - Fixed an issue where
raw-tracksrecordings were not ending the recording after themaxDurationflag was set. - The oldest supported version of
daily-jsis 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 usingdaily-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 thesupportedBrowser() 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 usingreact-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 usingdaily-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.fullScreenHighlightItemIndexfor fast switching to temporary full-screen mode and back when in grid mode. - Corrected the TypeScript definition for
layout.participantsin 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-Dispositiontoinlineifallow_streaming_from_bucketis 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-canceledevent 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-jsis now 0.48.0.