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 recording
await call.startRecording({
instanceId: '123e4567-e89b-12d3-a456-426614174000',
type: 'cloud',
layout: {
preset: 'default',
},
});
// Start raw-tracks recording in parallel
await call.startRecording({
instanceId: '987fdef0-c65b-11d1-b2e2-526614174000',
type: 'raw-tracks',
});
  • New type parameter in startRecording() (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 room
  • dialout_config.max_idle_timeout_sec: Control how long a dialout participant can remain in a room alone
  • dialout_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 transcription
await 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 filter
GET /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 status
  • transcript.ready-to-download fires when transcription completes, providing S3 location details for downloading the transcript
  • transcript.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