| [ Web Proxy ] |
| Viewing: https://developers.cloudflare.com/realtime/realtimekit/release-notes/ | [Back] [Original] |
Fixes
VERSION_PLACEHOLDER in the bundle instead of the actual SDK version.Compatibility: Works best with RealtimeKit Web UI Kit 2.0.0 or later.
This is a major breaking release. Several deprecated APIs have been removed and the plugin APIs have been completely redesigned. Review the migration guide below carefully before upgrading.
Plugin APIs complete redesign
Plugins are no longer fetched from the server automatically. You now provide plugin configurations at SDK init time via defaults.plugins.
Before (v1.x):
// plugins were loaded via API in SDK internally
const meeting = await RealtimeKitClient.init({
authToken,
});
// Server-hosted plugins were auto-populated
const plugin = meeting.plugins.all.get(pluginId);
// Plugin rendered in an iframe managed by the SDK
plugin.addPluginView(iframeElement, 'plugin-main');
// Permissions checked via meeting.self.permissions.plugins.canStart / canClose
After (v2.0):
A plugin component is any HTMLElement. You can use a custom element, a framework component mounted to a container, or an iframe. The following example embeds a collaborative text editor as a plugin:
const editor = document.createElement('iframe');
editor.src = 'https://rustpad.io/#WKLJaD';
editor.style.width = '100%';
editor.style.height = '100%';
editor.style.border = 'none';
const meeting = await RealtimeKitClient.init({
authToken,
defaults: {
plugins: [
{
id: 'collaborative-editor', // SDK prefixes this with {meetingId}: to create the namespaced plugin.id
name: 'Collaborative Editor',
icon: 'https://example.com/editor.png',
permissions: {
canActivate: true,
canDeactivate: true,
},
component: editor,
},
],
},
});
// Plugin is registered and available
const plugin = meeting.plugins.all.get(pluginId);
// Activate state is synced across all participants
await plugin.activate();
For a complete guide on building custom plugins, refer to Build your own plugins. If you need to record plugin content, you must build a custom recording app.
Key changes:
ClientPluginConfig, ClientPluginPermissions.id is now namespaced: the SDK prefixes your provided id with {meetingId}: to create the internal pluginId.__rtk_plugins__) instead of dedicated socket messages.component property (any HTMLElement) instead of iframe-based rendering via addPluginView.plugin.permissions.canActivate / plugin.permissions.canDeactivate) replace the old global meeting.self.permissions.plugins.canStart / meeting.self.permissions.plugins.canClose.Removed plugin APIs:
plugin.addPluginView(iframe, viewId) pass an HTMLElement as component in ClientPluginConfig instead.plugin.removePluginView(viewId) handled automatically by the UI Kit.plugin.enable() use plugin.activate().plugin.disable() use plugin.deactivate().plugin.sendIframeEvent() removed. Communicate directly with your component.plugin.baseURL removed. Plugins are no longer server-hosted.plugin.picture use plugin.icon.plugin.description, plugin.organizationId, plugin.tags, plugin.type, plugin.staggered, plugin.private, plugin.published, plugin.createdAt, plugin.updatedAt removed. No longer applicable.plugin.config (PluginConfig) removed. No plugin manifest concept.meeting.self.permissions.plugins.canStart use plugin.permissions.canActivate.meeting.self.permissions.plugins.canClose use plugin.permissions.canDeactivate.modules.devTools.plugins (local dev plugin config) use defaults.plugins with a component pointing to your local element.Removed deprecated APIs
Client:
meeting.joinRoom() use meeting.join().meeting.leaveRoom() use meeting.leave().Chat:
meeting.chat.getMessagesByUser(userId) use meeting.chat.fetchPublicMessages() with appropriate filters.meeting.chat.getMessagesByType(type) use meeting.chat.fetchPublicMessages() with appropriate filters.meeting.chat.getMessages(timestamp, size, reversed) use meeting.chat.fetchPublicMessages() or meeting.chat.fetchPrivateMessages().meeting.chat.searchMessages(query, filters) use meeting.chat.fetchPublicMessages() or meeting.chat.fetchPrivateMessages().meeting.chat.pinned (getter) use meeting.chat.fetchPinnedMessages().Permissions (meeting.self.permissions):
permissions.produceVideo use permissions.canProduceVideo.permissions.produceAudio use permissions.canProduceAudio.permissions.produceScreenshare use permissions.canProduceScreenshare.permissions.waitingRoomType use permissions.waitingRoomBehaviour.permissions.canChangeParticipantRole use permissions.canChangeParticipantPermissions.permissions.canChangeTheme removed (always returned false).permissions.canPresent check individual canProduceAudio, canProduceVideo, canProduceScreenshare.permissions.requestProduce check individual media permissions for CAN_REQUEST values.permissions.acceptPresentRequests use permissions.acceptStageRequests.permissions.maxScreenShareCount use meeting.self.config.maxScreenShareCount.PermissionPreset.fromResponse() use PermissionPreset.init().PermissionPreset.default() use PermissionPreset.init().Participants:
meeting.participants.disableAudio(participantId) use meeting.participants.joined.get(participantId).disableAudio().meeting.participants.disableVideo(participantId) use meeting.participants.joined.get(participantId).disableVideo().meeting.participants.kick(participantId) call kick on the participant directly.participant.clientSpecificId use participant.customParticipantId.Connected Meetings:
meeting.connectedMeetings.supportsConnectedMeetings removed. Permission checks are now granular via meeting.self.permissions.connectedMeetings.Enhancements
StoreManager now supports refresh(name) to re-fetch store data from the server, and reserved store names (__rtk_plugins__) are protected from user creation.Fixes
Compatibility: Works best with RealtimeKit Web UI Kit 1.2.0 or later.
Features
0014 for media (WebRTC) connection failures during room join, making it easier to distinguish media failures from socket and signaling failures.Enhancements
Client.init() and meeting.join() now surface specific error codes and descriptive messages instead of generic or stacked errors.CompressionStream API, achieving approximately a 10:1 compression ratio. Older browsers and React Native fall back to uncompressed JSON with smaller batch sizes.Fixes
ClientError objects were wrapped inside each other when the SDK retried failed API requests. This caused nested error messages, duplicate onError callbacks, and redundant window error events.Removed APIs
meeting.__internals__.features is now deprecated and will be removed in a future release.Compatibility: Works best with RealtimeKit Android Core 2.0.0+ and RealtimeKit iOS Core 2.0.0+.
Features
meeting.__internals__.authToken to expose authentication token, enabling better integration between Web Core and UI Kit for future features and enhancements.Fixes
Enhancements
*.realtime.cloudflare.com base URI internally instead of the legacy dyte.io base URI.Features
config.media.video.simulcast field, or while initializing the SDK.Compatibility: Works best with RealtimeKit Web UI Kit 1.1.1 or later.
Enhancements
Fixes
Compatibility: Works best with RealtimeKit Web UI Kit 1.1.0 or later.
New APIs
Added chat pagination support with the following methods:
meeting.chat.fetchPinnedMessages - Fetch pinned messages from server.meeting.chat.fetchPublicMessages - Fetch public messages from server.meeting.chat.fetchPrivateMessages - Fetch private messages from server.Enhancements
pinMessage and unpinMessage events on meeting.chat now emit reliably.meeting.chat.pin and meeting.chat.unpin) is now available to all participants.Removed APIs
Removed non-operational chat channel APIs to streamline the RealtimeKit SDK. Meeting chat (meeting.chat) remains fully operational.
meeting.self.permissions.chatChannel.meeting.self.permissions.chatMessage. Use meeting.self.permissions.chatPublic and meeting.self.permissions.chatPrivate instead.meeting.chat.channels.meeting.chat.sendMessageToChannel.meeting.chat.markLastReadMessage.channelMessageUpdate, channelCreate, and channelUpdate from meeting.chat.API changes
channelId parameter:meeting.chat.editTextMessage(messageId, message)meeting.chat.editImageMessage(messageId, imageFile)meeting.chat.editFileMessage(messageId, file)meeting.chat.editMessage(messageId, messagePayload)meeting.chat.deleteMessage(messageId)Deprecations
The following methods are deprecated due to scalability limitations (limited to 1,000 recent messages):
meeting.chat.messages - Only fetches recent messages and new messages after joining.meeting.chat.getMessagesByUser - Use new fetch methods for scalable message retrieval.meeting.chat.getMessagesByType - Use new fetch methods for scalable message retrieval.meeting.chat.getMessages - Use meeting.chat.fetchPublicMessages or meeting.chat.fetchPrivateMessages instead.meeting.chat.pinned - Use meeting.chat.fetchPinnedMessages instead.meeting.chat.searchMessages - Use meeting.chat.fetchPublicMessages or meeting.chat.fetchPrivateMessages instead.Known limitations
Fixes
Fixed an issue where users who joined a meeting with audio and video disabled and then initiated tab screen sharing would experience SDP corruption upon stopping the screen share, preventing subsequent actions such as enabling audio or video.
Error thrown:
InvalidAccessError: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote answer sdp: Failed to set remote audio description send parameters for m-section with mid='<N>'
Fixed an issue where awaiting RealtimeKitClient.initMedia did not return media tracks
Example usage:
const media = await RealtimeKitClient.initMedia({
video : true,
audio: true,
});
const { videoTrack, audioTrack } = media;
Fixed an issue where an undefined variable caused TypeError: Cannot read properties of undefined (reading 'getValue') in media retrieval due to a race condition.
Fixes
Fixes
browser.js instead of incorrectly shipping index.iife.js in 1.2.0.Enhancements
Features
Added support for configuring simulcast via initMeeting:
initMeeting({
overrides: {
simulcastConfig: {
disable: false,
encodings: [{ scaleResolutionDownBy: 2 }],
},
},
});
Fixes
Breaking changes
Fixes
deviceInfo logs to improve debugging capabilities for React Native.Enhancements
Fixes
AudioActivityReporter with proper audio sampling.Fixes
Fixes
Fixes
Features
New API
Broadcast messages across meetings:
meeting.participants.broadcastMessage("<message_type>", { message: "Hi" }, {
meetingIds: ["<connected_meeting_id>"],
});
Enhancements
Fixes
Fixes
Features
| Web Proxy Viewer | New URL | Original Page |