January 31, 2025
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 missing blob:
source to the CSP guide:
script-src 'self' https://unpkg.com/@daily-co/daily-js blob:;
Follow-up fix for Safari Audio Processing Detection
Fixed a logical error in Safari version comparison for audio processing support. We resolved an edge case where Safari versions above 18 were incorrectly flagged as unsupported. This completes the Safari 17.4+ audio processing detection fix from our previous release.
This change ensures accurate audio processing support detection across all Safari versions.
Fixed Call Quality Test Error Handling
Fixed error handling in testCallQuality()
when rate limits are hit and improved promise rejection handling to avoid uncaught errors. Test failures now properly resolve with a FAILED result instead of throwing.
Added Session ID to Dial-in Events
Added sessionId field to all dial-in events: dialin-connected
, dialin-error
, dialin-stopped
, and dialin-warning
.
For example:
dialinConnected: { sessionId: 'abc-123', sipFrom: '+1234567890', ... }
Version Support Update
- The oldest supported version of
daily-js
is now 0.63.0.
react-native-daily-js
0.71.0
This release also includes several core improvements shared with daily-js 0.74.0:
- Added sessionId to dial-in events
See the daily-js 0.74.0 section for full details on these changes.
daily-android
0.28.0
Added support for Cloudflare TURN/STUN servers
Added support for using Cloudflare TURN/STUN servers for ICE connections. If you're interested in using this for your Daily domain, please contact help@daily.co
Fixed Android Proguard Build Configuration
Fixed an issue where apps using R8/Proguard would fail to build due to missing Banuba video processor classes:
- Added proper Proguard configuration for optional Banuba SDK dependencies
- Ensured R8 optimization doesn't fail on missing video processor classes
- Maintained backwards compatibility with existing video processor integrations
This change prevents build failures in release builds when the video processor plugin is not included.
0.27.0
Fixed crash when creating and deleting VideoTextureView
/VideoTrackCapturerToSurface
without also creating a CallClient
.
Fixed an issue where daily-android
would crash when cleaning up video views without an active CallClient:
- Moved native library initialization to shared context to prevent premature loading
- Added safety checks to prevent cleanup of uninitialized native contexts
- Improved synchronization of client tracking in shared context
This change prevents crashes when creating and destroying video views without an active call client, improving stability for applications that conditionally initialize video components.
Enhanced Call Reliability during Meeting Moves
Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.
daily-ios
0.28.0
Added support for Cloudflare TURN/STUN servers
Added support for using Cloudflare TURN/STUN servers for ICE connections. If you're interested in using this for your Daily domain, please contact help@daily.co
0.27.0
Enhanced Call Reliability during Meeting Moves
Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.
daily-python
0.14.2
Fixed type hints for CallClient.send_app_message()
Fixed type hints for CallClient.send_app_message()
to match the expected payload structure.
0.14.1
Enhanced App Message Serialization
Added serialize_none
option to CallClient.send_app_message()
to control whether None
values are serialized to JSON null
or ignored. This enables more flexible data handling in application messages.
0.14.0
Added DTMF Support for Dial-out Calls
Added the ability to send DTMF tones in dial-out sessions using CallClient.send_dtmf()
docs:
- Send numeric tones (0-9), symbols (#, *) and letters (A-D) to control interactive voice systems
- Control automated phone menus and voicemail systems during dial-out calls
- Specify session ID and tone sequences via simple settings object
This addition enables programmatic interaction with phone systems that require DTMF input during dial-out calls.
Added SIP REFER Support
Added support for transferring SIP calls to external endpoints via CallClient.sip_refer()
(docs):
- Transfer ongoing SIP dial-in calls to external SIP endpoints
- Control transfers using session ID and destination endpoint
- Support for standard SIP REFER mechanism
This addition enables seamless call transfers between Daily and external SIP systems.
Added Daily-to-Daily SIP Call Transfer Support
Added support for transferring SIP/PSTN calls between Daily rooms via CallClient.sip_call_transfer()
(docs):
- Transfer SIP dial-in calls between Daily rooms
- Transfer dial-out calls to other SIP/PSTN endpoints
- Control transfers using session ID and destination endpoint
This addition enables seamless call transfers within the Daily ecosystem and to external numbers.
Changed field name in Dial Events
Renamed participantId
to sessionId
in DialoutEvent
and DialinEvent
objects for consistency
Enhanced Call Reliability during Meeting Moves
Improved call reliability during meeting moves by implementing increased retry attempts for meeting moves to handle longer backend processing times.
Daily Prebuilt
- Enhanced accessibility across Prebuilt with ARIA attributes, improved keyboard navigation, semantic HTML, updated labels and roles, and better screen reader support to meet WCAG standards.
- Fixed issue where GIFs with empty titles were not rendered in chat.
- Fixed a case where flickering in chat input height occurred while typing.
Media Services
Recording and Live Streaming
Support Multiple Recording Types with Multi-Instance Recording
Added support for running different recording types simultaneously using instance IDs:
// Start a cloud recordingawait call.startRecording({instanceId: '123e4567-e89b-12d3-a456-426614174000',type: 'cloud',layout: {preset: 'default',},});// Start raw-tracks recording in parallelawait call.startRecording({instanceId: '987fdef0-c65b-11d1-b2e2-526614174000',type: 'raw-tracks',});
- New
type
parameter instartRecording()
(docs) API accepts'cloud'
,'raw-tracks'
, or'local'
- Recording types must be enabled via
enable_recording
property on room/domain - Each recording instance requires a unique UUID via
instanceId
parameter
You can now run cloud recordings and raw track captures simultaneously, enabling both processed and unprocessed recording workflows from a single call.
Added Audio-Only Support for Raw Tracks Recording
Added support for audio-only recording in raw-tracks recordings:
- New
raw-tracks-audio-only
preset captures only audio tracks, reducing storage requirements and simplifying post-processing workflows - Preset must be specified at recording start - cannot be changed via
updateRecording()
- Compatible with existing
raw-tracks
processing tools for audio extraction and analysis
This addition makes raw-tracks recordings more flexible for audio-focused use cases where individual tracks are needed for post-processing like podcasting, voice analysis, and audio archival.
Added Raw Tracks Processing Tools
Released an open-source suite of tools for processing raw-tracks recordings:
- New
raw-tracks-tools
CLI provides tools for analyzing, converting and compositing WebM files from raw-tracks recordings - Supports track alignment, synchronization, and layout composition using Daily's VCS engine
- Complements existing GUI tools like CloudConvert and Handbrake with more precise control over WebM processing
This release makes raw-tracks recordings more accessible for post-processing workflows, especially for high-quality audio/video production.
Added Audio Recording Loss Detection
Added automatic detection of audio quality issues in recordings and streams. This fixes issues where audio quality issues where audio or video tracks were visible during the live call but not in the final recording/stream.
Improved Recording Reliability with Network Optimizations
Enhanced network reliability for all recording types (cloud, raw-tracks, live streaming) and phone integration:
- Increased UDP buffer sizes to prevent packet loss between servers
- Added server-to-server retransmission between SFU and media workers
- Reduces recording freezes and dropped tracks in environments with network congestion
Fixed Missing Tracks in Recordings
Fixed an issue where tracks could be missing from recordings when added during WebSocket reconnections between SFU and recording services. New tracks are now properly subscribed even during connection re-establishment.
Telephony
Renamed Dialout Timeout Configuration Field
Renamed dialout configuration parameter from max_alone_duration_sec
to max_idle_timeout_sec
to better describe its purpose of controlling how long dialout participants remain in an idle room.
Added Participant Type Support in participants() for Phone Participants
Added distinct participant types for phone participants in participants() to enable better handling of SIP and PSTN users:
- New participant types:
sip-dial-in
,sip-dial-out
,pstn-dial-in
,pstn-dial-out
- Automatically set for all phone-based participants, including umbrella participants
This helps developers better identify and manage phone participants in their applications.
Fixed Dialout ICE Connection Reliability
Fixed an issue where SIP dialout calls could hang during ICE connection negotiation, improving the reliability of phone system integration.
Added dialout_config
to Room Configuration
Added dialout_config
(docs) 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:
// Live transcriptionawait call.startTranscription({language: 'fr-CA',model: 'nova-2-general',});
- All configuration options from live transcription (language, model, punctuate, etc.) now supported in batch processing
- Previous undocumented
params
field maintained for backward compatibility - Added new
extra
field for additional Deepgram parameters in both APIs
Simplifies transcription configuration by providing a consistent interface across real-time and batch processing workflows.
Added Room Name in Transcription API
Enhanced transcription list and info endpoints with room name support:
// List transcripts with room name filterGET /api/transcripts?room_name=my-room*// Transcript info now includes room name{"transcriptId": "123","roomId": "456","roomName": "my-room",// ...other fields}
Webhooks
New transcription webhook events
Added three new webhook events to track the full lifecycle of transcriptions:
transcript.started
indicates transcription has begun, including metadata like room ID, instance ID and initial statustranscript.ready-to-download
fires when transcription completes, providing S3 location details for downloading the transcripttranscript.error
provides detailed error information and context if transcription fails during any stage
Monitor and automate transcription workflows with comprehensive status updates and error handling through webhooks.
Other
Added support for Cloudflare TURN/STUN servers
Added support for using Cloudflare TURN/STUN servers for TURN/STUN connections. If you're interested in using this for your Daily domain, please contact help@daily.co