> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# April 3, 2023

> The latest updates to Daily's real-time audio and video APIs.

## Overview

This is an action-packed Changelog with a number of new feature releases including:

* Noise cancellation powered by Krisp is available in `daily-js` and Daily Prebuilt
* Breakout rooms is available in Daily Prebuilt
* Prebuilt Integrations API public beta is available in Daily Prebuilt. Embed third-party apps like whiteboards and chat apps using this new API.
* CPU Load Change event is available in `daily-js`. Use this new event to improve call quality by monitoring CPU load using.

Check out the notes below to learn more about those features and more!

## daily-js

### 0.42.2

#### Features

* Noise cancellation powered by Krisp is now available as a public beta! Check out our [blog post](https://daily.co/blog/daily-partners-with-krisp-to-provide-world-class-noise-cancellation-capabilities) on this feature to learn more.
* We also added a new event called `cpu-load-change`, which reports when the CPU load transitions from low to high (and vice versa). This event can be used along with other [quality events](/reference/daily-js/events/network-events) to improve call quality admist suboptimal network and device conditions. Refer to our [reference docs](/reference/daily-js/events/network-events#cpu-load-change) for details.

#### Bugfixes

* Fixed an issue with default audio output change detection as well as an issue where the device returned by `callObject.getInputDevices().speaker` would often be a microphone.
* Fixed an issue where a non-default audio output device specified via `setOutputDeviceAsync()` wouldn't properly apply to audio elements in the DOM if they were added after the call to `setOutputDeviceAsync()`. For example, if a new participant joined afterward, or if `setOutputDeviceAsync()` were invoked before `join()`.
* Fixed a problem where `setInterval()` intervals that the call object starts are never cleaned up if the user doesn't end up `join()`ing a call first. Intervals should be cleaned up when the user invokes `destroy()`, whether or not they ever `join()`ed.
  There is one side effect of this change: now, after `destroy()` is run, the call object will always be left with `meetingState()` as either `'left-meeting'` or `'error'`, whereas previously the call object could also be left in a number of other states.
* Fixed an issue where if you join a meeting in P2P mode with mic on, your audio sometimes doesn't play for the other person.
* Fixed the `DailyEventObjectCameraError` and `DailyCameraErrorObject` type definitions to resolve to their defined camera error types, allowing developers to handle the different types of camera errors ergonomically in a TypeScript codebase.
* Fixed an issue in our TypeScript definitions of custom layout properties passed to `startRecording()` / `startLiveStreaming()`. `composition_id` is now marked as optional.
* Fixed an issue where, in P2P mode, toggling the camera off and back on would disable background effects.

#### Other improvements

* Increased the number of internal call quality statistics we record, for example the number of pauses and freezes in a video track or audio track.
* Added detail to connection failure meeting errors.
* Made a change to ensure that `instanceId` should always be included in `live-streaming-started` events.

## react-native-daily-js

### 0.40.0

#### Features

* We added a new CPU event called `cpu-load-change` which reports when the CPU transitions from low to high utilization state (and vice versa). This event can be used along with other [quality events](/reference/react-native/events/network-events) to improve call quality admist suboptimal network and device conditions. Refer to our [reference docs](/reference/react-native/events/network-events#cpu-load-change) for details.

#### Bugfixes

* Fixed a small typo in the React Native TypeScript definitions.
* Fixed an issue with default audio output change detection, as well as an issue where the device returned by `callObject.getInputDevices().speaker` would often be a microphone.
* Fixed a problem where `setInterval()` intervals that the call object starts are never cleaned up if the user doesn't end up `join()`ing a call first. Intervals should be cleaned up when the user invokes `destroy()`, whether or not they ever `join()`ed.
  There is one side effect of this change: now, after `destroy()` is run, the call object will always be left with `meetingState()` as either `'left-meeting'` or `'error'`, whereas previously the call object could also be left in a number of other states.
* Fixed an issue where if you join a meeting with mic on, your audio sometimes doesn't play for the other person.
* Fixed the `DailyEventObjectCameraError` and `DailyCameraErrorObject` type definitions to resolve to their defined camera error types, allowing developers to handle the different types of camera errors ergonomically in a TypeScript codebase.
* Fixed an issue in our TypeScript definitions of custom layout properties passed to `startRecording()` / `startLiveStreaming()`. `composition_id` is now marked as optional.
* Fixed an issue where, in P2P mode, toggling the camera off and back on would disable background effects.

#### Other improvements

* Increased the number of internal call quality statistics we record, for example the number of pauses and freezes in a video track or audio track.
* Added detail to connection failure meeting errors.
* Made a change to ensure that `instanceId` should always be included in `live-streaming-started` events.

## daily-react

### 0.7.3

#### Improvements

* Updated wrapper methods to `daily-js` exposed from hooks to infer function types from `daily-js` to avoid type mismatches between `daily-react` and `daily-js`. This impacts:
  * `useInputSettings().updateInputSettings`
  * `useLiveStreaming().startLiveStreaming`
  * `useLiveStreaming().stopLiveStreaming`
  * `useLiveStreaming().updateLiveStreaming`
  * `useReceiveSettings().updateReceiveSettings`
  * `useRecording().startRecording`
  * `useRecording().stopRecording`
  * `useRecording().updateRecording`
  * `useScreenShare().startScreenShare`
  * `useScreenShare().stopScreenShare`
  * `useTranscription().startTranscription`
  * `useTranscription().stopTranscription`
* Added checks for destroyed call objects to prevent calling `daily-js` methods on already destroyed instances
* Dropped Node.js 12 from our CI/CD checks. This means that using `daily-react` in Node.js 12 setups isn't tested anymore. Node.js 12 stopped receiving security updates in April 2022.

#### Bugfixes

* Fixed potentially stale state information for waiting participants returned from `useWaitingParticipants()`.
* Fixed an issue where `useReceiveSettings()` could return outdated information about received layers.

## Daily Prebuilt

* Breakout rooms are now available as a public beta! You can enabled this feature either at the [domain level](/reference/rest-api/domain/set-domain-config#body-properties-enable-breakout-rooms), which will apply to all rooms, or at the [room level](/reference/rest-api/rooms/get-room#response-config-enable-breakout-rooms), which will apply to specific rooms.
* The Prebuilt Integrations API public beta launched! With this new API, you can embed any third-party website into Daily Prebuilt as an iframe. In our early testing, we found some popular use cases to be adding a collaborative whiteboard and a third-party chat API. Refer to our [reference docs](/reference/daily-js/instance-methods/set-custom-integrations) to learn more. Also, keep a lookout for an upcoming blog post with some example integrations.
* Along with the Prebuilt Integrations API, we've added a new Sidebar API, which allows you to open the Sidebar to a specific tab using [`setSidebarView()`](/reference/daily-js/instance-methods/set-sidebar-view). This feature goes hand-in-hand with a `sidebar` integration.
* Fixed an issue where tooltips would appear without a cursor hover.
* Added the ability to select an emoji skin tone. This feature is enabled when you enable Reactions or Advanced Chat.

## VCS

* Parameter `videoSettings.omitPaused` is now renamed to [`videoSettings.omitPausedVideo`](/docs/vcs/custom-react-hooks/use-params#param-video-settings-omit-paused-video).
* Refactored our core library to bring performance improvements to VCS composition rendering while lowering CPU usage.
* Fixed a bug where text was not center aligned in the baseline composition slate component.
* The `transform` object now has additional properties: `scale, scaleX, scaleY`. This transform only applies to graphics, not video.
* The VCS baseline composition now has a new `text.scale_x` parameter, which is useful for changing the width of your text.

## REST API

* Added new batch operations beta feature for [creating](/reference/rest-api/batch/create-rooms) and [deleting](/reference/rest-api/batch/delete-rooms) rooms.
* Added a few more input guards for API parameters and similar cases.

## Dashboard

* Added the ability to enable or disable the noise cancellation UI in Prebuilt as a domain and room property. You can control this property using the `Noise cancellation UI` setting in the dashboard.
* Made a number of security improvements, including invalidating previous sessions upon changing an email address and improving the robustness of dashboard invite links.

## Additional

* Fixed a bug where, in P2P mode, toggling the camera off and back on could disable background effects.
* We've updated our fork of mediasoup with upstream improvements and bugfixes.
* The oldest supported version of `daily-js` is now v0.31.0.
