Skip to content

Browser Support

Chrome 56+ · Firefox 44+ · Safari 11+ · Edge 79+

Overview ​

RTCDataChannel is an arbitrary data channel established on RTCPeerConnection. Unlike WebSocket, DataChannel uses P2P direct connection, no server relay, lower latency, and is bidirectional full-duplex.

Gamepad sync, file transfer, collaborative editing, real-time whiteboard — these scenarios fit DataChannel perfectly.

Quick Start ​

js
// === Caller ===
const pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] });

const channel = pc.createDataChannel('chat', { ordered: true });

channel.onopen = () => {
  channel.send('Hello, peer!');
};

channel.onmessage = (e) => {
  console.log('Received:', e.data);
};

// === Callee ===
pc.ondatachannel = (e) => {
  const recvChannel = e.channel;
  recvChannel.onopen = () => recvChannel.send('Reply: You too!');
  recvChannel.onmessage = (e) => console.log('Received:', e.data);
};

Reliability Modes ​

js
pc.createDataChannel('label', {
  ordered: true,    // Preserve order (like TCP)
  // ordered: false, // Prioritize low latency, no order guarantee (like UDP)
});
ModeUse Case
ordered: trueFile transfer, JSON messages, collaborative editing (order matters)
ordered: falseGamepad, real-time position, voice commands (packet loss tolerable)

Comparison with WebSocket ​

FeatureRTCDataChannelWebSocket
Transmission pathP2P directVia server relay
LatencyExtremely lowHigher
Reconnect on disconnectNeed to rebuild connectionAuto reconnect
Server costNo relay server neededNeeded
ComplexityComplex signalingSimple

Notes ​

  • ICE negotiation must complete first: readyState becomes 'open' only after connection establishes
  • Peer must be online: P2P means both ends must keep page open; no "offline message" concept
  • Large data must be fragmented: Single send cannot exceed 16 MB
  • NAT traversal failure = unusable: Like media streams, P2P data also depends on ICE

Released under the MIT License.