@@ -158,7 +158,7 @@ class HMSTranscription {
final String? peerName;
final bool isFinal;
-}
+}
```
### Step 3: To stop getting transcriptions, remove HMSTranscriptListener
@@ -180,7 +180,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
## How to start/stop transcriptions
-Transcriptions can only be started or stopped by the peer having admin permissions. Transcription permissions can be changed from [100ms dashboard](https://dashboard.100ms.live/).
+Transcriptions can only be started or stopped by the peer having admin permissions. Transcription permissions can be changed from [100ms dashboard](https://dashboard.100ms.live/).
HMSSDK provides `HMSTranscriptionController` to control transcription.
### Start Transcription
@@ -203,7 +203,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
HMSTranscriptionState.started) {
///Captions are enabled in the room
isTranscriptionEnabled = true;
- }
+ }
else if(room.transcriptions?[index].state ==
HMSTranscriptionState.stopped){
///Captions are disabled in the room
@@ -243,8 +243,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
```
After calling `startTranscription` method, `onRoomUpdate` will be fired with `HMSRoomUpdate.transcriptionsUpdated` event.
-First update will be with `HMSTranscriptionState.initialized` and then `HMSTranscriptionState.started` state.
-
+First update will be with `HMSTranscriptionState.initialized` and then `HMSTranscriptionState.started` state.
### Stop Transcription
@@ -268,7 +267,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
HMSTranscriptionState.started) {
///Captions are enabled in the room
isTranscriptionEnabled = true;
- }
+ }
else if(room.transcriptions?[index].state ==
HMSTranscriptionState.stopped){
///Captions are disabled in the room
@@ -305,5 +304,5 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
}
```
-After calling `stopTranscription` method, `onRoomUpdate` will be fired with `HMSRoomUpdate.transcriptionsUpdated` event.
-Update will be fired with `HMSTranscriptionState.stopped` state.
\ No newline at end of file
+After calling `stopTranscription` method, `onRoomUpdate` will be fired with `HMSRoomUpdate.transcriptionsUpdated` event.
+Update will be fired with `HMSTranscriptionState.stopped` state.
diff --git a/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx b/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx
index 117fbf77c6..6f00a21f77 100644
--- a/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx
+++ b/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx
@@ -1,5 +1,5 @@
---
-title: Virtual Background Plugin (Beta)
+title: Virtual Background Plugin
nav: 13.4
---
@@ -16,9 +16,9 @@ Virtual Background plugin helps customise one’s background by replacing the ba
## Limitations
-- Has poor fps on older android phones
-- Minimum iOS version required to support Virtual Background plugin is `iOS 15`
-- Virtual background plugin is in beta stage and may have performance issues on iPhone X, 8, 7, 6 and other older devices. We recommend that you use this feature on a high performance device for smooth experience.
+- Has poor fps on older android phones
+- Minimum iOS version required to support Virtual Background plugin is `iOS 16`
+- Virtual background plugin may have performance issues on older iPhone devices. We recommend that you use this feature on a high performance device for smooth experience.
## Add dependency
diff --git a/docs/flutter/v2/release-notes/release-notes.mdx b/docs/flutter/v2/release-notes/release-notes.mdx
index 63771d0fdc..657819adc6 100644
--- a/docs/flutter/v2/release-notes/release-notes.mdx
+++ b/docs/flutter/v2/release-notes/release-notes.mdx
@@ -5,32 +5,93 @@ nav: 99
# Latest Versions
-| Package | Version |
-| -------------- | ------------------------------------------------------------------------------------------------------ |
-| hms_room_kit | [](https://pub.dev/packages/hms_room_kit) |
-| hmssdk_flutter | [](https://pub.dev/packages/hmssdk_flutter) |
+| Package | Version |
+| ---------------- | ---------------------------------------------------------------------------------------------------------- |
+| hms_room_kit | [](https://pub.dev/packages/hms_room_kit) |
+| hmssdk_flutter | [](https://pub.dev/packages/hmssdk_flutter) |
| hms_video_plugin | [](https://pub.dev/packages/hms_video_plugin) |
+# 1.11.0 - 2025-10-29
+
+| Package | Version |
+| ---------------- | ------- |
+| hms_room_kit | 1.2.0 |
+| hmssdk_flutter | 1.11.0 |
+| hms_video_plugin | 0.1.0 |
+
+## Breaking Changes
+
+⚠️ **This release includes important breaking changes to ensure compliance with Google Play's Android 16KB page size requirement.**
+
+### Minimum Version Requirements
+
+- **Flutter:** Minimum version upgraded to 3.24.0 (Recommended: 3.27.x)
+
+ Applications must now use Flutter 3.24.0 or higher. For optimal performance and compatibility, Flutter 3.27.x is recommended.
+
+- **Android API Level:** Minimum increased from API 21 to API 24 (Android 7.0)
+
+ The minimum supported Android version is now Android 7.0 (Nougat, API level 24). Recommended target is API 35 (Android 15).
+
+- **iOS Platform:** Minimum version upgraded to iOS 16.0
+
+ Applications must now target iOS 16.0 or higher as the minimum deployment target.
+
+- **Architecture Support:** Migrated to 64-bit only architectures
+
+ Support is now limited to 64-bit architectures only:
+
+ - Android: arm64-v8a and x86_64 only (32-bit architectures removed)
+ - iOS: arm64 only
+
+### Build Tools & Dependencies Updated
+
+- **Android Gradle Plugin (AGP):** Upgraded to 8.9.0
+- **Gradle:** Updated to 8.11.1
+- **Kotlin:** Updated to 2.1.10
+- **Android NDK:** Updated to r28 (28.0.12674087)
+
+## What's New
+
+### Android 16KB Page Size Support
+
+Added full support for Android devices with 16KB memory page sizes, ensuring optimal performance on modern Android devices and maintaining Google Play Store compliance.
+
+This change ensures your application will:
+
+- Run smoothly on next-generation Android devices
+- Meet Google Play's new requirements
+- Maintain optimal performance across all supported Android versions
+
+### Documentation & Examples
+
+- Added comprehensive Android Build Requirements documentation
+- Updated all sample applications with consistent build configurations
+- Updated dependencies across all packages and examples to ensure compatibility
+
+Uses Android SDK 2.9.78 & iOS SDK 1.17.0
+
+**Full Changelog**: [1.10.6...1.11.0](https://github.com/100mslive/100ms-flutter/compare/1.10.6...1.11.0)
+
# 1.10.6 - 2024-09-17
-| Package | Version |
-| ----------------------------| ------ |
-| hms_room_kit | 1.1.6 |
-| hmssdk_flutter | 1.10.6 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.6 |
+| hmssdk_flutter | 1.10.6 |
### Breaking Changes in hms_room_kit
-- Removed Noise Cancellation dependency from Prebuilt on Android
+- Removed Noise Cancellation dependency from Prebuilt on Android
Noise Cancellation dependency is removed from Prebuilt on Android.
Users will have to add the dependency manually in their Android project to use Noise Cancellation.
This change is made to reduce the size of the Prebuilt package.
Refer to the [Noise Cancellation](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/noise-cancellation) documentation for more details.
-
### hmssdk_flutter
-- Added Camera Zoom Controls in `HMSCameraControls`
+- Added Camera Zoom Controls in `HMSCameraControls`
Users can now control the camera zoom using the `HMSCameraControls` class. The `setZoom` method can be used to set the zoom level of the camera.
@@ -38,17 +99,17 @@ nav: 99
### hms_room_kit
-- Added support to control Automatic Gain Control and Noise Suppresion in Prebuilt
+- Added support to control Automatic Gain Control and Noise Suppresion in Prebuilt
Prebuilt now supports toggling Automatic Gain Control (AGC) and Noise Suppresion for better audio quality. Users can enable or disable AGC and Noise Suppresion from the prebuilt interface.
-- Resolved an issue where the Prebuilt UI was not updating on performing End Session
+- Resolved an issue where the Prebuilt UI was not updating on performing End Session
-- Hand Raise sorting based on Time
+- Hand Raise sorting based on Time
Hand Raise list is now sorted based on the time of raising the hand. Refer to the [Hand Raise](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/peer/large-room) documentation for more details.
-- Added support to perform Switch Role of any user on Prebuilt
+- Added support to perform Switch Role of any user on Prebuilt
Users can now switch the role of any user, if they have necessary permissions, from the Prebuilt interface. Refer to the [Change Role](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/peer/change-role) documentation for more details.
@@ -58,16 +119,16 @@ Uses Android SDK 2.9.67 & iOS SDK 1.16.1
# 1.10.5 - 2024-07-25
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.5 |
-| hmssdk_flutter | 1.10.5 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.5 |
+| hmssdk_flutter | 1.10.5 |
### hms_room_kit
-- Noise Cancellation initial state customisation
+- Noise Cancellation initial state customisation
- Noise cancellation initial state can now be customised from the prebuilt customiser.
+ Noise cancellation initial state can now be customised from the prebuilt customiser.
Uses Android SDK 2.9.64 & iOS SDK 1.15.0
@@ -75,25 +136,25 @@ Uses Android SDK 2.9.64 & iOS SDK 1.15.0
## 1.10.4 - 2024-07-01
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.4 |
-| hmssdk_flutter | 1.10.4|
-| hms_video_plugin | 0.0.2 |
+| Package | Version |
+| ---------------- | ------- |
+| hms_room_kit | 1.1.4 |
+| hmssdk_flutter | 1.10.4 |
+| hms_video_plugin | 0.0.2 |
### hmssdk_flutter
-- Live Transcription in webRTC calls
+- Live Transcription in webRTC calls
- HMSSDK now provides support for transcription in webRTC calls. You can now start/stop transcription using `HMSTranscriptionController` methods. HMSSDK provides also provides callbacks for transcription start/stop events. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions)
+ HMSSDK now provides support for transcription in webRTC calls. You can now start/stop transcription using `HMSTranscriptionController` methods. HMSSDK provides also provides callbacks for transcription start/stop events. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions)
-- Applications no longer need to request permissions for camera, microphone etc. HMSSDK handles the permissions internally. Checkout the [permissions guide](https://www.100ms.live/docs/flutter/v2/quickstart/quickstart#add-permissions)
+- Applications no longer need to request permissions for camera, microphone etc. HMSSDK handles the permissions internally. Checkout the [permissions guide](https://www.100ms.live/docs/flutter/v2/quickstart/quickstart#add-permissions)
### hms_room_kit
-- Introducing live transcription options in prebuilt
+- Introducing live transcription options in prebuilt
- Prebuilt now supports live transcription for better accessibility. Users can enable or disable live transcription from the prebuilt interface.
+ Prebuilt now supports live transcription for better accessibility. Users can enable or disable live transcription from the prebuilt interface.
Uses Android SDK 2.9.59 & iOS SDK 1.12.0
@@ -101,25 +162,24 @@ Uses Android SDK 2.9.59 & iOS SDK 1.12.0
## 1.10.3 - 2024-06-12
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.3 |
-| hmssdk_flutter | 1.10.3 |
-| hms_video_plugin | 0.0.1 |
-
+| Package | Version |
+| ---------------- | ------- |
+| hms_room_kit | 1.1.3 |
+| hmssdk_flutter | 1.10.3 |
+| hms_video_plugin | 0.0.1 |
### hms_room_kit
-- Hand Raise can now be controlled from dashboard
+- Hand Raise can now be controlled from dashboard
- Hand Raise feature can now be enabled or disabled from the dashboard prebuilt customiser.
+ Hand Raise feature can now be enabled or disabled from the dashboard prebuilt customiser.
### hms_video_plugin
-- Introducing support for Virtual Background and Blur
+- Introducing support for Virtual Background and Blur
- Users can now use virtual background and blur features in their video calls using the `hms_video_plugin`.
- Learn more about the feature [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background)
+ Users can now use virtual background and blur features in their video calls using the `hms_video_plugin`.
+ Learn more about the feature [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background)
Uses Android SDK 2.9.59 & iOS SDK 1.12.0
@@ -127,32 +187,32 @@ Uses Android SDK 2.9.59 & iOS SDK 1.12.0
## 1.10.2 - 2024-05-15
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.2 |
-| hmssdk_flutter | 1.10.2 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.2 |
+| hmssdk_flutter | 1.10.2 |
### hmssdk_flutter
-- Introducing Whiteboard support in HMSSDK
+- Introducing Whiteboard support in HMSSDK
HMSSDK now provides support for Whiteboard. You can now start/stop a whiteboard using `HMSWhiteboardController` methods. HMSSDK provides also provides callbacks for whiteboard start/stop events. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/whiteboard)
-- HLS Layer methods
+- HLS Layer methods
HLS Stream Layers can be controlled using the HMSHLSPlayerController's `getHLSLayers` and `setHLSLayer` methods. Learn more about the methods [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/hls-player)
-- `onPeerListUpdate` event on `HMSPreviewListener`
+- `onPeerListUpdate` event on `HMSPreviewListener`
The `onPeerListUpdate` event is now available on `HMSPreviewListener` to get updates on the peer list. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/set-up-video-conferencing/preview#supplementary-bytes)
### hms_room_kit
-- Whiteboard support in Prebuilt
+- Whiteboard support in Prebuilt
Prebuilt now supports whiteboard for better collaboration. Users can create, manage, and stop whiteboards directly from the prebuilt interface.
-- Introducing option to select layers in HLS Player
+- Introducing option to select layers in HLS Player
HLS Player now supports layer selection from HLS Player Settings.
@@ -162,27 +222,27 @@ Uses Android SDK 2.9.56 & iOS SDK 1.10.0
## 1.10.1 - 2024-04-26
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.1 |
-| hmssdk_flutter | 1.10.1 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.1 |
+| hmssdk_flutter | 1.10.1 |
### hmssdk_flutter
-- Support for captions in HLS Player
+- Support for captions in HLS Player
- HMSSDK now provides support for captions in HLS Player. You can now `enable` or `disable` captions in the HLS Player using the
- `HMSHLSPlayerController` methods. Moreover HMSSDK provides a new `onCues` callback to get captions. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/hls-player#how-to-enabledisable-captions)
+ HMSSDK now provides support for captions in HLS Player. You can now `enable` or `disable` captions in the HLS Player using the
+ `HMSHLSPlayerController` methods. Moreover HMSSDK provides a new `onCues` callback to get captions. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/hls-player#how-to-enabledisable-captions)
### hms_room_kit
-- Support for captions in HLS Player UI
+- Support for captions in HLS Player UI
- HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
+ HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
-- Introducing Landscape Mode for HLS Player
+- Introducing Landscape Mode for HLS Player
- HLS Player now supports landscape mode for better viewing experience.
+ HLS Player now supports landscape mode for better viewing experience.
Uses Android SDK 2.9.54 & iOS SDK 1.9.0
@@ -190,44 +250,44 @@ Uses Android SDK 2.9.54 & iOS SDK 1.9.0
## 1.10.0 - 2024-04-22
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.0 |
-| hmssdk_flutter | 1.10.0 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.0 |
+| hmssdk_flutter | 1.10.0 |
### hmssdk_flutter
-- Noise Cancellation Integration
+- Noise Cancellation Integration
+
+ You can enhance your app's audio quality with the newly integrated Noise Cancellation feature in HMSSDK. With this addition, control Noise Cancellation settings through the `HMSNoiseCancellationController`
- You can enhance your app's audio quality with the newly integrated Noise Cancellation feature in HMSSDK. With this addition, control Noise Cancellation settings through the `HMSNoiseCancellationController`
+ Learn more about leveraging this capability in your app by checking the documentation [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/noise-cancellation).
- Learn more about leveraging this capability in your app by checking the documentation [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/noise-cancellation).
-
-- [SIP](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect) Capability
+- [SIP](
) Capability
- HMSSDK now offers a way to differentiate between SIP and non-SIP users in the Room. You can use the `type` property in the `HMSPeer` class to check if a peer is a SIP user.
+ HMSSDK now offers a way to differentiate between SIP and non-SIP users in the Room. You can use the `type` property in the `HMSPeer` class to check if a peer is a SIP user.
- Learn more about SIP Capabilities [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/sip).
+ Learn more about SIP Capabilities [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/sip).
-- `HMSHLSPlayer` now uses Hybrid Composition on Android for better performance.
+- `HMSHLSPlayer` now uses Hybrid Composition on Android for better performance.
### hms_room_kit
-- Newly designed UI for SIP Peers
-
- SIP peers will now have a newly designed UI to match the overall theme of the application.
+- Newly designed UI for SIP Peers
-- Enhanced Prebuilt with Noise Cancellation
+ SIP peers will now have a newly designed UI to match the overall theme of the application.
- Prebuilt supports noise cancellation out of the box. Users can enable or disable noise cancellation from the prebuilt interface.
+- Enhanced Prebuilt with Noise Cancellation
-- All-New HLS Player Interface
+ Prebuilt supports noise cancellation out of the box. Users can enable or disable noise cancellation from the prebuilt interface.
- HLS Player now has a new look and feel to enhance the overall user experience.
+- All-New HLS Player Interface
-- Removed `flutter_foreground_task` dependency from prebuilt
+ HLS Player now has a new look and feel to enhance the overall user experience.
- Prebuilt no longer uses `flutter_foreground_task` package. For apps that require foreground service, the package can be added on the application level.
+- Removed `flutter_foreground_task` dependency from prebuilt
+
+ Prebuilt no longer uses `flutter_foreground_task` package. For apps that require foreground service, the package can be added on the application level.
Uses Android SDK 2.9.54 & iOS SDK 1.8.0
@@ -235,14 +295,14 @@ Uses Android SDK 2.9.54 & iOS SDK 1.8.0
## 1.9.14 - 2024-04-01
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.0.17 |
-| hmssdk_flutter | 1.9.14 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.0.17 |
+| hmssdk_flutter | 1.9.14 |
### hmssdk_flutter
-- Resolved an issue on iOS where video appears stretched in landscape mode
+- Resolved an issue on iOS where video appears stretched in landscape mode
Uses Android SDK 2.9.51 & iOS SDK 1.8.0
@@ -250,22 +310,22 @@ Uses Android SDK 2.9.51 & iOS SDK 1.8.0
## 1.9.13 - 2024-03-15
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.0.16 |
-| hmssdk_flutter | 1.9.13 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.0.16 |
+| hmssdk_flutter | 1.9.13 |
### hmssdk_flutter
-- Leave Room Immediately if the app is killed(iOS only)
+- Leave Room Immediately if the app is killed(iOS only)
- HMSSDK automatically triggers the `leave` method call when the iOS application is terminated.
+ HMSSDK automatically triggers the `leave` method call when the iOS application is terminated.
### hms_room_kit
-- Ability to join rooms directly without a preview
+- Ability to join rooms directly without a preview
- Prebuilt now allows direct room joining without preview, customizable via the dashboard's `Customize Prebuilt` section.
+ Prebuilt now allows direct room joining without preview, customizable via the dashboard's `Customize Prebuilt` section.
Updated to Android SDK 2.9.51 & iOS SDK 1.6.0
@@ -273,28 +333,28 @@ Updated to Android SDK 2.9.51 & iOS SDK 1.6.0
## 1.9.12 - 2024-03-04
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.0.15 |
-| hmssdk_flutter | 1.9.12 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.0.15 |
+| hmssdk_flutter | 1.9.12 |
### hmssdk_flutter
-- Introducing methods to fetch polls, questions, leaderboards and results
+- Introducing methods to fetch polls, questions, leaderboards and results
- Users can now fetch polls based on the poll state, questions for a poll and poll results
- using the `fetchPollList`, `fetchPollQuestions` and `getPollResults` methods.
- Checkout the docs [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/room/polls#fetchpolllist)
+ Users can now fetch polls based on the poll state, questions for a poll and poll results
+ using the `fetchPollList`, `fetchPollQuestions` and `getPollResults` methods.
+ Checkout the docs [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/room/polls#fetchpolllist)
### hms_room_kit
-- Ability to fetch concluded and draft polls
+- Ability to fetch concluded and draft polls
- Prebuilt now fetches all the polls happened during the session. Additionally, users can now retrieve draft polls from other platforms and launch them.
+ Prebuilt now fetches all the polls happened during the session. Additionally, users can now retrieve draft polls from other platforms and launch them.
-- Ability to join Room using Auth Token
+- Ability to join Room using Auth Token
- Prebuilt now supports joining rooms using `Auth Token` along with `Room codes`
+ Prebuilt now supports joining rooms using `Auth Token` along with `Room codes`
Updated to Android SDK 2.9.4 & iOS SDK 1.6.0
@@ -312,12 +372,12 @@ Updated to Android SDK 2.9.4 & iOS SDK 1.6.0
- Introducing Leaderboard APIs
Users can now fetch Rankings and Quiz Summary using the `fetchLeaderboard` method. More information about the Leaderboard can be found [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/room/polls#quiz-leaderboard)
-
+
### hms_room_kit
- Introducing Leaderboards to our Quiz experience
- Adding Leaderboard to our Quizzes with Leaderboard Summary and Rankings.
+ Adding Leaderboard to our Quizzes with Leaderboard Summary and Rankings.
Updated to Android SDK 2.9.4 & iOS SDK 1.5.1
diff --git a/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx b/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx
index d69e3183d1..a1f547dadf 100644
--- a/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx
+++ b/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx
@@ -8,6 +8,7 @@ nav: 3.6
- Amazon Simple Storage Service (AWS S3)
- Google Cloud Storage (GCP)
- Alibaba Object Storage (OSS)
+- Azure Blob Storage
By default, recordings will be stored temporarily (for 15 days) in a storage location managed by 100ms if nothing is configured. Post a successful recording, the recording assets can be accessed on the [100ms dashboard](https://dashboard.100ms.live/sessions) or [through the REST API](/server-side/v2/api-reference/recording-assets/get-asset).
@@ -59,12 +60,12 @@ You can configure storage in your template's `Recording` tab on the 100ms Dashbo
Use the [Policy API](https://www.100ms.live/docs/server-side/v2/api-reference/policy/create-template-via-api) to programmatically configure your storage location.
-You can configure the **`type`** field of recording object to `s3` for AWS, `oss` for Alibaba Object Storage Service and `gs` for Google Cloud Storage with the following details:
+You can configure the **`type`** field of recording object to `s3` for AWS, `oss` for Alibaba Object Storage Service, `gs` for Google Cloud Storage, and `azure` for Azure Blob Storage with the following details:
-- Access Key: Access Key for your OSS/GCP Bucket
-- Secret Key: Secret Key for your OSS/GCP Bucket
-- Bucket: Name of the bucket
-- Region: Name of the region where your bucket is located in
+- Access Key: Access Key for your storage bucket (for Azure, use the Storage Account Name)
+- Secret Key: Secret Key for your storage bucket (for Azure, use the Storage Account Key)
+- Bucket: Name of the bucket (for Azure, use the Container Name)
+- Region: Name of the region where your bucket is located in (for Azure, this field is not required)
- Prefix for Upload Path: Define the directory name (optional)
diff --git a/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx b/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx
index 6543dbdd62..91d86e6a0c 100644
--- a/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx
+++ b/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx
@@ -1,14 +1,14 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 4.99
---
-100ms real-time transcription engine generates a live transcript (closed captions) during a conferencing session.
+100ms real-time transcription engine generates a live transcript (closed captions) during a conferencing session.
The SDK provides a callback with the transcript for each peer when they speak.
## Minimum Requirements
-- Minimum 100ms SDK version required is 1.12.0
+- Minimum 100ms SDK version required is 1.12.0
## How to check if captions are started in a room?
@@ -36,11 +36,11 @@ Here is an example implemenation:
public func on(transcripts: HMSTranscripts) {
transcripts.transcripts.forEach { transcript in
let peerModel = transcript.peer
-
+
if !(lastTranscript?.isFinal ?? false) {
_ = self.transcriptArray.popLast()
}
-
+
if peerModel == lastTranscript?.peer {
self.transcriptArray += [" " + transcript.transcript]
}
@@ -54,14 +54,16 @@ Here is an example implemenation:
self.transcriptArray += ["\n**\(peerModel.name.trimmingCharacters(in: .whitespacesAndNewlines)):** "]
self.transcriptArray += ["\(transcript.transcript)"]
}
-
+
lastTranscript = transcript
}
}
```
## How to toggle Live Transcriptions on/off
+
You can toggle live transcriptions on/off at runtime that can help save costs. Use startTranscription() method to start the transcription and stopTranscription() method to stop transcription like below:
+
```swift
// Start Real Time Transcription
sdk.startTranscription() { success, error in
@@ -81,4 +83,3 @@ You can toggle live transcriptions on/off at runtime that can help save costs. U
}
}
```
-
diff --git a/docs/ios/v2/release-notes/release-notes.mdx b/docs/ios/v2/release-notes/release-notes.mdx
index c002dbbffa..f9eefe407c 100644
--- a/docs/ios/v2/release-notes/release-notes.mdx
+++ b/docs/ios/v2/release-notes/release-notes.mdx
@@ -4,6 +4,12 @@ nav: 6.1
description: Release Notes for 100ms iOS SDK
---
+## 1.17.1 - 2025-11-17
+### Fixed
+
+- Enum conflicts with other WebRTC integrations
+
+
## 1.17.0 - 2025-01-27
### Changed
diff --git a/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx b/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx
index 14f5c1ec3d..406fb93e17 100644
--- a/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx
+++ b/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx
@@ -1,5 +1,5 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 1.24
---
@@ -11,87 +11,179 @@ nav: 1.24
## How to implement closed captioning?
-The `useTranscript` hook is implemented with the `onTranscript` callback as shown below:
+Each transcript entry has the following structure:
```ts
- export interface HMSTranscript {
- // start time in second
- start: number;
- // end time in seconds
- end: number;
- // peer_id of the speaker
- peer_id: string;
- // transcription will continue to update the transcript until you receive final keyword
- final: boolean;
- // closed caption
- transcript: string;
- }
+interface HMSTranscript {
+ start: number; // start time in seconds
+ end: number; // end time in seconds
+ peer_id: string; // peer_id of the speaker
+ final: boolean; // true when the transcript segment is finalized
+ transcript: string; // the caption text
+}
+```
+
+The transcription engine sends interim results as the speaker talks, then a final result once the segment is complete. Interim results update the same segment in place, while final results indicate that a new segment will follow.
+
+
+
+
+
+In plain JavaScript, transcript data arrives as `NEW_MESSAGE` notifications of type `hms_transcript`. Subscribe via `hmsNotifications.onNotification`:
- export interface useHMSTranscriptInput {
- onTranscript?: (data: HMSTranscript[]) => void;
- handleError?: hooksErrHandler;
+```js
+import { HMSNotificationTypes } from '@100mslive/hms-video-store';
+
+const unsubscribe = hmsNotifications.onNotification((notification) => {
+ const msg = notification.data;
+ if (msg && msg.type === 'hms_transcript') {
+ const parsed = JSON.parse(msg.message);
+ const transcripts = parsed.results; // HMSTranscript[]
+
+ transcripts.forEach((entry) => {
+ console.log(
+ `${entry.peer_id}: ${entry.transcript} (final: ${entry.final})`
+ );
+ });
}
+}, HMSNotificationTypes.NEW_MESSAGE);
+
+// call unsubscribe() when you no longer need transcript updates
+```
+
+To resolve the `peer_id` to a display name, use the store:
- export const useTranscript = ({ onTranscript, handleError = logErrorHandler }: useHMSTranscriptInput);
+```js
+import { selectPeerNameByID } from '@100mslive/hms-video-store';
+const peerName = hmsStore.getState(selectPeerNameByID(entry.peer_id));
```
+
+
+
+
+Use the `useTranscript` hook with the `onTranscript` callback:
+
+```jsx
+import { useTranscript } from '@100mslive/react-sdk';
+
+function CaptionsViewer() {
+ useTranscript({
+ onTranscript: (transcripts) => {
+ // transcripts is HMSTranscript[]
+ transcripts.forEach((entry) => {
+ console.log(
+ `${entry.peer_id}: ${entry.transcript} (final: ${entry.final})`
+ );
+ });
+ },
+ });
+
+ return null;
+}
+```
+
+
+
## How can you check if closed captions are enabled in a room?
-```ts
+
+
+
+
+```js
+import { selectIsTranscriptionEnabled } from '@100mslive/hms-video-store';
- import { selectIsTranscriptionEnabled, useHMSStore } from '@100mslive/react-sdk';
- // use this to check if caption is enabled for your room.
- const isCaptionPresent: boolean = useHMSStore(selectIsTranscriptionEnabled);
+// read once
+const isCaptionEnabled = hmsStore.getState(selectIsTranscriptionEnabled);
+// or subscribe to changes
+hmsStore.subscribe((enabled) => {
+ console.log('Captions enabled:', enabled);
+}, selectIsTranscriptionEnabled);
```
+
+
+
+
+```jsx
+import { selectIsTranscriptionEnabled, useHMSStore } from '@100mslive/react-sdk';
+
+function CaptionStatus() {
+ const isCaptionEnabled = useHMSStore(selectIsTranscriptionEnabled);
+ return {isCaptionEnabled ? 'Captions ON' : 'Captions OFF'};
+}
+```
+
+
+
## How to toggle closed captions on or off?
Closed captions can be dynamically enabled or disabled at runtime within a given room, depending on user requirements. This capability helps minimize unnecessary usage costs by ensuring that captions are enabled only when explicitly needed by the user(s).
-```ts
+### Check permission
- // Currently 100ms supports closed captions type mode
- export declare enum HMSTranscriptionMode {
- CAPTION = "caption"
- }
+Before starting or stopping transcription, verify that the local peer has the required permission:
- export interface TranscriptionConfig {
- mode: HMSTranscriptionMode;
- }
+
- // admin/host role need to startTranscription if he had the access, here is how you will check if you had access to start transcription
- const isTranscriptionAllowed = useHMSStore(selectIsTranscriptionAllowedByMode(HMSTranscriptionMode.CAPTION));
+
+```js
+import {
+ HMSTranscriptionMode,
+ selectIsTranscriptionAllowedByMode
+} from '@100mslive/hms-video-store';
+
+const isTranscriptionAllowed = hmsStore.getState(
+ selectIsTranscriptionAllowedByMode(HMSTranscriptionMode.CAPTION)
+);
```
-Use `hmsActions.startTranscription()` method to start the closed captions.
+
+
-```ts
- async startCaption() {
- try {
- await hmsActions.startTranscription({
- mode: HMSTranscriptionMode.CAPTION,
- });
- } catch(err) {
- console.log(err);
- }
- }
+```jsx
+import {
+ HMSTranscriptionMode,
+ selectIsTranscriptionAllowedByMode,
+ useHMSStore
+} from '@100mslive/react-sdk';
+const isTranscriptionAllowed = useHMSStore(
+ selectIsTranscriptionAllowedByMode(HMSTranscriptionMode.CAPTION)
+);
```
-Use `hmsActions.stopTranscription()` method to stop closed captions.
+
-```ts
- async stopCaption() {
- try {
- await hmsActions.stopTranscription({
- mode: HMSTranscriptionMode.CAPTION,
- });
- } catch(err) {
- console.log(err);
- }
- }
-```
\ No newline at end of file
+### Start captions
+
+Use `hmsActions.startTranscription()` to enable closed captions for the room:
+
+```js
+try {
+ await hmsActions.startTranscription({
+ mode: HMSTranscriptionMode.CAPTION,
+ });
+} catch (err) {
+ console.error('Failed to start captions:', err);
+}
+```
+
+### Stop captions
+
+Use `hmsActions.stopTranscription()` to disable closed captions:
+
+```js
+try {
+ await hmsActions.stopTranscription({
+ mode: HMSTranscriptionMode.CAPTION,
+ });
+} catch (err) {
+ console.error('Failed to stop captions:', err);
+}
+```
diff --git a/docs/javascript/v2/release-notes/release-notes.mdx b/docs/javascript/v2/release-notes/release-notes.mdx
index e166dfa4db..0ae0e850df 100644
--- a/docs/javascript/v2/release-notes/release-notes.mdx
+++ b/docs/javascript/v2/release-notes/release-notes.mdx
@@ -14,6 +14,87 @@ description: Release Notes for 100ms.live JavaScript SDK
| @100mslive/hms-noise-cancellation | [](https://badge.fury.io/js/%40100mslive%2Fhms-noise-cancellation) |
| @100mslive/hms-virtual-background | [](https://badge.fury.io/js/%40100mslive%2Fhms-virtual-background) |
+## 2026-02-10
+
+Released: `@100mslive/hms-video-store@0.13.2`, `@100mslive/react-sdk@0.11.2`, `@100mslive/hls-player@0.4.2`, `@100mslive/roomkit-react@0.4.2`, `@100mslive/hms-whiteboard@0.1.2`
+
+### Added:
+
+- Enhanced track analytics capturing detailed metadata for local audio and video tracks
+- Online/Offline connection status indicators in whiteboard for better visibility
+- Debug logging for whiteboard errors to aid in troubleshooting
+
+### Fixed:
+
+- Whiteboard connection status handling improvements with better error recovery
+
+## 2026-01-20
+
+Released: `@100mslive/hms-video-store@0.13.1`, `@100mslive/react-sdk@0.11.1`, `@100mslive/hls-player@0.4.1`, `@100mslive/roomkit-react@0.4.1`
+
+### Added:
+
+- Capture CPU pressure state per sample for better performance monitoring
+- Enhanced track interruption analytics with detailed track information
+- Source stats with fallback mechanism for improved reliability
+- Upgraded Effects SDK to version 3.6.2 for better performance
+
+### Fixed:
+
+- macOS compatibility check in prebuilt binaries
+- Computation of sourceFramesDropped metric in local track stats
+
+## 2025-12-04
+
+Released: `@100mslive/hms-video-store@0.13.0`, `@100mslive/react-sdk@0.11.0`, `@100mslive/hls-player@0.4.0`, `@100mslive/roomkit-react@0.4.0`
+
+### Added:
+
+- Upgraded UA Parser JS library for improved user agent detection
+- CPU state capture in publish analytics
+- Upgraded Effects (Virtual Background) plugin with improved CPU performance
+
+### Fixed:
+
+- Audio output device selection issues on macOS Safari 26
+- Stored devices not being removed when they become unavailable, causing constraints failure error on join
+- Error handling when no device is available during device changes
+- Audio not being published when Noise Cancellation is enabled on low network conditions
+
+## 2025-08-26
+
+Released: `@100mslive/hms-video-store@0.12.38`, `@100mslive/react-sdk@0.10.38`, `@100mslive/hls-player@0.3.38`, `@100mslive/roomkit-react@0.3.38`
+
+### Fixed:
+
+- Additional Permission popup getting shown after dismissing the first one, when audio/video is enabled for first time
+- Permission popup not shown when tab is active and then becomes active if permissions are denied earlier
+
+## 2025-08-12
+
+Released: `@100mslive/hms-video-store@0.12.37`, `@100mslive/react-sdk@0.10.37`, `@100mslive/hls-player@0.3.37`, `@100mslive/roomkit-react@0.3.37`
+
+### Fixed:
+
+- `deviceId` overconstrained error when joining or toggling video/audio for first time or skip preview flows
+
+## 2025-08-08
+
+Released: `@100mslive/hms-video-store@0.12.36`, `@100mslive/react-sdk@0.10.36`, `@100mslive/hls-player@0.3.36`, `@100mslive/roomkit-react@0.3.36`
+
+### Fixed:
+
+- Use `exact` constraint for deviceId in getUserMedia calls to prevent device selection issues due to this [chromium bug](https://issues.chromium.org/issues/436065976)
+
+## 2025-05-15
+
+Released: `@100mslive/hms-video-store@0.12.35`, `@100mslive/react-sdk@0.10.35`, `@100mslive/hls-player@0.3.35`, `@100mslive/roomkit-react@0.3.35`
+
+### Fixed:
+
+- Add stop reason for `hls-stop`
+- Roomkit Prebuilt: Duplicate `hls-stop` call on end call
+
## 2024-05-15
Released: `@100mslive/hms-video-store@0.12.34`, `@100mslive/react-sdk@0.10.34`, `@100mslive/hls-player@0.3.34`, `@100mslive/roomkit-react@0.3.34`, `@100mslive/hms-whiteboard@0.0.24`, `@100mslive/hms-virtual-background@1.13.34`
diff --git a/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx b/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx
index 6ffd884f79..d94eb55515 100644
--- a/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx
+++ b/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx
@@ -1,55 +1,49 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 13.4
---
100ms' real-time transcription engine generates a live transcript (closed captions) during a conferencing session. The SDK provides a callback with transcript for each peer when they speak.
-
## Minimum Requirements
- Minimum `react-native-hms` version required is `1.10.7`
- Minimum `react-native-room-kit` version required is `1.2.0`
-
## Checking if captions are enabled in a room
To check if WebRTC (not hls) captions are enabled in a room. Look for any transcriptions being in a started state in the room data.
```js
-const captionsEnabled = (
- hmsInstance.getRoom()
- ?.transcriptions
- ?.some((transcription) => {
- return transcription.state === TranscriptionState.STARTED;
- })
- ) || false; // Using `false` as default
+const captionsEnabled =
+ hmsInstance.getRoom()?.transcriptions?.some((transcription) => {
+ return transcription.state === TranscriptionState.STARTED;
+ }) || false; // Using `false` as default
```
-
## How to implement captions?
Implement `fun onTranscripts(transcripts: HmsTranscripts)` in the `HMSUpdateListener` callback.
-
## Toggling Live Transcripts
+
To save on cost, live transcriptions can be disabled for everyone at runtime and toggled on again when required.
```js
// Start Real Time Transcription
try {
- await hmsInstance.startRealTimeTranscription()
+ await hmsInstance.startRealTimeTranscription();
} catch (error) {
- // Handle error occurred while starting Transcription
+ // Handle error occurred while starting Transcription
}
```
```js
// Stop Real Time Transcription
try {
- await hmsInstance.stopRealTimeTranscription()
+ await hmsInstance.stopRealTimeTranscription();
} catch (error) {
- // Handle error occurred while starting Transcription
+ // Handle error occurred while starting Transcription
}
```
@@ -71,24 +65,23 @@ When Live Transcripts are toggled for room, you get `TRANSCRIPTIONS_UPDATED` upd
```js
hmsInstance.addEventListener(
- HMSUpdateListenerActions.ON_ROOM_UPDATE,
- (data: { room: HMSRoom; type: HMSRoomUpdate; }) => {
-
- if (data.type === HMSRoomUpdate.TRANSCRIPTIONS_UPDATED) {
- // Handle Transcriptions Update like you may update UI if transcriptions were started or stopped
-
- const captionTranscription = data.room.transcriptions?.find(
- (transcription) => transcription.mode === TranscriptionsMode.CAPTION
- );
-
- if (captionTranscription?.state === TranscriptionState.STARTED) {
- // Transcriptions Started in Room
- } else if (captionTranscription?.state === TranscriptionState.STOPPED) {
- // Transcriptions Stopped in Room
- } else if (captionTranscription?.state === TranscriptionState.FAILED) {
- // Transcriptions failed to Start or Stop
- }
+ HMSUpdateListenerActions.ON_ROOM_UPDATE,
+ (data: { room: HMSRoom, type: HMSRoomUpdate }) => {
+ if (data.type === HMSRoomUpdate.TRANSCRIPTIONS_UPDATED) {
+ // Handle Transcriptions Update like you may update UI if transcriptions were started or stopped
+
+ const captionTranscription = data.room.transcriptions?.find(
+ (transcription) => transcription.mode === TranscriptionsMode.CAPTION
+ );
+
+ if (captionTranscription?.state === TranscriptionState.STARTED) {
+ // Transcriptions Started in Room
+ } else if (captionTranscription?.state === TranscriptionState.STOPPED) {
+ // Transcriptions Stopped in Room
+ } else if (captionTranscription?.state === TranscriptionState.FAILED) {
+ // Transcriptions failed to Start or Stop
+ }
+ }
}
- }
);
```
diff --git a/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx b/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx
index 5d1e9b9318..e6a2b994e3 100644
--- a/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx
+++ b/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx
@@ -1,5 +1,5 @@
---
-title: Virtual Background Plugin (Beta)
+title: Virtual Background Plugin
nav: 13.3
---
@@ -13,19 +13,19 @@ This guide provides an overview of usage of the Virtual Background plugin of 100
## Minimum Requirements
-- Minimum `@100mslive/react-native-hms` SDK version is `^1.10.6`
-- `@100mslive/react-native-video-plugin` library is required
-
+- Minimum `@100mslive/react-native-hms` SDK version is `^1.10.6`
+- `@100mslive/react-native-video-plugin` library is required
## Limitations
### Android
-- Has poor fps on older android phones
+
+- Has poor fps on older android phones
### iOS
-- Minimum iOS version required to support Virtual Background plugin is `iOS 15`
-- Virtual background plugin is in beta stage and may have performance issues on iPhone X, 8, 7, 6 and other older devices. We recommend that you use this feature on a high performance device for smooth experience.
+- Minimum iOS version required to support Virtual Background plugin is `iOS 16`
+- Virtual background plugin may have performance issues on older iPhone devices. We recommend that you use this feature on a high performance device for smooth experience.
## Usage
diff --git a/docs/react-native/v2/release-notes/release-notes.mdx b/docs/react-native/v2/release-notes/release-notes.mdx
index 5585d527b2..760667cde0 100644
--- a/docs/react-native/v2/release-notes/release-notes.mdx
+++ b/docs/react-native/v2/release-notes/release-notes.mdx
@@ -5,12 +5,148 @@ nav: 4.1
## Latest Versions
-| Package | Version |
-| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
-| @100mslive/react-native-room-kit | [](https://www.npmjs.com/package/@100mslive/react-native-room-kit) |
-| @100mslive/react-native-hms | [](https://www.npmjs.com/package/@100mslive/react-native-hms) |
-| @100mslive/react-native-video-plugin | [](https://www.npmjs.com/package/@100mslive/react-native-video-plugin) |
+| Package | Version |
+| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
+| @100mslive/react-native-room-kit | [](https://www.npmjs.com/package/@100mslive/react-native-room-kit) |
+| @100mslive/react-native-hms | [](https://www.npmjs.com/package/@100mslive/react-native-hms) |
+| @100mslive/react-native-video-plugin | [](https://www.npmjs.com/package/@100mslive/react-native-video-plugin) |
+## 1.12.0 - 2025-10-28
+
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.3.0 |
+| @100mslive/react-native-hms | 1.12.0 |
+| @100mslive/react-native-video-plugin | 1.1.0 |
+
+## Highlights
+
+This is a major release bringing **React Native 0.77+ support**, **Android 16KB page size compliance** for Google Play 2025 requirements, and significant modernization of the SDK build system. This release includes breaking changes - please review the migration guide below.
+
+### Key Improvements
+
+- ⚡ **React Native 0.77.3 Support** - Full compatibility with the latest React Native version with improved performance and stability
+- 📱 **Android 16KB Page Size Compliance** - Ready for Google Play's 2025 requirements for Android 15+ devices
+- 📷 **Modernized QR Code Scanner** - Migrated to react-native-vision-camera 4.7.2 with ML Kit for better performance
+- 🏗️ **Build System Modernization** - Updated to AGP 8.7.2, Gradle 8.11.1, Kotlin 2.0.21, and Java 17
+- 🚀 **Performance Improvements** - Major dependency updates across 20+ packages
+
+## react-native-hms (1.12.0)
+
+### React Native 0.77.3 Support
+
+The SDK now fully supports React Native 0.77.3 (upgraded from 0.71.19), bringing 6 major versions of improvements including:
+
+- Enhanced performance and stability
+- Latest React 18.3.1 features
+- Improved developer experience
+- Better TypeScript support
+
+### Android 16KB Page Size Compliance
+
+Full compliance with Google Play's 2025 requirements for Android 15+ devices:
+
+- NDK r27 support with 16KB page size
+- Experimental flags enabled for compatibility
+- Ready for next-generation Android devices
+- Ensures your app won't be blocked on Google Play
+
+### Architecture Updates
+
+- **64-bit Only Support**: Dropped 32-bit architectures (armeabi-v7a, x86) to support modern Android requirements
+- **Supported Architectures**: arm64-v8a, x86_64
+- Improved performance on modern devices
+
+### Native SDK Updates
+
+- **Android SDK**: Updated to **2.9.78** (from 2.9.69)
+- **iOS SDK**: Updated to **1.17.0** (from 1.16.5)
+- Includes latest bug fixes, performance improvements, and new features from native SDKs
+
+### Modernized Build System
+
+**Android:**
+
+- Android Gradle Plugin: 8.7.2
+- Gradle: 8.11.1
+- Kotlin: 2.0.21
+- Java: 17 (minimum required)
+- Target SDK: 35
+- Compile SDK: 35
+- Minimum SDK: 24 (Android 7.0)
+
+**iOS:**
+
+- Minimum iOS: 16.0 (from 13.0)
+- Updated Podfile for RN 0.77.3 compatibility
+- New Architecture explicitly disabled for stability
+
+### Technical Improvements
+
+- Fixed TypeScript event emitter and session store imports
+- Improved build performance with modern tooling
+- Better type safety and developer experience
+- Removed Flipper support (deprecated)
+- Package namespace updated: com.rnexample → live.hms.rn
+- MainApplication migrated from Java to Kotlin
+
+## react-native-room-kit (1.3.0)
+
+### Major Dependency Updates
+
+Updated core dependencies for better performance, stability, and RN 0.77.3 compatibility:
+
+| Package | Old Version | New Version |
+| ------------------------------ | ----------- | ----------- |
+| react-native-reanimated | 3.4.2 | 3.16.7 |
+| react-native-screens | 3.25.0 | 4.18.0 |
+| react-native-gesture-handler | 2.15.0 | 2.22.0 |
+| react-native-safe-area-context | 3.3.0 | 5.6.1 |
+| react-native-permissions | 3.4.0 | 4.1.5 |
+| lottie-react-native | 6.7.2 | 7.3.4 |
+| react-native-device-info | 11.1.0 | 14.0.0 |
+| @shopify/flash-list | 1.4.3 | 1.7.1 |
+| zustand | - | 5.0.8 (new) |
+
+### Technical Improvements
+
+- Fixed TypeScript AnimatedStyleProp type errors
+- Improved keyboard avoiding view type safety
+- Added 5 critical patches for RN 0.77.3 compatibility using patch-package
+- Security fixes from npm audit
+- Better performance with updated dependencies
+
+---
+
+## Breaking Changes
+
+### Minimum Requirements Updated
+
+| Requirement | Previous | New | Impact |
+| ---------------- | ------------ | ------------------------- | ----------------- |
+| **Android** | 5.0 (API 21) | **7.0 (API 24)** | ~2.6% of devices |
+| **iOS** | 13.0 | **16.0** | ~5% of devices |
+| **React Native** | 0.60+ | **0.77.3+** | Major upgrade |
+| **Node.js** | 14+ | **18+** (22+ recommended) | - |
+| **Java** | 8/11 | **17+** | Build requirement |
+
+### Architecture Changes
+
+- **32-bit Android devices no longer supported**
+ - Dropped: armeabi-v7a, x86
+ - Supported: arm64-v8a, x86_64 only
+ - Reason: Required for 16KB page size compliance and modern Android
+
+### Peer Dependencies
+
+- React Native peer dependency updated to `>=0.77.3`
+- React peer dependency updated to `>=18.2.0`
+
+## Version Details
+
+**Uses Android SDK 2.9.78 & iOS SDK 1.17.0**
+
+**Full Changelog**: [1.11.0...1.12.0](https://github.com/100mslive/100ms-react-native/compare/1.11.0...1.12.0)
## 1.11.0 - 2024-10-29
@@ -21,44 +157,43 @@ nav: 4.1
### react-native-hms
-- Added namespace in Android to support compile target 34 and above
+- Added namespace in Android to support compile target 34 and above
-- Resolved an issue in PIP on Android where screen could be stuck when switching to PIP mode fails
+- Resolved an issue in PIP on Android where screen could be stuck when switching to PIP mode fails
### react-native-room-kit
-- Disabled capturing of network quality in Preview screen by default
+- Disabled capturing of network quality in Preview screen by default
Uses Android SDK 2.9.69 & iOS SDK 1.16.5
**Full Changelog**: [1.10.9...1.11.0](https://github.com/100mslive/react-native-hms/compare/1.10.9...1.11.0)
-
## 1.10.9 - 2024-07-31
-| Package | Version |
-| -------------------------------- | ------- |
-| @100mslive/react-native-room-kit | 1.2.2 |
-| @100mslive/react-native-hms | 1.10.9 |
-| @100mslive/react-native-video-plugin | 1.0.0 |
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.2.2 |
+| @100mslive/react-native-hms | 1.10.9 |
+| @100mslive/react-native-video-plugin | 1.0.0 |
### react-native-hms
-- Added support for runtime permission handling in Android
+- Added support for runtime permission handling in Android
Users can now request runtime permissions for Camera, Microphone on Android devices. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/permissions).
-- Added support for running apps on Android 14
+- Added support for running apps on Android 14
-- Corrected return types of APIs to be more consistent
+- Corrected return types of APIs to be more consistent
### react-native-room-kit
-- Added support for default state of Noise Cancellation when entering a Room
+- Added support for default state of Noise Cancellation when entering a Room
Users can now set the default state of Noise Cancellation when entering a Room. This can be set in the Prebuilt Customizer.
-- Added support for Switching Role of a Peer in Prebuilt UI
+- Added support for Switching Role of a Peer in Prebuilt UI
Users can now switch the role of a Peer in the Prebuilt UI. This can be done by clicking on the Peer's name in the Participants List or on the Remote Peer Settings icon.
@@ -66,7 +201,6 @@ Uses Android SDK 2.9.64 & iOS SDK 1.15.0
**Full Changelog**: [1.10.8...1.10.9](https://github.com/100mslive/react-native-hms/compare/1.10.8...1.10.9)
-
## 1.10.8 - 2024-07-10
| Package | Version |
@@ -76,13 +210,13 @@ Uses Android SDK 2.9.64 & iOS SDK 1.15.0
### react-native-hms
-- Added support for PIP Mode in iOS
+- Added support for PIP Mode in iOS
Users can now switch to Picture-in-Picture mode on iOS devices while in a Room. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/render-video/pip-mode).
### react-native-room-kit
-- Added support for PIP Mode in Prebuilt UI
+- Added support for PIP Mode in Prebuilt UI
Users can now switch to Picture-in-Picture mode in the Prebuilt UI.
@@ -90,24 +224,23 @@ Uses Android SDK 2.9.62 & iOS SDK 1.13.0
**Full Changelog**: [1.10.7...1.10.8](https://github.com/100mslive/react-native-hms/compare/1.10.7...1.10.8)
-
## 1.10.7 - 2024-07-01
-| Package | Version |
-| -------------------------------- | ------- |
-| @100mslive/react-native-room-kit | 1.2.0 |
-| @100mslive/react-native-hms | 1.10.7 |
-| @100mslive/react-native-video-plugin | 0.1.2 |
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.2.0 |
+| @100mslive/react-native-hms | 1.10.7 |
+| @100mslive/react-native-video-plugin | 0.1.2 |
### react-native-hms
-- Live Transcriptions in WebRTC Calls
+- Live Transcriptions in WebRTC Calls
HMSSDK now provides support for Live Transcriptions in WebRTC calls. Users can now enable/disable Live Transcriptions during a call. The SDK provides a callback with the transcript for each peer when they speak. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions).
### react-native-room-kit
-- Introducing Live Transcriptions options in Prebuilt
+- Introducing Live Transcriptions options in Prebuilt
Prebuilt now supports live transcription for better accessibility. Users can enable or disable live transcription from the prebuilt interface.
@@ -115,46 +248,42 @@ Uses Android SDK 2.9.60 & iOS SDK 1.12.0
**Full Changelog**: [1.10.6...1.10.7](https://github.com/100mslive/react-native-hms/compare/1.10.6...1.10.7)
-
## 1.10.6 - 2024-06-10
-| Package | Version |
-| -------------------------------- | ------- |
-| @100mslive/react-native-room-kit | 1.1.9 |
-| @100mslive/react-native-hms | 1.10.6 |
-| @100mslive/react-native-video-plugin | 0.1.2 |
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.1.9 |
+| @100mslive/react-native-hms | 1.10.6 |
+| @100mslive/react-native-video-plugin | 0.1.2 |
### react-native-hms
-- Introducing Virtual Background support in 100ms
+- Introducing Virtual Background support in 100ms
HMSSDK now provides support for Virtual Background using [`@100mslive/react-native-video-plugin`](https://github.com/100mslive/react-native-video-plugin).
It allows users to change their background during a call. Users can choose from a variety of backgrounds or upload their own custom background.
It also provides a feature to blur the background. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background).
-- Resolved warnings on Android & iOS when using HMSSDK in development mode
+- Resolved warnings on Android & iOS when using HMSSDK in development mode
### react-native-room-kit
-- Added support for Virtual Background in Prebuilt UI
+- Added support for Virtual Background in Prebuilt UI
By just adding [`@100mslive/react-native-video-plugin`](https://github.com/100mslive/react-native-video-plugin) package, users can now change their background during a call using the Virtual Background feature in the Prebuilt UI.
-- Added support for Hyperlinks in Chat Messages on Prebuilt UI
+- Added support for Hyperlinks in Chat Messages on Prebuilt UI
Users can now click on hyperlinks in chat messages to open them in a browser.
### react-native-video-plugin
-- The first version of the plugin is released. It provides support for Virtual Background in 100ms. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background).
-
+- The first version of the plugin is released. It provides support for Virtual Background in 100ms. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background).
Uses Android SDK 2.9.59 & iOS SDK 1.11.0
**Full Changelog**: [1.10.5...1.10.6](https://github.com/100mslive/react-native-hms/compare/1.10.5...1.10.6)
-
-
## 1.10.5 - 2024-05-15
| Package | Version |
@@ -164,28 +293,26 @@ Uses Android SDK 2.9.59 & iOS SDK 1.11.0
### react-native-hms
-- Introducing Whiteboard support in 100ms
+- Introducing Whiteboard support in 100ms
HMSSDK now provides support for Whiteboard. You can now start/stop a Whiteboard using `startWhiteboard` & `stopWhiteboard` methods on `HMSInteractivityCenter`. HMSSDK provides also provides callbacks for whiteboard start/stop events. Learn more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/whiteboard).
-
### react-native-room-kit
-- Whiteboard
+- Whiteboard
Whiteboard is now supported in the Prebuilt UI. Users can now start/stop a Whiteboard using the Whiteboard button in the Prebuilt UI.
-- Updated PIP Mode support for HLS Player
+- Updated PIP Mode support for HLS Player
PIP Mode is now supported in the HLS Player UI. Users can now switch to PIP mode while watching a video in the HLS Player.
-- Resolved an issue where tile content was clipping from bottom in the Prebuilt UI
+- Resolved an issue where tile content was clipping from bottom in the Prebuilt UI
Uses Android SDK 2.9.56 & iOS SDK 1.10.0
**Full Changelog**: [1.10.4...1.10.5](https://github.com/100mslive/react-native-hms/compare/1.10.4...1.10.5)
-
## 1.10.4 - 2024-04-26
| Package | Version |
@@ -195,7 +322,7 @@ Uses Android SDK 2.9.56 & iOS SDK 1.10.0
### react-native-hms
-- Support for captions in HLS Player
+- Support for captions in HLS Player
HMSSDK now provides support for Closed Captions in HLS Player. You can now check the support of captions in the stream, and enable or disable captions in the HLS Player using the methods available on its `ref`
@@ -203,25 +330,22 @@ Uses Android SDK 2.9.56 & iOS SDK 1.10.0
Learn more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/record-and-live-stream/hls-player#how-to-enable-or-disable-closed-captions).
-
### react-native-room-kit
-- Support for captions in HLS Player UI
-HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
-
-- Updated Chat message design in the new HLS Player UI
+- Support for captions in HLS Player UI
+ HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
-- Added new controls for the HLS video player
-Added controls are - "Go Live", "Seekbar", "Closed Captions", "Pause", "Resume" and "Seek forward/backwards"
+- Updated Chat message design in the new HLS Player UI
-- Added support for "Pinch and Zoom" in the HLS Player UI
+- Added new controls for the HLS video player
+ Added controls are - "Go Live", "Seekbar", "Closed Captions", "Pause", "Resume" and "Seek forward/backwards"
+- Added support for "Pinch and Zoom" in the HLS Player UI
Uses Android SDK 2.9.54 & iOS SDK 1.9.0
**Full Changelog**: [1.10.3...1.10.4](https://github.com/100mslive/react-native-hms/compare/1.10.3...1.10.4)
-
## 1.10.3 - 2024-04-15
| Package | Version |
@@ -231,17 +355,16 @@ Uses Android SDK 2.9.54 & iOS SDK 1.9.0
### react-native-room-kit
-- Added revamped HLS Player UI in Prebuilt
+- Added revamped HLS Player UI in Prebuilt
-- Added support for both Portrait & Landscape orientations in HLS Player UI
+- Added support for both Portrait & Landscape orientations in HLS Player UI
-- More enhancements in HLS Player UI will be released soon!
+- More enhancements in HLS Player UI will be released soon!
Using Android SDK 2.9.53 & iOS SDK 1.8.0
**Full Changelog**: [1.10.2...1.10.3](https://github.com/100mslive/react-native-hms/compare/1.10.2...1.10.3)
-
## 1.10.2 - 2024-04-08
| Package | Version |
@@ -251,25 +374,24 @@ Using Android SDK 2.9.53 & iOS SDK 1.8.0
### react-native-hms
-- Added Active Noise Cancellation support in SDK. This feature can be used to reduce background noise during a call. Read more details [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/noise-cancellation).
+- Added Active Noise Cancellation support in SDK. This feature can be used to reduce background noise during a call. Read more details [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/noise-cancellation).
-- Added support for showing Session Initiation Protocol(SIP) Peers in Room. Read more about SIP [here](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect).
+- Added support for showing Session Initiation Protocol(SIP) Peers in Room. Read more about SIP [here]().
-- Added support for passing Hand Raise as a layout config in Prebuilt Customizer.
+- Added support for passing Hand Raise as a layout config in Prebuilt Customizer.
### react-native-room-kit
-- Added support for showing Noise Cancellation option in Preview & Room screens.
+- Added support for showing Noise Cancellation option in Preview & Room screens.
-- Added support for appropriately indicating [SIP](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect) Peers in the Room.
+- Added support for appropriately indicating [SIP]() Peers in the Room.
-- Using Hand Raise config to show/hide the Hand Raise button in the Prebuilt UI.
+- Using Hand Raise config to show/hide the Hand Raise button in the Prebuilt UI.
Updated to Android SDK 2.9.53 & iOS SDK 1.8.0
**Full Changelog**: [1.10.1...1.10.2](https://github.com/100mslive/react-native-hms/compare/1.10.1...1.10.2)
-
## 1.10.1 - 2024-03-15
| Package | Version |
@@ -279,15 +401,15 @@ Updated to Android SDK 2.9.53 & iOS SDK 1.8.0
### react-native-hms
-- Added support for `switchAudioOutput` on iOS. An example usage of this API can be to programmatically route the audio of the Room to Earpiece or Speaker. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/configure-your-device/speaker/audio-output-routing).
+- Added support for `switchAudioOutput` on iOS. An example usage of this API can be to programmatically route the audio of the Room to Earpiece or Speaker. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/configure-your-device/speaker/audio-output-routing).
-- Added API to keep device awake while in Room. This can be used to prevent the device from going to sleep while in a Room. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/keep-awake).
+- Added API to keep device awake while in Room. This can be used to prevent the device from going to sleep while in a Room. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/keep-awake).
### react-native-room-kit
-- Added support for joining a Room in Prebuilt using only the Auth Token instead of Room Code.
+- Added support for joining a Room in Prebuilt using only the Auth Token instead of Room Code.
-- Users can now skip the Preview Screen based on a flag in the Prebuilt Customizer to directly enter a Room.
+- Users can now skip the Preview Screen based on a flag in the Prebuilt Customizer to directly enter a Room.
Updated to Android SDK 2.9.51 & iOS SDK 1.6.0
@@ -928,7 +1050,7 @@ Full Changelog: [1.0.0...1.1.0](https://github.com/100mslive/react-native-hms/co
```js
// you can now directly access local peer from HMSRoom object returned in `ON_JOIN` event listener
- const onJoinSuccess = (data: {room: HMSRoom}) => {
+ const onJoinSuccess = (data: { room: HMSRoom }) => {
console.log('local peer: ', data.room.localPeer);
};
```
diff --git a/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx b/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx
index b06cf8f5a6..a02c163769 100644
--- a/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx
+++ b/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx
@@ -72,10 +72,10 @@ curl --location --request POST 'https://api.100ms.live/v2/rooms' \
> **Note**: This object enables recording and configuring storage during room creation. But we recommend configuring it at a template level through the [Dashboard](https://dashboard.100ms.live/dashboard), where the config validator can help with validating inputs proactively.
-| Name | Type | Description | Required |
-| :---------- | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| enabled | `boolean` | Enable SFU recording. Disabled by default.
**Note:** This argument is only applicable to enable/disable [SFU recording](/server-side/v2/Destinations/recording). Refer to [RTMP Streaming & Browser Recording](/server-side/v2/api-reference/external-streams/overview) guide for other options. | No |
-| upload_info | `object` | Object of type `upload_info`. This object contains information on recordings storage location.
If you want to store recording with 100ms, and not use your own storage (s3/gs/oss), don't add this to the object.
Check the [upload_info object](#upload-info-arguments) below for more information. | No |
+| Name | Type | Description | Required |
+| :---------- | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
+| enabled | `boolean` | Enable SFU recording. Disabled by default.
**Note:** This argument is only applicable to enable/disable [SFU recording](/server-side/v2/Destinations/recording). Refer to [RTMP Streaming & Browser Recording](/server-side/v2/api-reference/external-streams/overview) guide for other options. | No |
+| upload_info | `object` | Object of type `upload_info`. This object contains information on recordings storage location.
If you want to store recording with 100ms, and not use your own storage (s3/gs/oss/azure), don't add this to the object.
Check the [upload_info object](#upload-info-arguments) below for more information. | No |
| polls | `array` | Array of poll ids that this room will have. | No |
@@ -88,13 +88,13 @@ To know more about recording please visit [Recording](/server-side/v2/Destinatio
### upload_info arguments
-| Name | Type | Description | Required |
-| :---------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud) are supported. | Yes |
-| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
-| prefix | `string` | Upload prefix path | No |
-| options | `object` | Additional configurations of type `Options` to be used for uploading.
Check the options arguments below for more information. | No |
-| credentials | `object` | Object of type `credentials`. This is used to share the credentials to access the storage bucket specified. | No |
+| Name | Type | Description | Required |
+| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
+| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud), `azure` (Azure Blob Storage) are supported. | Yes |
+| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
+| prefix | `string` | Upload prefix path | No |
+| options | `object` | Additional configurations of type `Options` to be used for uploading.
Check the options arguments below for more information. | No |
+| credentials | `object` | Object of type `credentials`. This is used to share the credentials to access the storage bucket specified. | No |
#### Options arguments
diff --git a/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx b/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx
index bd3a324d24..5f3368f1dd 100644
--- a/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx
+++ b/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx
@@ -20,7 +20,7 @@ curl --location --request POST 'https://api.100ms.live/v2/rooms/' \
"recording_info": {
"enabled": true,
"upload_info": {
- "type": "",
+ "type": "",
"location": "",
"prefix": "",
"options": {
diff --git a/docs/server-side/v2/api-reference/analytics/list-webhook-events.mdx b/docs/server-side/v2/api-reference/analytics/list-webhook-events.mdx
new file mode 100644
index 0000000000..a386c2194a
--- /dev/null
+++ b/docs/server-side/v2/api-reference/analytics/list-webhook-events.mdx
@@ -0,0 +1,112 @@
+---
+title: List Webhook Events
+nav: 3.64
+---
+
+This API retrieves webhook delivery history including successful and failed webhook events. It can be used to identify failed webhook deliveries and monitor webhook health.
+
+
+
+
+```bash
+curl --location --request GET \
+ 'https://api.100ms.live/v2/analytics/webhooks?start_time=2025-12-28T00:00:00Z&status=failed&limit=20' \
+ --header 'Authorization: Bearer '
+```
+
+
+
+### Allowed Filters
+To be specified as query parameters
+
+| Name | Type | Description | Required |
+| ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| start_time | `string` | Start of time range in RFC3339 format (Default: 24 hours ago). Must be within the last 30 days. | no |
+| end_time | `string` | End of time range in RFC3339 format (Default: Now). Must be within 14 days after `start_time`. | no |
+| room_id | `string` | Unique identifier of the room you wish to fetch webhook events for | no |
+| status | `string` | Filter by delivery status: `all`, `failed`, `success` (Default: `all`) | no |
+| event_names | `string` | Filter by original event types (e.g., `session.open.success`).
Can be specified multiple times to include more than one event (for example `event_names=session.open.success&` `event_names=peer.join.success`). (Default: all events) | no |
+| limit | `int` | Items per page (Default: `50`, Min: `1`, Max: `100`) | no |
+| page | `int` | Page number (Default: `1`) | no |
+
+### Response
+
+
+
+```json
+{
+ "events": [
+ {
+ "event_id": "abc123-def456",
+ "event_name": "reporter.webhook.delivery.failed",
+ "room_id": "room-123",
+ "event_timestamp": "2025-12-29T10:30:00Z",
+ "payload": {
+ "event_data": {
+ "session_id": "63f73bf05223403c9671c5c9",
+ "peer_id": "c8e85ab4-d533-4de0-ba7c-4c58a4de6c74",
+ "user_id": "187a1a92-150f-4506-83b7-d8a1cd716fb0"
+ },
+ "webhook_url": "https://example.com/webhook",
+ "original_event_name": "session.open.success",
+ "error_reason": "timeout"
+ }
+ }
+ ],
+ "pagination": {
+ "current_page": 1,
+ "page_size": 50,
+ "total_pages": 10,
+ "total_items": 500,
+ "has_next": true,
+ "has_prev": false
+ },
+ "summary": {
+ "total_events": 500
+ }
+}
+```
+
+
+
+> **Note:** The `error_reason` field is only present for failed webhook events.
+
+### Supported Event Types
+
+You can filter webhooks by the following event types:
+
+| Event Type | Description |
+| -------------------------- | ------------------------------ |
+| `session.open.success` | Session started |
+| `session.close.success` | Session ended |
+| `peer.join.success` | Peer joined the room |
+| `peer.leave.success` | Peer left the room |
+| `recording.success` | Recording completed |
+| `recording.failed` | Recording failed |
+| `transcription.success` | Transcription completed |
+| `beam.started.success` | RTMP/HLS streaming started |
+| `beam.stopped.success` | RTMP/HLS streaming stopped |
+| `beam.recording.success` | Browser recording completed |
+| `hls.recording.success` | HLS recording completed |
+| `stream.recording.success` | Stream recording completed |
+
+### Error Responses
+
+| Error Code | Message | Description |
+|------------|----------------------------------------------|-------------------------------------------------|
+| 400 | start_time must be within the last 30 days | Invalid time range parameters |
+| 400 | end_time must be within 14 days after start_time | Invalid time range parameters |
+| 403 | insufficient permissions | Unauthorized access or invalid management token |
+| 429 | rate limit exceeded, retry after 45 seconds | Too many requests, rate limit exceeded |
+
+### Why would you use this API?
+
+- **Debug webhook issues:** Retrieve delivery history to analyze failures, identify patterns, and determine when issues occurred
+
+### Postman collection
+
+You can use our Postman collection to start exploring 100ms APIs.
+
+[](https://god.gw.postman.com/run-collection/22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a?action=collection%2Ffork&collection-url=entityId%3D22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a%26entityType%3Dcollection%26workspaceId%3Dd9145dd6-337b-4761-81d6-21a30b4147a2)
+
+Refer to the [Postman guide](/server-side/v2/introduction/postman-guide) to get started with 100ms API collection.
diff --git a/docs/server-side/v2/api-reference/analytics/overview.mdx b/docs/server-side/v2/api-reference/analytics/overview.mdx
index be6b89d8d5..8a154299a0 100644
--- a/docs/server-side/v2/api-reference/analytics/overview.mdx
+++ b/docs/server-side/v2/api-reference/analytics/overview.mdx
@@ -24,12 +24,23 @@ Analytics APIs can be utilized to retrieve events via an HTTP request. By using
- `client.disconnected`
- `client.connect.failed`
+- [List Webhook Events](/server-side/v2/api-reference/analytics/list-webhook-events)
+ - Retrieve webhook delivery history
+
+- [Replay Webhook Events](/server-side/v2/api-reference/analytics/replay-webhook-events)
+ - Replay failed or successful webhooks
+
+- [Peer Quality Stats](/server-side/v2/api-reference/analytics/peer-quality-stats)
+ - Time-series quality metrics (bitrate, packet loss, FPS, RTT) for a peer in a session
+
Event data can be queried up to **last 30 days**.
### What can I build?
- You can use track events to get a better understanding of user activity and build tools around it as explained in [use cases](/server-side/v2/api-reference/analytics/track-events#why-would-you-use-this-api)
- You can use error events to dig deeper into the issues which your users are facing.
+- You can use webhook events to monitor webhook delivery health and replay failed webhooks after recovering from downtime.
+- You can use peer quality stats to debug call quality issues, monitor network conditions, and build custom quality dashboards.
diff --git a/docs/server-side/v2/api-reference/analytics/peer-quality-stats.mdx b/docs/server-side/v2/api-reference/analytics/peer-quality-stats.mdx
new file mode 100644
index 0000000000..37552b93b3
--- /dev/null
+++ b/docs/server-side/v2/api-reference/analytics/peer-quality-stats.mdx
@@ -0,0 +1,210 @@
+---
+title: Peer Quality Stats
+nav: 3.67
+---
+
+Peer Quality Stats API provides time-series quality metrics for a specific peer in a session. Use this to analyze publishing and subscribing performance, including bitrate, packet loss, FPS, round-trip time, and more.
+
+This is useful for debugging call quality issues, monitoring network conditions, and building custom quality dashboards.
+
+This API is not real-time. Quality stats data is only available after the session has ended.
+
+
+
+
+```bash
+curl --location --request GET \
+ 'https://api.100ms.live/v2/analytics/peer-stats?peer_id=&session_id=' \
+ --header 'Authorization: Bearer '
+```
+
+
+
+## Query Parameters
+
+| Name | Type | Description | Required |
+| ---------- | -------- | ------------------------------------------------------------------ | -------- |
+| peer_id | `string` | Unique identifier of the peer/participant | yes |
+| session_id | `string` | Unique identifier of the session | yes |
+
+## Response Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | -------------------------------------------------------------- |
+| peer_id | `string` | Unique identifier of the peer |
+| session_id | `string` | Unique identifier of the session |
+| room_id | `string` | Unique identifier of the room |
+| publisher | `object` | Contains `video` and `audio` arrays with publish-side metrics |
+| subscriber | `object` | Contains `video` and `audio` arrays with subscribe-side metrics|
+
+### Publisher Video Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------------------------------------------------- |
+| track_id | `string` | UUID of the track |
+| type | `string` | Track type: `regular` or `screen` |
+| rid | `string \| null` | Simulcast layer: `h` (high), `m` (medium), `l` (low), or `null` |
+| time_series | `object` | Time-series metrics for the track |
+
+**Publisher video `time_series` fields:**
+
+| Field | Type | Description |
+| ------------------- | ---------- | --------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number[]` | Bitrate in bits per second |
+| fps | `number[]` | Frames per second |
+| packet_loss_percent | `number[]` | Packet loss as a percentage |
+| rtt_ms | `number[]` | Round-trip time in milliseconds |
+
+### Publisher Audio Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------- |
+| track_id | `string` | UUID of the track |
+| time_series | `object` | Time-series metrics for the track |
+
+**Publisher audio `time_series` fields:**
+
+| Field | Type | Description |
+| ------------------- | ---------- | --------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number[]` | Bitrate in bits per second |
+| packet_loss_percent | `number[]` | Packet loss as a percentage |
+| rtt_ms | `number[]` | Round-trip time in milliseconds |
+| jitter_ms | `number[]` | Jitter in milliseconds |
+
+### Subscriber Video Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------------- |
+| track_id | `string` | UUID of the track |
+| type | `string` | Track type: `regular` or `screen` |
+| time_series | `object` | Time-series metrics for the track |
+
+**Subscriber video `time_series` fields:**
+
+| Field | Type | Description |
+| ------------ | ---------------- | --------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number\|null[]` | Bitrate in bits per second, or `null` |
+| fps | `number[]` | Frames per second |
+| freeze_count | `number[]` | Number of video freezes |
+
+### Subscriber Audio Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------- |
+| track_id | `string` | UUID of the track |
+| time_series | `object` | Time-series metrics for the track |
+
+**Subscriber audio `time_series` fields:**
+
+| Field | Type | Description |
+| ------------------- | ---------------- | -------------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number\|null[]` | Bitrate in bits per second, or `null` |
+| concealed_samples | `number[]` | Number of concealed (interpolated) samples |
+| packet_loss_percent | `number[]` | Packet loss as a percentage |
+
+
+
+```json
+{
+ "peer_id": "1169b4b7-68c2-4d39-8568-5618433958ac",
+ "session_id": "6977b3f3cdd1e423f8b2cxxx",
+ "room_id": "6977b3f3cdd1e423f8b2xxxx",
+ "publisher": {
+ "video": [
+ {
+ "track_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
+ "type": "regular",
+ "rid": "h",
+ "time_series": {
+ "timestamps": [1738843560000, 1738843570000],
+ "bitrate": [2500000, 2480000],
+ "fps": [30, 30],
+ "packet_loss_percent": [0.3, 0.2],
+ "rtt_ms": [45, 47]
+ }
+ },
+ {
+ "track_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
+ "type": "regular",
+ "rid": "m",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [1200000],
+ "fps": [30],
+ "packet_loss_percent": [0.15],
+ "rtt_ms": [45]
+ }
+ },
+ {
+ "track_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
+ "type": "screen",
+ "rid": null,
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [800000],
+ "fps": [5],
+ "packet_loss_percent": [0.1],
+ "rtt_ms": [46]
+ }
+ }
+ ],
+ "audio": [
+ {
+ "track_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [64000],
+ "packet_loss_percent": [0.1],
+ "rtt_ms": [45],
+ "jitter_ms": [2.1]
+ }
+ }
+ ]
+ },
+ "subscriber": {
+ "video": [
+ {
+ "track_id": "4334da7c-1d73-4e19-9d63-4b0571f5acd4",
+ "type": "regular",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [null],
+ "fps": [15],
+ "freeze_count": [0]
+ }
+ }
+ ],
+ "audio": [
+ {
+ "track_id": "fbc9c8f8-70ea-4d24-9699-12bf3eba94d8",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [null],
+ "concealed_samples": [0],
+ "packet_loss_percent": [0.2]
+ }
+ }
+ ]
+ }
+}
+```
+
+
+
+## Notes
+
+- **Authentication**: Requires a management token in the `Authorization: Bearer ` header.
+- **Empty Data**: Arrays will be empty `[]` if no data is available for a given metric.
+- **Simulcast**: For publisher video tracks, the same `track_id` may appear multiple times with different `rid` values (`h`/`m`/`l`) representing different simulcast quality layers.
+
+## Postman collection
+
+You can use our Postman collection to start exploring 100ms APIs.
+
+[](https://god.gw.postman.com/run-collection/22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a?action=collection%2Ffork&collection-url=entityId%3D22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a%26entityType%3Dcollection%26workspaceId%3Dd9145dd6-337b-4761-81d6-21a30b4147a2)
+
+Refer to the [Postman guide](/server-side/v2/introduction/postman-guide) to get started with 100ms API collection.
diff --git a/docs/server-side/v2/api-reference/analytics/replay-webhook-events.mdx b/docs/server-side/v2/api-reference/analytics/replay-webhook-events.mdx
new file mode 100644
index 0000000000..7dfc13ff4f
--- /dev/null
+++ b/docs/server-side/v2/api-reference/analytics/replay-webhook-events.mdx
@@ -0,0 +1,220 @@
+---
+title: Replay Webhook Events
+nav: 3.65
+---
+
+Initiates a replay of webhooks that failed to deliver. This is particularly useful when recovering from server downtime or when you need to reprocess events with updated logic.
+
+
+
+
+```bash
+curl --location --request POST \
+ 'https://api.100ms.live/v2/analytics/webhooks/replay' \
+ --header 'Authorization: Bearer ' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "start_time": "2025-12-28T00:00:00Z",
+ "end_time": "2025-12-29T00:00:00Z",
+ "event_names": ["peer.join.success"]
+ }'
+```
+
+
+
+### Allowed Filters
+To be specified as query parameters
+
+| Name | Type | Description | Required |
+| ----------- | ---------- | ------------------------------------------------------------------------------------------------------------------ | -------- |
+| start_time | `string` | Start of time range to replay in RFC3339 format (Default: 24 hours ago). Must be within the last 30 days. | no |
+| end_time | `string` | End of time range to replay in RFC3339 format (Default: Now). Must be after `start_time` but within 14 days of start time. | no |
+| room_id | `string` | Unique identifier of the room you wish to replay webhooks for | no |
+| event_names | `string[]` | Filter by original event types (e.g., `peer.join.success`) | no |
+| limit | `int` | Max webhooks to replay (Default: `50000`, Max: `50000`) | no |
+| offset | `int` | Skip first N webhooks for pagination (Default: `0`) | no |
+| status | `string` | Filter by delivery status: `all`, `failed`, `success` (Default: `failed`) | no |
+
+### Response
+
+
+
+```json
+{
+ "workflow_id": "webhook-replay-customer123-a1b2c3d4",
+ "status": "started",
+ "message": "Webhook replay has been queued for processing",
+ "filters": {
+ "start_time": "2025-12-28T00:00:00Z",
+ "end_time": "2025-12-29T00:00:00Z",
+ "room_id": "",
+ "event_types": ["peer.join.success", "peer.leave.success"]
+ }
+}
+```
+
+
+
+**Status Values:**
+
+| Status | Description |
+| ----------------- | ----------------------------------------- |
+| `started` | Workflow has been started |
+| `already_running` | Identical replay is already in progress |
+
+
+### Supported Event Types
+
+You can filter specific webhooks to replay by the following event types:
+
+| Event Type | Description |
+| -------------------------- | ------------------------------ |
+| `session.open.success` | Session started |
+| `session.close.success` | Session ended |
+| `peer.join.success` | Peer joined the room |
+| `peer.leave.success` | Peer left the room |
+| `recording.success` | Recording completed |
+| `recording.failed` | Recording failed |
+| `transcription.success` | Transcription completed |
+| `beam.started.success` | RTMP/HLS streaming started |
+| `beam.stopped.success` | RTMP/HLS streaming stopped |
+| `beam.recording.success` | Browser recording completed |
+| `hls.recording.success` | HLS recording completed |
+| `stream.recording.success` | Stream recording completed |
+
+### How Replay Works
+
+Once a replay is triggered, the system:
+
+1. Starts a workflow that fetches webhooks from the database in batches
+2. Each webhook is sent to your configured webhook URL with an `is_replay: true` flag
+3. Webhook replay events are sent at a rate of 10 events per second to your endpoint
+4. Maximum 50,000 webhooks are supported per replay request
+5. Duplicate replay requests with identical filters will automatically reuse the existing workflow
+
+> **Note:** Ensure your webhook endpoints are scaled appropriately before triggering the replay API to handle the incoming event rate.
+
+
+### Pagination for Large Replays
+
+For replays with more than 50,000 webhooks, use pagination by making multiple requests with different offsets:
+
+```bash
+# First batch (0-50,000)
+curl --location --request POST \
+ 'https://api.100ms.live/v2/analytics/webhooks/replay' \
+ --header 'Authorization: Bearer ' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "start_time": "2025-12-28T00:00:00Z",
+ "limit": 50000,
+ "offset": 0
+ }'
+
+# Second batch (50,000-100,000) - Run after first completes
+curl --location --request POST \
+ 'https://api.100ms.live/v2/analytics/events/webhooks/replay' \
+ --header 'Authorization: Bearer ' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "start_time": "2025-12-28T00:00:00Z",
+ "limit": 50000,
+ "offset": 50000
+ }'
+```
+
+### Error Responses
+
+| Error Code | Message | Description |
+|------------|---------------------------------------------------|-------------------------------------------------|
+| 400 | start_time must be within the last 30 days | Invalid time range parameters |
+| 400 | end_time must be within 14 days after start_time | Invalid time range parameters |
+| 403 | insufficient permissions | Unauthorized access or invalid management token |
+| 404 | workflow not found | The specified workflow ID does not exist |
+| 429 | rate limit exceeded, retry after 45 seconds | Too many requests, rate limit exceeded |
+| 503 | webhook replay service unavailable | Service is temporarily unavailable |
+
+### Why would you use this API?
+
+- **Recover from downtime:** Replay failed webhooks after your server recovers from an outage or maintenance period
+- **Reprocess events:** Replay specific event types following bug fixes, data corrections, or logic updates in your webhook handler
+
+## Check Replay Results
+
+Monitor the status and progress of a webhook replay workflow.
+
+
+
+
+```bash
+curl --location --request GET \
+ 'https://api.100ms.live/v2/analytics/webhooks/replay/webhook-replay-customer123-a1b2c3d4' \
+ --header 'Authorization: Bearer '
+```
+
+
+
+### Allowed Filters
+To be specified as query parameters
+
+| Name | Type | Description | Required |
+| ----------- | -------- | ------------------------------------------------------- | -------- |
+| workflow_id | `string` | The workflow ID returned from POST /webhooks/replay | yes |
+
+### Response
+
+
+
+```json
+{
+ "workflow_id": "webhook-replay-customer123-a1b2c3d4",
+ "status": "completed",
+ "started_at": "2025-12-29T10:00:00Z",
+ "completed_at": "2025-12-29T10:15:00Z",
+ "filters": {
+ "start_time": "2025-12-28T00:00:00Z",
+ "end_time": "2025-12-29T00:00:00Z",
+ "room_id": "",
+ "event_types": ["peer.join.success"],
+ "limit": 50000,
+ "offset": 0
+ },
+ "progress": {
+ "total": 150,
+ "completed": 148,
+ "failed": 2
+ },
+ "result": {
+ "total": 150,
+ "completed": 148,
+ "failed": 2,
+ "failed_events": ["event-id-1", "event-id-2"]
+ }
+}
+```
+
+
+
+**Status Values:**
+
+| Status | Description |
+| --------------------------- | -------------------------------------------- |
+| `Running` | Workflow is currently processing webhooks |
+| `completed` | All webhooks replayed successfully |
+| `completed_with_failures` | Replay finished but some webhooks failed |
+| `failed` | All webhooks failed to replay |
+| `Canceled` | Workflow was canceled |
+| `Terminated` | Workflow was terminated |
+
+### Why would you use this API?
+
+- **Track workflow progress:** Monitor the total number of events queued for replay, completion counts, and failure rates in real-time
+- **Analyze failure statistics:** Retrieve a detailed list of webhook events that failed to replay within the current workflow for troubleshooting
+
+### Postman collection
+
+You can use our Postman collection to start exploring 100ms APIs.
+
+[](https://god.gw.postman.com/run-collection/22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a?action=collection%2Ffork&collection-url=entityId%3D22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a%26entityType%3Dcollection%26workspaceId%3Dd9145dd6-337b-4761-81d6-21a30b4147a2)
+
+Refer to the [Postman guide](/server-side/v2/introduction/postman-guide) to get started with 100ms API collection.
diff --git a/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx b/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx
index f96e6446d8..ea8104b0e0 100644
--- a/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx
+++ b/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx
@@ -62,13 +62,13 @@ Another way to enable SFU recording for a room is to choose `Enabled` for record
By default recordings will be uploaded to 100ms storage and a pre-signed URL for the same will be provided to customers via a webhook. The pre-signed URL will expire in 12 hours.
Customers can also configure the recordings to be stored in their cloud storage. Following are the configurations for the same.
-| Name | Type | Description | Required |
-| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------- | :------- |
-| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud) are supported. | Yes |
-| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
-| prefix | `string` | Upload prefix path | No |
-| options | `object` | Additional configurations of type `Options` to be used for uploading | No |
-| credentials | `object` | Object of type `Credentials`. This is used to share credentials to access the storage bucket specified | No |
+| Name | Type | Description | Required |
+| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
+| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud), `azure` (Azure Blob Storage) are supported. | Yes |
+| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
+| prefix | `string` | Upload prefix path | No |
+| options | `object` | Additional configurations of type `Options` to be used for uploading | No |
+| credentials | `object` | Object of type `Credentials`. This is used to share credentials to access the storage bucket specified | No |
Where `Options` is
diff --git a/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx b/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx
index e01a77817e..1e97e70014 100644
--- a/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx
+++ b/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx
@@ -160,7 +160,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
"region": "in",
"recording": {
"upload": {
- "type": "",
+ "type": "",
"location": "",
"prefix": "",
"options": {
@@ -441,7 +441,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
"recording": {
"upload": {
"location": "",
- "type": "",
+ "type": "",
"prefix": "",
"credentials": {
"key": "",
@@ -695,7 +695,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
| Name | Type | Description | Required |
| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------- | :------- |
-| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud) are supported. | Yes |
+| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud), `azure` (Azure Blob Storage) are supported. | Yes |
| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
| prefix | `string` | Upload prefix path | Yes |
| options | `object` | Additional configurations of type Options to be used for uploading | No |
diff --git a/docs/server-side/v2/api-reference/policy/update-settings.mdx b/docs/server-side/v2/api-reference/policy/update-settings.mdx
index 43a63372d4..93d10203f7 100644
--- a/docs/server-side/v2/api-reference/policy/update-settings.mdx
+++ b/docs/server-side/v2/api-reference/policy/update-settings.mdx
@@ -12,7 +12,7 @@ This endpoint is used to update [settings](/server-side/v2/api-reference/policy/
```bash
-curl --location --request POST 'https://api.100ms.live/v2//settings' \
+curl --location --request POST 'https://api.100ms.live/v2/templates//settings' \
--header 'Authorization: Bearer ' \
--header 'Content-Type: application/json' \
--data-raw '{
diff --git a/docs/server-side/v2/api-reference/recordings/get-recording.mdx b/docs/server-side/v2/api-reference/recordings/get-recording.mdx
index 8b6b8ed8be..9b4226835f 100644
--- a/docs/server-side/v2/api-reference/recordings/get-recording.mdx
+++ b/docs/server-side/v2/api-reference/recordings/get-recording.mdx
@@ -7,11 +7,11 @@ Use this request to get the recording job object, at any point after it has been
This can be used to fetch recording assets that are generated after the recording has completed.
-
+
```bash
-curl --location --request GET 'https://api.100ms.live/v2/recordings/' \
+curl --location --request GET 'https://api.100ms.live/v2/recordings/' \
--header 'Authorization: Bearer '
```
diff --git a/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx b/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx
index 35ccfe5e10..471723f2a9 100644
--- a/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx
+++ b/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx
@@ -7,11 +7,11 @@ Use this API to pause the recording that is running for a room.
The recording can be [resumed](./resume-recording-for-room) later.
-
+
```bash
-curl --location --request POST 'https://api.100ms.live/v2/recordings//pause' \
+curl --location --request POST 'https://api.100ms.live/v2/recordings/room//pause' \
--header 'Authorization: Bearer ' \
```
diff --git a/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx b/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx
index 0528b4cdab..03ab4a55d0 100644
--- a/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx
+++ b/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx
@@ -5,11 +5,11 @@ nav: 3.147
Use this API to resume the recording that is paused for a room.
-
+
```bash
-curl --location --request POST 'https://api.100ms.live/v2/recordings//resume' \
+curl --location --request POST 'https://api.100ms.live/v2/recordings/room//resume' \
--header 'Authorization: Bearer ' \
```
diff --git a/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx b/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx
index 4f320a6bfd..c73b7086d0 100644
--- a/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx
+++ b/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx
@@ -5,11 +5,11 @@ nav: 3.145
Use this to stop a specific recording by its unique identifier.
-
+
```bash
-curl --location --request POST 'https://api.100ms.live/v2/recordings//stop' \
+curl --location --request POST 'https://api.100ms.live/v2/recordings//stop' \
--header 'Authorization: Bearer ' \
```
@@ -40,3 +40,4 @@ curl --location --request POST 'https://api.100ms.live/v2/recordings/
```
+
diff --git a/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx b/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx
index eb8807afe0..7f2ac71570 100644
--- a/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx
+++ b/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx
@@ -322,22 +322,18 @@ You can always use 100ms’ Recording Assets API to access the transcripts and s
```jsx
import { useEffect } from "react";
import { useHMSActions } from "@100mslive/react-sdk";
- import { useIsHeadless } from "../AppData/useUISettings";
export function BeamSpeakerLabelsLogging() {
const hmsActions = useHMSActions();
- const isHeadless = useIsHeadless();
useEffect(() => {
- if (isHeadless) {
+ // to be called if you are passing custom url for beam recording, preferably before join.
hmsActions.enableBeamSpeakerLabelsLogging();
- }
- }, [hmsActions, isHeadless]);
+ }, [hmsActions]);
return null;
}
```
- - Register `` in Approutes along with import statement
- `import { BeamSpeakerLabelsLogging } from "./components/AudioLevel/BeamSpeakerLabelsLogging";`
+
diff --git a/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx b/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx
index 08ca47de20..aac022ed55 100644
--- a/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx
+++ b/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx
@@ -43,6 +43,9 @@ For smooth call experience add following domains and ports to your firewall whit
35.207.209.133/32
35.244.46.211/32
34.74.251.112/32
+34.169.128.194/32
+34.105.5.246/32
+34.169.40.88/32
```
### NAT gateway IP address whitelisting for webhooks
diff --git a/docs/server-side/v2/how-to-guides/recordings/overview.mdx b/docs/server-side/v2/how-to-guides/recordings/overview.mdx
index 797ab9a1a3..68728f2324 100644
--- a/docs/server-side/v2/how-to-guides/recordings/overview.mdx
+++ b/docs/server-side/v2/how-to-guides/recordings/overview.mdx
@@ -116,7 +116,7 @@ If you are relying on the 100ms storage bucket, we recommend downloading the ass
#### Configure your own storage
-100ms supports AWS S3, Google Cloud Storage and Alibaba OSS as storage buckets. These can be configured on [the 100ms dashboard](../../../../concepts/v2/concepts/recordings#configure-storage).
+100ms supports AWS S3, Google Cloud Storage, Alibaba OSS, and Azure Blob Storage as storage buckets. These can be configured on [the 100ms dashboard](../../../../concepts/v2/concepts/recordings#configure-storage).
#### Download assets from dashboard
diff --git a/docs/server-side/v2/release-notes/release-notes.mdx b/docs/server-side/v2/release-notes/release-notes.mdx
index cc63ae3c73..f6c059bc0f 100644
--- a/docs/server-side/v2/release-notes/release-notes.mdx
+++ b/docs/server-side/v2/release-notes/release-notes.mdx
@@ -5,6 +5,14 @@ nav: 5.1
This Changelog highlights notable changes to the 100ms server-side API, such as API additions, improvements, and deprecations. Also, we've included developer experience improvements to this page to keep you on track with items that will enhance your integration journey.
+## 2026-01-02
+### Additions
+- Added support to [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) - `azure`. Check recording config for [Create a room API](../Rooms/create-via-api#recording_info-arguments) and [Create a template API](../policy/create-template-via-api#recording-object) for more information.
+
+## 2025-12-30
+### Additions
+- updated reserved IP addresses for TURN servers in EU|US|IN. These IP addresses can be whitelisted in firewall configuration to solve scenarios where a user is unable to join the room due to a restricted network firewall.
+
## 2024-02-28
#### Additions
diff --git a/package.json b/package.json
index ee6172e323..acba80b74f 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
"id": "yarn && yarn dev"
},
"engines": {
- "node": "^18"
+ "node": "^22"
},
"files": [
"/dist",
diff --git a/releases.js b/releases.js
index 2833f85d4d..2a481ab010 100644
--- a/releases.js
+++ b/releases.js
@@ -1 +1 @@
-exports.releases = releases = {"Android":{"version":"v2.9.65","date":"August 13, 2024"},"iOS":{"version":"1.16.0","date":"August 13, 2024"},"React Native":{"version":"1.10.9","date":"July 31, 2024"},"Web":{"version":"2024-08-16","date":"August 16, 2024"},"Flutter":{"version":"1.10.5","date":"July 25, 2024"},"Server-side":{"version":"2024-02-28","date":"February 28, 2024"}}
\ No newline at end of file
+exports.releases = releases = {"Android":{"version":"v2.9.79","date":"November 24, 2025"},"iOS":{"version":"1.17.1","date":"November 17, 2025"},"React Native":{"version":"1.12.0","date":"October 28, 2025"},"Web":{"version":"2026-02-10","date":"February 10, 2026"},"Flutter":{"version":"1.11.0","date":"October 29, 2025"},"Server-side":{"version":"2026-01-02","date":"January 02, 2026"}}
\ No newline at end of file