This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
The read-only RTCDataChannel property protocol returns a string containing the name of the subprotocol in use. If no protocol was specified when the data channel was created, then this property's value is the empty string ("").
Note: The permitted values of this property are defined by the website or app using the data channel.
The ability for each channel to have a defined subprotocol lets your app, for example, use JSON objects as messages on one channel while another channel is plaintext and another is raw binary or even some other format.
A string identifying the app-defined subprotocol being used for exchanging data on the channel. If none has been established, this is an empty string ("").
const pc = new RTCPeerConnection();
const dc = pc.createDataChannel("my channel", {
protocol: "json",
});
function handleChannelMessage(dataChannel, msg) {
switch (dataChannel.protocol) {
case "json":
/* process JSON data */
break;
case "raw":
/* process raw binary data */
break;
}
}
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
protocol |
30 | 79 | 22 | 17 | 11 | 30 | 24 | 18 | 11 | 2.0 | 4.4 | 11 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel/protocol