domainfrontTier 1
Domain fronting
Connects to a large CDN under an innocuous server name, then asks for the real origin inside the encrypted request. Blocking it means blocking the CDN. Kindling only counts a front as connected after a real TLS handshake, so a dead front can't win the race.
streaming okconfig refreshed remotely
smartTier 1
Proxyless dialing
The Outline SDK smart dialer connects straight to the destination and searches for a trick that gets past DNS and SNI blocking:
- DNS over HTTPS through a dozen resolvers
- TCP stream splitting and out-of-order segments
- TLS record fragmentation
ampTier 1
AMP cache
Rides Google's AMP cache, a technique introduced by David Fifield, with Lantern's implementation. Censors that need Google can't block it cleanly. Request bodies are capped, so kindling routes only small requests here.
bodies ≤ 6,000 bytesno streaming
soarLast resort
Soar DNS tunnel
Soar carries the request inside DNS queries through whatever resolvers the network allows, including in Russia, where UDP is intercepted, and in China, where forged answers are injected. It's slower than the others, so kindling dials it only after every tier 1 transport has failed.
works when only DNS doesconnects in under 1 s
WithTransport(…)Tier 1 by default
Your transport
Anything that can return an http.RoundTripper can join the race. Implement the Transport interface, returning 0 from MaxLength() and RequestTimeout() for no cap and the default timeout, and add an optional Priority() int to race in a later tier. Kindling handles the racing, retries and timeouts.