SIP/PSTN join-time permissions, React Native New Architecture support, recording and telephony improvements.
Overview
This month, we’ve shipped join-time permissions for SIP/PSTN users across our client SDKs. React Native developers can now build with the New Architecture enabled. We’ve also fixed some recording and telephony bugs.Complete release history for our client SDKs is available in our Github release notes:daily-js
View full release notes →0.80.0
- Added support for setting permissions for SIP/PSTN users at join time.
- Removed the use of STUN from Xirsys.
- Updated dependencies to resolve security vulnerabilities.
react-native-daily-js
View full release notes →0.77.0
- Added support for setting permissions for SIP/PSTN users at join time.
- Fixed a build issue when using React Native’s New Architecture.
- Removed the use of STUN from Xirsys.
- Updated dependencies to resolve security vulnerabilities.
daily-python
View full release notes →0.19.3
- Added an option to ignore audio level when creating a custom audio track.
0.19.2
- Fixed a segmentation fault that could occur on exit when a custom audio source was still writing data.
Media Services
Recording
- Fixed a bug where a failed session asset image URL could cause a recording composition to crash.
Telephony
- Fixed a bug to correctly extract the
displayNamefrom custom SIP headers for dial-in participants.
Meeting move aware recording and streaming, new call transfer webhooks, improved telephony features, and platform-wide bug fixes.
Overview
Mobile SDKs now support canReceive permissions and improved connection reliability. The Python SDK gets powerful custom audio track capabilities. Meeting move aware recording is enabled by default, we’ve added call transfer webhooks, and transcription saves are now more resilient.Complete release history for our client SDKs is available in our Github release notes:daily-js
View full release notes →0.79.0
- Improved Krisp error handling.
- Removed a client-side limit on
max_live_streams. - Disabled Redux DevTools in production builds.
react-native-daily-js
View full release notes →0.76.0
- Removed a client-side limit on
max_live_streams. - Disabled Redux DevTools in production builds.
daily-android
View full release notes →0.31.0
- Added support for the
canReceivepermission to manage which media tracks remote participants can receive. - Improved connection reliability by retrying signaling channel connections and using an alternate WebSocket URI format.
- Fixed a bug where custom ICE server configurations were not being applied.
daily-ios
View full release notes →0.31.0
- Added support for the
canReceivepermission to manage which media tracks remote participants can receive. - Improved connection reliability by retrying signaling channel connections and using an alternate WebSocket URI format.
daily-python
View full release notes →0.19.1
- Fixed an audio renderer issue that caused garbled audio with remote stereo tracks.
- Added handling for meeting session ID changes that occur mid-call.
0.19.0
- Introduced
CustomAudioTrackfor use as an additional custom track or as the main microphone input. - Added support for
displayName,userId,video,codecs, andpermissionsinstart_dialout(). - Added
sample_rateandcallback_interval_msarguments toset_audio_renderer()for more control over audio data. - Updated
add_custom_audio_track()andupdate_custom_audio_track()to accept aCustomAudioTrackinstance. - Switched to using system-level root certificates on all platforms.
- Fixed a bug where blocking virtual microphones could fail to send audio.
0.18.2
- Fixed an installation issue on macOS versions older than 15.0.
- Corrected type hints for
remove_custom_track().
0.18.1
- Improved connection reliability by retrying signaling channel connections and using an alternate WebSocket URI format.
- Fixed a bug with virtual microphone completion callbacks.
Media Services
Recording
- Meeting move aware recording and streaming is now enabled by default. This feature (previously in pre-beta) automatically resumes recordings and live streams when meetings are transferred between servers during maintenance or failovers, eliminating gaps in recorded content.
Telephony
- Introduced new webhooks to track call transfer status:
calltransfer.triggered,calltransfer.initiated,calltransfer.answered, andcalltransfer.complete. - Added support for passing custom SIP headers during pinless dial-in, which are now available in the
sipHeadersobject in the webhook payload. - Added
canReceivepermission controls for dial-in and dial-out participants via thestartDialOut()API and room properties. - On-demand SIP dial-out endpoints are now the default behavior, improving resource efficiency.
Transcription
- Transcripts are now saved to storage every two minutes by default, improving data resilience.
- The
/transcriptand/transcriptsAPI endpoints now includeroomName,participantMinutes, andisVttAvailablefor more detailed information. - Fixed a race condition that could cause duplicate transcription messages when participant settings were updated rapidly.
Stability fixes for ejection logic and network states, Python custom audio tracks, enhanced recording webhooks, improved telephony features, and performance diagnostics for slow joins.
Overview
We’ve shipped stability improvements across the board this month. Key fixes include meeting ejection logic, network state calculations, and slow join diagnostics. The Python SDK now supports custom audio tracks, and raw tracks recordings now include instance IDs in webhooks.Complete release history for our client SDKs is available in our Github release notes:daily-js
View full release notes →0.78.0
- Fixed ejection logic to prevent incorrect ejections or joins when a user’s local clock is out of sync. ⚠️ Note: Participants can no longer join if
eject_after_elapsedis set to a negative value. - Fixed an
OverconstrainedErroron Chrome that occurred when providing an invalid audiodeviceId. - Fixed an issue where unhandled errors during Krisp initialization could cause problems when joining a call.
- Reverted a change that disabled background effects on Windows when software WebGL is in use. Instead, a
video-processor-warningis now logged, as this scenario can significantly reduce video frame rates. - Improved
networkStatecalculations by removingrecvPacketLoss, which could be misleading. - Added
instanceIdto webhooks for raw tracks recordings. - Added performance logging for
enumerateDevices()to help identify slow join times, especially on Firefox when the tab is not in focus. - Removed the beta feature warning from
testCallQuality().
react-native-daily-js
View full release notes →0.75.0
- Fixed ejection logic to prevent issues caused by mismatched local clock times. ⚠️ Note: Participants can no longer join if
eject_after_elapsedis set to a negative value. - Improved
networkStatecalculation by removingrecvPacketLossfrom the formula. - Added
instanceIdto webhooks for raw tracks recordings. - Added performance logging for
enumerateDevices()to help diagnose slow join times.
daily-python
View full release notes →0.18.0
- Introduced support for creating, updating, and removing custom audio tracks. You can now use
CallClient.add_custom_audio_track(),CallClient.update_custom_audio_track(), andCallClient.remove_custom_audio_track()for advanced audio manipulation. - Improved
canReceivepermission support to ensure track states ("off",offReasons) update correctly when permissions are granted or revoked. - Audio and video renderer callbacks (
set_audio_renderer(),set_video_renderer()) now receive the audio or video source as the last argument. - Reduced “no subscription for consumer” and “Failed to close consumer” log messages from error to debug, as these often occur during normal participant disconnections.
Media Services
Recording
- Instance ID in Webhooks: The
recording.ready-to-downloadandraw-tracks-recording-errorwebhooks now include aninstance_idto uniquely identify raw tracks recording sessions. - Fixed an issue to ensure the
instanceIdis correctly propagated for raw tracks recordings from the initial API call through to the final webhook event.
Telephony
-
dialin.readyWebhook: Introduced thedialin.readywebhook event, which notifies you when a room’s SIP endpoint is ready to receive an inbound call. -
originField in Dial-Out Webhooks: Dial-out webhook events now include anoriginfield, specifying the PSTN number or SIP URI that initiated the call. - Default SIP Codec: Added a domain-level property to set default codecs for SIP/PSTN calls. Opus is now the default codec for all dial-in calls.
-
On-Demand SIP Endpoints: SIP endpoints for dial-out are now created on-demand when
startDialOut()is called, improving resource efficiency and room creation reliability. - Error Messaging: Enhanced error messages for dial-in/out configurations during room creation.
New canReceive permission, dynamic track constraints, revamped network stats, enhanced telephony features (caller ID, SIP fixes), improved platform stability and compatibility (reconnection, ICE, and more), and security updates.
Introduced
We extended the available permissions to include
Introduced
Added support for the new
Update
Added support for modifying remote participant’s
Overview
As we close out the first quarter, recent updates across the Daily ecosystem deliver major new features and bug fixes. We’ve introduced thecanReceive permission for fine-grained media control, revamped network statistics (networkState, networkStateReasons) while deprecating older metrics, enhanced telephony capabilities (caller ID, SIP stability, API improvements), refined recording composition, and fixed bugs across the platform.Complete release history for our client SDKs is available in our Github release notes:daily-js
View full release notes →0.77.0
Introduced canReceive Permission
We extended the available permissions to include canReceive, which allows meeting owners to control the media tracks of others in the session. This feature enables use cases like “warm transfers” (e.g., ensuring a customer doesn’t hear an agent before the handoff is complete) and other scenarios requiring selective visibility or audibility within a call. See the participant permissions documentation for details.Improved Network Quality Statistics
We introduced two new fields in the object returned bygetNetworkStats() to provide more accurate network quality data: networkState and networkStateReasons. These replace the deprecated threshold and quality fields, offering a more reliable assessment based on send/receive packet loss, round-trip time, and available outgoing bitrate.Bug fixes and improvements
- Fixed
proxyUrlsupport indailyConfig. - Optimized background effects on Windows by disabling them when hardware acceleration is unavailable.
- Updated internal dependencies to resolve security vulnerabilities.
- Simplified
recordings_bucketresponse inroom()method for enhanced security.
0.76.0
Bug fixes and performance improvements
- Updated Krisp noise cancellation library to v2.2.1.
- Fixed switching back from custom video track to device track via
setInputDevicesAsync(). - Fixed
iceTransportPolicyconfiguration to correctly override domain defaults. - Added
enable_dialoutto TypeScript definitions forDailyRoomInfo.
0.75.2
Bug fixes
- Fixed unnecessary video track re-acquisition during input settings updates.
0.75.1
Bug fixes
- Fixed video constraint preservation when changing devices.
- Removed console error for null
deviceIdinsetInputDevicesAsync.
0.75.0
Enhanced Participant Type for Dial-in/out
Theparticipant object now includes specific participantType values to identify telephony participants: sip-dial-in, sip-dial-out, pstn-dial-in, and pstn-dial-out. This allows for clearer identification of how participants joined via SIP or PSTN dial-in/out.Dynamic Input Track Constraints
Introduced support for dynamically customizing media track constraints during a call usingupdateInputSettings(). This allows changing camera resolution, frame rate, or switching between front and rear cameras without rejoining. The previous constraint-setting methods (userMediaAudioConstraints, userMediaVideoConstraints, and setBandwidth trackConstraints) are now deprecated.Bug fixes and improvements
- Fixed track event reliability for rapid muting/unmuting and custom tracks.
- Fixed track event participant info on leave.
- Improved Krisp initialization error handling.
- Fixed
ondevicechangeundefined error on certain systems. - Updated Banuba SDK to eliminate need for
'unsafe-eval'CSP directive withavoidEval: true. - Updated minimum supported version to 0.64.0.
react-native-daily-js
View full release notes →0.74.0
Introduced canReceive Permission
Added support for the new canReceive permission for granular control over which media tracks participants receive. See the participant permissions documentation for details.Improved Network Quality Statistics
IntroducednetworkState and networkStateReasons fields in getNetworkStats(), replacing deprecated threshold and quality metrics.Bug fixes and improvements
- Added caller ID support for SIP PSTN transfers in
sipCallTransfer(). - Fixed
proxyUrlsupport. - Updated dependencies for security fixes.
- Simplified
recordings_bucketresponse inroom()method.
0.73.0
Bug fixes
- Fixed switching from custom video track back to device track.
- Fixed
iceTransportPolicyconfiguration override. - Added
enable_dialoutto TypeScript definitions.
0.72.1
Reverted Erroneous API Changes
Reverted unintended deprecation notices forupdateInputSettings() and dynamic track constraints to maintain React Native’s existing device handling APIs.0.72.0
Enhanced Participant Type for Dial-in/out
Added specificparticipantType values for telephony participants: sip-dial-in, sip-dial-out, pstn-dial-in, and pstn-dial-out.Added Audio-Only Raw Tracks Recording
Addedraw-tracks-audio-only streaming config for audio-only recording support.Bug fixes
- Fixed track event reliability for muting and custom tracks.
- Updated internal REST APIs to use native utilities.
- Added participant info to
track-stoppedevents on leave.
0.71.0
Bug fixes and improvements
- Added
sessionIdto dial-in events.
daily-android
View full release notes →0.30.0
Ignore Network Devices API
IntroducedCallClient.GlobalConfig.setIgnoredNetworkDevices() to exclude specific network interfaces (VPNs, virtual adapters) during ICE candidate gathering for improved connection reliability.Bug fixes
- Fixed ICE server configuration application via
CallClient.setIceConfig().
0.29.0
Automatic Cloud Recording Start
Added support for automatically starting cloud recording on join whenstart_cloud_recording: true is set in the meeting token.Bug fixes and improvements
- Fixed reconnection with expired meeting tokens.
- Updated dependencies (ffmpeg, libav, libvpx) for security patches.
daily-ios
View full release notes →0.30.0
Bug fixes
- Fixed ICE server configuration application via
setIceConfig().
0.29.0
Automatic Cloud Recording Start
Added support for automatically starting cloud recording on join whenstart_cloud_recording: true is set in the meeting token.Bug fixes
- Fixed reconnection with expired meeting tokens.
daily-python
View full release notes →0.17.0
Improved Linux Compatibility
Recompiled against glibc 2.28 for broader Linux distribution support.0.16.1
Bug fixes
- Fixed virtual speaker device selection.
0.16.0
Update canReceive Permissions Support
Added support for modifying remote participant’s canReceive permission via update_remote_participants().Bug fixes
- Fixed ICE server configuration application.
0.15.0
Automatic Cloud Recording Start
Added support for automatically starting cloud recording on join whenstart_cloud_recording: true is set in the meeting token.Bug fixes
- Fixed reconnection with expired meeting tokens.
Daily Prebuilt
Transcription Language Defaults
Transcription now defaults to the room/domainlang configuration when started via Closed Captions, falling back to English if not configured.Media Services
Recording and Live Streaming
New Features
- Scale Mode Overrides: Added
videoSettings.split.scaleModeOverridesfor individual participant scaling in split layout compositions. - Background Color Support: VCS render pipeline now supports custom background colors via
backgroundColorparameter.
Bug fixes
- Fixed audio-only participant filtering in baseline compositions.
- Fixed instance ID handling for raw tracks recording.
Telephony
Enhanced Caller ID Control
AddedcallerId support in sipCallTransfer() for PSTN transfers with improved default caller ID selection logic.API Improvements
- Domain dial-in configs endpoint now supports filtering by multiple phone numbers.
- Purchased phone numbers endpoint now includes pagination support.
- Room creation API provides more specific telephony provisioning error messages.
Bug fixes and improvements
- Improved SIP INVITE handling to prevent signaling state errors.
- Enhanced error messages for invalid call transfers.
- Fixed layout updates for disconnected SIP participants.
- Added comprehensive transfer guide documentation.
Transcription
Bug fixes
- Fixed race condition when stopping or updating transcription immediately after starting.
New transcription webhooks, better multi-instance recording support, improved telephony features, platform-wide bug fixes, and strengthened SDK reliability.
Fixed crash when creating and deleting
Fixed an issue where
Added
Added
Overview
Rounding out 2024 and kicking off 2025 with major improvements across Daily’s platform components: bug fixes (Safari audio processing detection, call quality test error handling), expanded feature set (improved PSTN/SIP support, expanded multi-instance recording, new transcription webhooks), and strengthened infrastructure (SDK and media service reliability).Complete release history for our client SDKs is available in our Github release notes:daily-js
0.74.0
Updated Krisp CSP Requirements
Added missingblob: source to the CSP guide:Follow-up fix for Safari Audio Processing Detection
Fixed a logical error in Safari version comparison for audio processing support. We resolved an edge case where Safari versions above 18 were incorrectly flagged as unsupported. This completes the Safari 17.4+ audio processing detection fix from our previous release.This change ensures accurate audio processing support detection across all Safari versions.Fixed Call Quality Test Error Handling
Fixed error handling intestCallQuality() when rate limits are hit and improved promise rejection handling to avoid uncaught errors. Test failures now properly resolve with a FAILED result instead of throwing.Added Session ID to Dial-in Events
Added sessionId field to all dial-in events:dialin-connected, dialin-error, dialin-stopped, and dialin-warning.For example:Version Support Update
- The oldest supported version of
daily-jsis now 0.63.0.
react-native-daily-js
0.71.0
This release also includes several core improvements shared with daily-js 0.74.0:- Added sessionId to dial-in events
daily-android
0.28.0
Added support for Cloudflare TURN/STUN servers
Added support for using Cloudflare TURN/STUN servers for ICE connections. If you’re interested in using this for your Daily domain, please contact help@daily.coFixed Android Proguard Build Configuration
Fixed an issue where apps using R8/Proguard would fail to build due to missing Banuba video processor classes:- Added proper Proguard configuration for optional Banuba SDK dependencies
- Ensured R8 optimization doesn’t fail on missing video processor classes
- Maintained backwards compatibility with existing video processor integrations
0.27.0
Fixed crash when creating and deleting VideoTextureView/VideoTrackCapturerToSurface without also creating a CallClient.
Fixed an issue where daily-android would crash when cleaning up video views without an active CallClient:- Moved native library initialization to shared context to prevent premature loading
- Added safety checks to prevent cleanup of uninitialized native contexts
- Improved synchronization of client tracking in shared context
Enhanced Call Reliability during Meeting Moves
Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.daily-ios
0.28.0
Added support for Cloudflare TURN/STUN servers
Added support for using Cloudflare TURN/STUN servers for ICE connections. If you’re interested in using this for your Daily domain, please contact help@daily.co0.27.0
Enhanced Call Reliability during Meeting Moves
Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.daily-python
0.14.2
Fixed type hints for CallClient.send_app_message()
Fixed type hints forCallClient.send_app_message() to match the expected payload structure.0.14.1
Enhanced App Message Serialization
Addedserialize_none option to CallClient.send_app_message() to control whether None values are serialized to JSON null or ignored. This enables more flexible data handling in application messages.0.14.0
Added DTMF Support for Dial-out Calls
Added the ability to send DTMF tones in dial-out sessions usingCallClient.send_dtmf()docs:- Send numeric tones (0-9), symbols (#, *) and letters (A-D) to control interactive voice systems
- Control automated phone menus and voicemail systems during dial-out calls
- Specify session ID and tone sequences via simple settings object
Added SIP REFER Support
Added support for transferring SIP calls to external endpoints viaCallClient.sip_refer() (docs):- Transfer ongoing SIP dial-in calls to external SIP endpoints
- Control transfers using session ID and destination endpoint
- Support for standard SIP REFER mechanism
Added Daily-to-Daily SIP Call Transfer Support
Added support for transferring SIP/PSTN calls between Daily rooms viaCallClient.sip_call_transfer() (docs):- Transfer SIP dial-in calls between Daily rooms
- Transfer dial-out calls to other SIP/PSTN endpoints
- Control transfers using session ID and destination endpoint
Changed field name in Dial Events
RenamedparticipantId to sessionId in DialoutEvent and DialinEvent objects for consistencyEnhanced Call Reliability during Meeting Moves
Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.Daily Prebuilt
- Enhanced accessibility across Prebuilt with ARIA attributes, improved keyboard navigation, semantic HTML, updated labels and roles, and better screen reader support to meet WCAG standards.
- Fixed issue where GIFs with empty titles were not rendered in chat.
- Fixed a case where flickering in chat input height occurred while typing.
Media Services
Recording and Live Streaming
Support Multiple Recording Types with Multi-Instance Recording
Added support for running different recording types simultaneously using instance IDs:- New
typeparameter instartRecording()(docs) API accepts'cloud','raw-tracks', or'local' - Recording types must be enabled via
enable_recordingproperty on room/domain - Each recording instance requires a unique UUID via
instanceIdparameter
Added Audio-Only Support for Raw Tracks Recording
Added support for audio-only recording in raw-tracks recordings:- New
raw-tracks-audio-onlypreset captures only audio tracks, reducing storage requirements and simplifying post-processing workflows - Preset must be specified at recording start - cannot be changed via
updateRecording() - Compatible with existing
raw-tracksprocessing tools for audio extraction and analysis
Added Raw Tracks Processing Tools
Released an open-source suite of tools for processing raw-tracks recordings:- New
raw-tracks-toolsCLI provides tools for analyzing, converting and compositing WebM files from raw-tracks recordings - Supports track alignment, synchronization, and layout composition using Daily’s VCS engine
- Complements existing GUI tools like CloudConvert and Handbrake with more precise control over WebM processing
Added Audio Recording Loss Detection
Added automatic detection of audio quality issues in recordings and streams. This fixes issues where audio quality issues where audio or video tracks were visible during the live call but not in the final recording/stream.Improved Recording Reliability with Network Optimizations
Enhanced network reliability for all recording types (cloud, raw-tracks, live streaming) and phone integration:- Increased UDP buffer sizes to prevent packet loss between servers
- Added server-to-server retransmission between SFU and media workers
- Reduces recording freezes and dropped tracks in environments with network congestion
Fixed Missing Tracks in Recordings
Fixed an issue where tracks could be missing from recordings when added during WebSocket reconnections between SFU and recording services. New tracks are now properly subscribed even during connection re-establishment.Telephony
Renamed Dialout Timeout Configuration Field
Renamed dialout configuration parameter frommax_alone_duration_sec to max_idle_timeout_sec to better describe its purpose of controlling how long dialout participants remain in an idle room.Added Participant Type Support in participants() for Phone Participants
Added distinct participant types for phone participants in participants() to enable better handling of SIP and PSTN users:- New participant types:
sip-dial-in,sip-dial-out,pstn-dial-in,pstn-dial-out - Automatically set for all phone-based participants, including umbrella participants
Fixed Dialout ICE Connection Reliability
Fixed an issue where SIP dialout calls could hang during ICE connection negotiation, improving the reliability of phone system integration.Added dialout_config to Room Configuration
Added dialout_config (docs) as a room-level configuration option to control dialout behavior:dialout_config.allow_room_start: Allow dialouts to start an empty roomdialout_config.max_idle_timeout_sec: Control how long a dialout participant can remain in a room alonedialout_config.dialout_geo: Specify region for dialout sessions
Transcription
Unified Transcription Configuration Across Live and Batch Processing
Aligned transcription configuration options between live transcription and batch processing for consistent API usage:- All configuration options from live transcription (language, model, punctuate, etc.) now supported in batch processing
- Previous undocumented
paramsfield maintained for backward compatibility - Added new
extrafield for additional Deepgram parameters in both APIs
Added Room Name in Transcription API
Enhanced transcription list and info endpoints with room name support:Webhooks
New transcription webhook events
Added three new webhook events to track the full lifecycle of transcriptions:transcript.startedindicates transcription has begun, including metadata like room ID, instance ID and initial statustranscript.ready-to-downloadfires when transcription completes, providing S3 location details for downloading the transcripttranscript.errorprovides detailed error information and context if transcription fails during any stage