← Chrome 151 reference

v151 · origin trial · webrtc · data channel

WebRTC Data Channel: SCTP Negotiation Acceleration Protocol

Limited availability

  • Chrome · origin trial 151–156
  • Edge · not separately reported
  • Firefox · no signal
  • Safari · no signal

The SNAP extension itself is Chromium-only in origin trial — Gecko, WebKit, and web developers all recorded “No signal” on the Intent to Experiment. The underlying webrtc web-feature is separate and Baseline widely available (since 2022-07-15 per webstatus.dev, fetched 2026-07-28).

An SDP-level acceleration for WebRTC data channels — the SCTP Negotiation Acceleration Protocol (SNAP) carries a base64-encoded SCTP INIT chunk in a new a=sctp-init media-level attribute inside the SDP offer/answer exchange, so the SCTP association is considered established as soon as the DTLS handshake finishes. Skipping the SCTP four-way handshake reduces the time to open a data channel by up to two network round-trip times.

Origin trial — API surface may move

SNAP is in origin trial on desktop in Chrome 151–156 (the Intent to Experiment records “Origin trial desktop first 151, last 156”, LGTM’d for M151–M156 inclusive). To use it:

at a glance

What it isA new SDP media-level attribute, a=sctp-init:<base64>, that embeds the sender’s SCTP INIT chunk in SDP so the SCTP four-way handshake can be skipped once DTLS is up
JS API changeNone — no new interfaces, methods, or properties. The change is entirely at the SDP/SCTP layer; RTCPeerConnection.createDataChannel() and RTCDataChannel semantics (including negotiated) are unchanged
Observable effectThe offer/answer SDP for a data m= section carries a=sctp-init (inspectable via pc.localDescription.sdp); data channels reach open up to two RTTs sooner; a peer that does not support the extension simply omits the attribute in its answer and the classic handshake runs
Chrome statusOrigin trial, desktop 151–156 (milestone listing: “Origin trial”, verified 2026-07-28); the intent states the feature is supported on all six Blink platforms
Specificationdraft-hancke-tsvwg-snap — individual Internet-Draft, expired 2026-07-03 (datatracker: “Expired Internet-Draft (individual)”), not adopted by a working group at fetch time
Runtime gatingOrigin-trial token (no about://flags entry per the intent); Finch feature name WebRtcSctpSnap; usage measured via UMA WebRTC.PeerConnection.NegotiatedSctpSnap
Tracking bugissues.webrtc.org #426480601 — “accelerate data channel setup with SNAP”
ChromeStatus5137946677215232 — WebRTC Data Channel: SCTP Negotiation Acceleration Protocol
Source: blink-dev Intent to Experiment; ChromeStatus API record; IETF datatracker, fetched 2026-07-28.

why it exists

WebRTC data channels run SCTP (RFC 9260) encapsulated in DTLS (RFC 8261), per the data-channel framework in RFC 8831. SCTP establishes associations with a four-way handshake (INIT / INIT ACK / COOKIE ECHO / COOKIE ACK) whose purpose is protection against half-open (SYN-flood) attacks. In WebRTC that protection is redundant: the DTLS layer underneath already provides a secure, encrypted channel that prevents half-open attacks — but the handshake still costs up to two round trips before the first DCEP open message can flow:

classic (draft §1)                     with SNAP (draft §1)
─────────────                          ─────────
SDP Offer ---------------->            SDP Offer (sctp-init) --->
<--1-- SDP Answer --------            <--1-- SDP Answer (sctp-init)
<--2-- ICE checks --------            <--2-- ICE checks --------
DTLS handshake (3,4) ----->            DTLS handshake (3,4) ----->
SCTP INIT ---------------->            DCEP (Open Channel) --->
<--5-- SCTP INIT ACK ------            <----- DCEP ACK ----------
SCTP COOKIE ECHO -------->
<--6-- SCTP COOKIE ACK ----
DCEP (Open Channel) --->
<----- DCEP ACK ----------

The draft notes that RFC 9260 allows the COOKIE ECHO and COOKIE ACK packets to carry data, so the second saved RTT “is not strictly necessary but was observed in practice” — the real-world saving is up to two RTTs, with one RTT saved even when data piggybacking works.

Source: draft-hancke-tsvwg-snap-00 §1, fetched 2026-07-28.

how it works

SNAP is negotiated entirely inside SDP offer/answer — no JavaScript surface changes:

  1. An endpoint that has created a WebRTC data channel MUST have its SCTP implementation serialize the INIT chunk it would normally send, base64-encode it, and add it as an a=sctp-init line to the data m= section of its offer (offerer procedure).
  2. The answerer parses and validates the attribute (base64 decoding, then SCTP-level INIT chunk validation — both are error paths), and if valid, responds with its own a=sctp-init (answerer procedure). An endpoint not supporting the extension MUST NOT include the attribute in its answer — the classic handshake then runs, so SNAP is strictly additive and backwards-compatible.
  3. When both sides negotiated a=sctp-init, both SHOULD consider the SCTP association ESTABLISHED as soon as the DTLS handshake finishes, skipping steps A–E of RFC 9260 §5.1 — no COOKIE-WAIT state, no T1-init timer (SCTP state shortcut).

The attribute itself — syntax, placement rules, worked decode, renegotiation constraints, and IANA status — is documented on the a=sctp-init reference page.

Source: draft-hancke-tsvwg-snap-00 §4–§6.

examples

There is no new JavaScript to call — the observable change is in the SDP your RTCPeerConnection produces and consumes. Create a data channel before negotiating, then inspect the offer:

const pc = new RTCPeerConnection();
const dc = pc.createDataChannel("chat"); // triggers the data m= section
await pc.setLocalDescription(await pc.createOffer());
console.log(pc.localDescription.sdp.includes("a=sctp-init:"));
// true when SNAP is active (origin-trial token present, feature on)

An a=sctp-init line in a negotiated data m= section (full exchange on the offer/answer page):

m=application 9 UDP/DTLS/SCTP webrtc-datachannel
...
a=sctp-port:5000
a=max-message-size:262144
a=sctp-init:AQAAHols3R0AUAAA/////+B5ZR3AAAAEgAgABoLA
Live example from the Chrome Platform Showcase — inspect the generated SDP and the sctp-init attribute.Source: chrome-platform-showcase (HEAD-checked 200, 2026-07-28)
Source: SDP excerpt from draft-hancke-tsvwg-snap-00 §7; API shape from W3C WebRTC 1.0 — RTCDataChannel.

browser compatibility

BrowserSNAP supportNotes
ChromeOrigin trial 151–156 (desktop)Milestone listing “Origin trial” (verified 2026-07-28); intent states all six Blink platforms supported; token-gated
EdgeNot separately reportedChromium-based; no separate signal recorded on the intent
FirefoxNo signalGecko position recorded as “No signal” on the intent
SafariNo signalWebKit position recorded as “No signal” on the intent

Interim table: SNAP has no BCD entry and the draft is not a adopted standard, so rows above cite the Intent to Experiment directly. The underlying data-channel API is fully interoperable — BCD api/RTCDataChannel.json: Chrome 24+, Firefox 22+, Safari 11+ — and a non-SNAP peer simply falls back to the classic handshake (the answer omits the attribute).

Source: blink-dev Intent to Experiment; BCD api/RTCDataChannel.json, fetched 2026-07-28.

security & privacy

Source: draft-hancke-tsvwg-snap-00 §8 (Security Considerations).

specifications

SpecificationStatus
draft-hancke-tsvwg-snap — SCTP Negotiation Acceleration ProtocolIndividual Internet-Draft (Informational); revision -00 of 2025-12-29; expired 2026-07-03, not WG-adopted at fetch time; source + issue tracker at github.com/fippo/warp-snap-sped
RFC 9260 — Stream Control Transmission ProtocolNormative reference (INIT chunk §3.3.2, association setup §5.1)
RFC 8831 — WebRTC Data Channels · RFC 8832 — DCEPInformative references (data-channel framework; webrtc-datachannel fmt value)
RFC 8841 — SDP O/A for SCTP over DTLS · RFC 8842 — SDP O/A for DTLS/TLSInformative references (UDP/DTLS/SCTP proto; new-association rules SNAP §5.6 builds on)
Source: IETF datatracker (status verified 2026-07-28); draft text §10 (References).

see also