Release notes
This page provides the release notes for WebPlanetKit 6.0.
WebPlanetKit 6.0
Release date: 2026-08-03
Improve public API naming for clarity and consistency
Refined several public API names for better readability, consistency, and ease of adoption.
API
Changed
-
MakeCallParamsdata class 1-to-1 callPrevious WebPlanetKit 6.0 var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean -
VerifyCallParamsdata class 1-to-1 callPrevious WebPlanetKit 6.0 var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean -
ConferenceParamsdata class Group callPrevious WebPlanetKit 6.0 var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean -
PeerInfodata class Group callPrevious WebPlanetKit 6.0 var videoRequested: booleanvar isVideoRequested: booleanvar micMuted: booleanvar isMicMuted: booleanvar vSsrc: numbervar videoSsrc: numbervar dSsrc: numbervar dataSsrc: number -
DisconnectReasondata class 1-to-1 callGroup callPrevious WebPlanetKit 6.0 var strCode: stringvar codeString: string -
Callclass 1-to-1 callPrevious WebPlanetKit 6.0 function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady()function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements) -
Conferenceclass Group callPrevious WebPlanetKit 6.0 function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady()function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements) -
MediaStreamManagerclass 1-to-1 callGroup callPrevious WebPlanetKit 6.0 function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady() -
Utilclass 1-to-1 callGroup callPrevious WebPlanetKit 6.0 function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements) -
VIDEO_PAUSE_REASONenum 1-to-1 callGroup callPrevious WebPlanetKit 6.0 PLANETKIT_VIDEO_PAUSE_REASON_BY_USERBY_USERPLANETKIT_VIDEO_PAUSE_REASON_BY_INTERRUPTBY_INTERRUPTPLANETKIT_VIDEO_PAUSE_REASON_UNDEFINEDUNDEFINEDPLANETKIT_VIDEO_PAUSE_REASON_INTERNALINTERNALPLANETKIT_VIDEO_PAUSE_REASON_ENABLE_VIDEO_RESPONSEENABLE_VIDEO_RESPONSEPLANETKIT_VIDEO_PAUSE_REASON_CAMERA_INACTIVECAMERA_INACTIVE -
KIT_DISCONNECT_REASONenum 1-to-1 callGroup callPrevious WebPlanetKit 6.0 PLANETKIT_DISCONNECT_REASON_NORMALNORMALPLANETKIT_DISCONNECT_REASON_DECLINEDECLINEPLANETKIT_DISCONNECT_REASON_CELL_CALLCELL_CALLPLANETKIT_DISCONNECT_REASON_INTERNAL_ERRORINTERNAL_ERRORPLANETKIT_DISCONNECT_REASON_USER_ERRORUSER_ERRORPLANETKIT_DISCONNECT_REASON_INTERNAL_KIT_ERRORINTERNAL_KIT_ERRORPLANETKIT_DISCONNECT_REASON_AUDIO_TX_NO_SRCAUDIO_TX_NO_SRCPLANETKIT_DISCONNECT_REASON_CANCELCANCELPLANETKIT_DISCONNECT_REASON_BUSYBUSYPLANETKIT_DISCONNECT_REASON_NOANSWERNOANSWERPLANETKIT_DISCONNECT_REASON_ALREADY_GOT_A_CALLALREADY_GOT_A_CALLPLANETKIT_DISCONNECT_REASON_MULTIDEV_IN_USEMULTIDEV_IN_USEPLANETKIT_DISCONNECT_REASON_MULTIDEV_ANSWERMULTIDEV_ANSWERPLANETKIT_DISCONNECT_REASON_MULTIDEV_DECLINEMULTIDEV_DECLINEPLANETKIT_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDEDMAX_CALL_TIME_EXCEEDEDPLANETKIT_DISCONNECT_REASON_NETWORK_UNSTABLENETWORK_UNSTABLEPLANETKIT_DISCONNECT_REASON_PUSH_ERRORPUSH_ERRORPLANETKIT_DISCONNECT_REASON_AUTH_ERRORAUTH_ERRORPLANETKIT_DISCONNECT_REASON_RELEASED_CALLRELEASED_CALLPLANETKIT_DISCONNECT_REASON_SERVER_INTERNAL_ERRORSERVER_INTERNAL_ERRORPLANETKIT_DISCONNECT_REASON_UNAVAILABLE_NETWORKUNAVAILABLE_NETWORKPLANETKIT_DISCONNECT_REASON_APP_DESTROYAPP_DESTROYPLANETKIT_DISCONNECT_REASON_SYSTEM_SLEEPSYSTEM_SLEEPPLANETKIT_DISCONNECT_REASON_SYSTEM_LOGOFFSYSTEM_LOGOFFPLANETKIT_DISCONNECT_REASON_MTU_EXCEEDEDMTU_EXCEEDEDPLANETKIT_DISCONNECT_REASON_ROOM_IS_FULLROOM_IS_FULLPLANETKIT_DISCONNECT_REASON_ALONE_KICK_OUTALONE_KICK_OUTPLANETKIT_DISCONNECT_REASON_ROOM_NOT_FOUNDROOM_NOT_FOUNDPLANETKIT_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERRORSERVICE_ACCESS_TOKEN_ERRORPLANETKIT_DISCONNECT_REASON_SERVICE_INVALID_IDSERVICE_INVALID_IDPLANETKIT_DISCONNECT_REASON_SERVICE_MAINTENANCESERVICE_MAINTENANCEPLANETKIT_DISCONNECT_REASON_SERVICE_BUSYSERVICE_BUSYPLANETKIT_DISCONNECT_REASON_SERVICE_INTERNAL_ERRORSERVICE_INTERNAL_ERRORPLANETKIT_DISCONNECT_REASON_SERVICE_HTTP_ERRORSERVICE_HTTP_ERRORPLANETKIT_DISCONNECT_REASON_SERVICE_HTTP_CONNECTION_TIME_OUTSERVICE_HTTP_CONNECTION_TIME_OUTPLANETKIT_DISCONNECT_REASON_SERVICE_INCOMPATIBLE_PLANETKIT_VERSERVICE_INCOMPATIBLE_PLANETKIT_VERPLANETKIT_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTSSERVICE_TOO_MANY_REQUESTSPLANETKIT_DISCONNECT_REASON_WEB_RTC_ABORTWEB_RTC_ABORTPLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_ALLOWEDWEB_RTC_NOT_ALLOWEDPLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_FOUNDWEB_RTC_NOT_FOUNDPLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_READABLEWEB_RTC_NOT_READABLEPLANETKIT_DISCONNECT_REASON_WEB_RTC_OVERCONSTRAINEDWEB_RTC_OVERCONSTRAINEDPLANETKIT_DISCONNECT_REASON_WEB_RTC_SECURITY_ERRORWEB_RTC_SECURITY_ERRORPLANETKIT_DISCONNECT_REASON_WEB_RTC_TYPE_ERRORWEB_RTC_TYPE_ERRORPLANETKIT_DISCONNECT_REASON_WEB_NO_MEDIA_PACKETWEB_NO_MEDIA_PACKETPLANETKIT_DISCONNECT_REASON_WEB_CALL_CONNECT_FAIL_BY_SERVERWEB_CALL_CONNECT_FAIL_BY_SERVERPLANETKIT_DISCONNECT_REASON_WEB_CALL_CONNECT_FAIL_BY_CLIENTWEB_CALL_CONNECT_FAIL_BY_CLIENTPLANETKIT_DISCONNECT_REASON_WEB_SIGNALING_UNEXPECTED_DISCONNECTEDWEB_SIGNALING_UNEXPECTED_DISCONNECTED
Skip microphone access when micOn is false
Starting a call with micOn: false no longer accesses the microphone or requests microphone permission at call start. The microphone is accessed only when the user unmutes during the call. If permission is required, the browser permission prompt is shown at that time.
Add MyMediaStatus snapshot API and media delegate callbacks
Added a synchronous snapshot API that returns the local user's current audio mute, video, and screen share state. Applications no longer need to track these values from individual events when they only need the current state (for example, when rendering the call UI right after evtConnected).
In addition to the snapshot API, four delegate callbacks have been added to notify the application whenever the local user's audio mute state, video status, or screen share state changes. Together with the snapshot API, these callbacks provide a consistent way to read and subscribe to local media state. The existing evtMyScreenShareStoppedOnBrowser callback has been removed. Use evtMyScreenShareStateUpdated instead, which covers that case and all other screen share state transitions.
API
Added
-
Callclass 1-to-1 callfunction getMyMediaStatus()
-
Conferenceclass Group callfunction getMyMediaStatus()
-
MakeCallDelegateprotocol 1-to-1 callevtMyAudioMuted()evtMyAudioUnmuted()evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
-
VerifyCallDelegateprotocol 1-to-1 callevtMyAudioMuted()evtMyAudioUnmuted()evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
-
ConferenceDelegateprotocol Group callevtMyAudioMuted()evtMyAudioUnmuted()evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
-
MyMediaStatusdata class 1-to-1 callGroup call -
MyVideoStatusdata class 1-to-1 callGroup call -
MY_SCREEN_SHARE_STATEenum 1-to-1 callGroup call
Removed
-
MakeCallDelegateprotocol 1-to-1 callevtMyScreenShareStoppedOnBrowser()— replaced byevtMyScreenShareStateUpdated(state)
-
VerifyCallDelegateprotocol 1-to-1 callevtMyScreenShareStoppedOnBrowser()— replaced byevtMyScreenShareStateUpdated(state)
-
ConferenceDelegateprotocol Group callevtMyScreenShareStoppedOnBrowser()— replaced byevtMyScreenShareStateUpdated(state)
Example code
Reading the local user's current media state:
const status = planetKit.getMyMediaStatus();
if (status) {
console.log("Mic muted:", status.isMyAudioMuted);
console.log("Video state:", status.myVideoStatus.state);
console.log("Screen share state:", status.screenShareState);
}
Add Document Picture-in-Picture API
Added support for Document Picture-in-Picture, allowing the local user to detach the entire call UI into an independent floating browser window. The application can render custom HTML, including multiple video elements, controls, and layouts, inside the PiP window.
The SDK creates the PiP window with an empty container element, and the application renders the call UI inside that container. The PiP window is closed automatically when the call ends, when the user closes the PiP window, or when closeDocumentPip() is called.
API
Added
-
Callclass 1-to-1 callstatic function isDocumentPipSupported()function openDocumentPip(options?: DocumentPipOptions)function closeDocumentPip()function getDocumentPipWindow()function getDocumentPipContainer()
-
Conferenceclass Group callstatic function isDocumentPipSupported()function openDocumentPip(options?: DocumentPipOptions)function closeDocumentPip()function getDocumentPipWindow()function getDocumentPipContainer()
-
MakeCallDelegateprotocol 1-to-1 callevtPipOpened(result: DocumentPipResult)evtPipClosed(info: DocumentPipClosedInfo)
-
VerifyCallDelegateprotocol 1-to-1 callevtPipOpened(result: DocumentPipResult)evtPipClosed(info: DocumentPipClosedInfo)
-
ConferenceDelegateprotocol Group callevtPipOpened(result: DocumentPipResult)evtPipClosed(info: DocumentPipClosedInfo)
-
DocumentPipOptionsdata class 1-to-1 callGroup call -
DocumentPipResultdata class 1-to-1 callGroup call -
DocumentPipClosedReasondata class 1-to-1 callGroup call -
DocumentPipClosedInfodata class 1-to-1 callGroup call
Example code
Opening a Document PiP in response to the browser's enterpictureinpicture media session action:
navigator.mediaSession.setActionHandler("enterpictureinpicture", async () => {
const { pipWindow, container } = await planetKit.openDocumentPip();
const video = pipWindow.document.createElement("video");
video.srcObject = planetKit.getMyMediaStream();
video.autoplay = true;
container.appendChild(video);
});
Expose isRecordOnCloudEnabled() on incoming calls
Added an API that allows the callee in a 1-to-1 call to check whether the caller requested cloud recording before accepting the call. The value is parsed from ccParam during verifyCall and is typically checked inside the evtVerified callback before deciding whether to accept the call.
The actual recording activation state during a connected call is still available through the existing isRecordOnCloudActivated() API.
API
Added
-
Callclass 1-to-1 callfunction isRecordOnCloudEnabled()
Example code
planetKit.verifyCall({
...,
delegate: {
evtVerified: () => {
if (planetKit.isRecordOnCloudEnabled()) {
// Inform the user that the caller has requested cloud recording.
}
},
},
});
Simplify peer-initiated video activation during audio calls
When the peer enables video during an audio call, WebPlanetKit now always sets the local user's video to the paused state. Applications no longer need to choose between PAUSE and SEND modes at call start.
The responseOnEnableVideo parameter and the RESPONSE_ENABLE_VIDEO enum have been removed. The corresponding delegate callback has been renamed to evtVideoEnabledByPeerAndMyVideoPaused() so the event name reflects the actual behavior.
API
Changed
-
MakeCallDelegateprotocol 1-to-1 callPrevious WebPlanetKit 6.0 evtVideoEnabledByPeer()evtVideoEnabledByPeerAndMyVideoPaused() -
VerifyCallDelegateprotocol 1-to-1 callPrevious WebPlanetKit 6.0 evtVideoEnabledByPeer()evtVideoEnabledByPeerAndMyVideoPaused()
Removed
-
MakeCallParamsdata class 1-to-1 callvar responseOnEnableVideo?: RESPONSE_ENABLE_VIDEO
-
VerifyCallParamsdata class 1-to-1 callvar responseOnEnableVideo?: RESPONSE_ENABLE_VIDEO
-
RESPONSE_ENABLE_VIDEOenum 1-to-1 call
Keep calls alive across microphone/camera permission changes
WebPlanetKit now keeps the call running when the browser's microphone or camera permission changes in the middle of a call. If the user revokes the permission, the SDK automatically replaces the affected media track with a silent placeholder so the call does not drop. When permission is granted again, the SDK automatically restores the real device track.
In addition, new delegate callbacks notify the application whenever the permission state changes.
Because permission state is now delivered through the unified call delegates, the setupDevicePermissionMonitoring, cleanupDevicePermissionMonitoring, and getDevicePermissionState methods exposed by MediaStreamManager since 5.5.0 have been removed.
API
Added
-
MakeCallDelegateprotocol 1-to-1 callevtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
-
VerifyCallDelegateprotocol 1-to-1 callevtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
-
ConferenceDelegateprotocol Group callevtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
-
PERMISSION_STATEenum 1-to-1 callGroup call
Removed
-
MediaStreamManagerclass 1-to-1 callGroup callfunction setupDevicePermissionMonitoring(onPermissionUpdate)function cleanupDevicePermissionMonitoring()function getDevicePermissionState(deviceType)
Example code
Subscribing to microphone and camera permission changes:
planetKit.makeCall({
...,
delegate: {
evtMicrophonePermissionStateUpdated: (state) => {
if (state === PERMISSION_STATE.DENIED) {
// Show a banner asking the user to restore microphone permission.
}
},
evtCameraPermissionStateUpdated: (state) => {
if (state === PERMISSION_STATE.DENIED) {
// Show a banner asking the user to restore camera permission.
}
},
},
});
Support initial speaker via MediaDeviceId.audioOutput
Added the ability to specify the initial audio output (speaker) device when starting a call. Previously, applications had to wait until the call connected, then call changeAudioOutputDevice() to select a specific speaker. The speaker can now be set at call start through MediaDeviceId.audioOutput, alongside the existing audioInput and videoInput fields.
For consistency within this typedef, the existing input fields have also been renamed.
inputAudio→audioInputinputVideo→videoInput
On Safari, where HTMLMediaElement.setSinkId() is not supported, setting audioOutput has no effect on the call. The SDK uses the default speaker, and the call proceeds normally.
API
Added
-
MediaDeviceIddata class 1-to-1 callGroup callvar audioOutput: string
Changed
-
MediaDeviceIddata class 1-to-1 callGroup callPrevious WebPlanetKit 6.0 var inputAudio: stringvar audioInput: stringvar inputVideo: stringvar videoInput: string
Example code
Setting the initial speaker, microphone, and camera at call start:
const audioInputs = mediaStreamManager.getAudioInputDevices();
const videoInputs = mediaStreamManager.getVideoInputDevices();
const audioOutputs = mediaStreamManager.getAudioOutputDevices();
planetKit.makeCall({
...,
mediaDeviceId: {
audioInput: audioInputs[0].deviceId,
videoInput: videoInputs[0].deviceId,
audioOutput: audioOutputs[0].deviceId,
},
});
Rename 'empty' to 'none' for input device sentinel
changeAudioInputDevice() and changeVideoInputDevice() now accept 'none' as the "no device" value (the silent placeholder used when the user has no microphone or camera). Applications that use 'empty' must update to 'none'. The behavior is unchanged: the active track is replaced with a silent placeholder.
API
Changed
-
Callclass 1-to-1 callPrevious WebPlanetKit 6.0 function changeAudioInputDevice('empty')function changeAudioInputDevice('none')function changeVideoInputDevice('empty')function changeVideoInputDevice('none') -
Conferenceclass Group callPrevious WebPlanetKit 6.0 function changeAudioInputDevice('empty')function changeAudioInputDevice('none')function changeVideoInputDevice('empty')function changeVideoInputDevice('none')