April 30, 2025

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_elapsed is set to a negative value.
  • Fixed an OverconstrainedError on Chrome that occurred when providing an invalid audio deviceId.
  • 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-warning is now logged, as this scenario can significantly reduce video frame rates.
  • Improved networkState calculations by removing recvPacketLoss, which could be misleading.
  • Added instanceId to 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_elapsed is set to a negative value.
  • Improved networkState calculation by removing recvPacketLoss from the formula.
  • Added instanceId to 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(), and CallClient.remove_custom_audio_track() for advanced audio manipulation.
  • Improved canReceive permission 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-download and raw-tracks-recording-error webhooks now include an instance_id to uniquely identify raw tracks recording sessions.
  • Fixed an issue to ensure the instanceId is correctly propagated for raw tracks recordings from the initial API call through to the final webhook event.

Telephony

  • dialin.ready Webhook: Introduced the dialin.ready webhook event, which notifies you when a room's SIP endpoint is ready to receive an inbound call.

  • origin Field in Dial-Out Webhooks: Dial-out webhook events now include an origin field, 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.