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 Web site 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 */
    case "raw":
      /* process raw binary data */


WebRTC 1.0: Real-Time Communication Between Browsers
# dom-datachannel-protocol

Browser compatibility

BCD tables only load in the browser

See also