Skip to content
WebRTC.wiki
Glossary

Trickle ICE

Also written trickle, a=ice-options:trickle, end-of-candidates

Sending the offer or answer before gathering has finished, then delivering candidates over signalling as they turn up.

Vanilla ICE waits for gathering to complete before it can produce an SDP, which means the slowest candidate sets the pace. A TURN allocation behind a slow relay can hold the whole offer hostage for hundreds of milliseconds.

Trickle ICE breaks that dependency. You send the offer with whatever candidates you have, usually just the host ones, and push the rest through your signalling channel as they arrive. Checks start against the early candidates while the slow ones are still being gathered.

Both sides advertise support with a=ice-options:trickle. When gathering is done you say so, either with an a=end-of-candidates attribute or, in the browser, by the icecandidate event firing with a null candidate. Without that signal the peer cannot tell “still gathering” from “nothing more is coming” and has to wait out a timer.

Half trickle is the fallback for a peer that does not support it: gather everything, then send it in one go. You lose the latency win but stay compatible.