Snowflake is a pluggable transport that proxies traffic through temporary proxies using WebRTC, a peer-to-peer protocol with built-in NAT punching. It aims to work kind of like flash proxy, but without flash proxy's problems with NAT.

Work in progress.

User graph:

Evaluation at PluggableTransports/SnowFlakeEvaluation.

欢迎测试 Tor 浏览器的新网桥 (目前仅支持 Mac OS X 与 Linux) (#22782 has been fixed, it needs to be retested now)

How to run a Snowflake proxy

Option 1 (web browser)

In a browser where WebRTC is enabled:

  1. Go to and click the Yes button to opt in to being a proxy.
  2. Go to and watch the status messages. You shouldn't close that page if you want to remain a snowflake bridge.

Updated screenshot of snowflake.html

#!div style="font-size: 80%" Note: the Snowflake proxy code lives at It formerly lived at, but as of 2018-04-16 that location isn't being maintained and points to no-longer-used infrastructure. See comment:7:ticket:22874.

Option 2 (standalone)

  1. Get the #Source code.
  2. cd proxy-go
    go get
    go build

Source code

The following should result in a 100% bootstrap over WebRTC:

git clone
cd snowflake/client
go get
go build
tor -f torrc

Integration with Tor Browser

2018-11-30: Snowflake is included in alpha releases of Tor Browser for GNU/Linux and macOS. Not Windows yet.

Further integration of Snowflake into Tor Browser is being tracked at ticket #19001.

To build from source code, first see doc/TorBrowser/Hacking, doc/TorBrowser/BuildingWithGitian, and gitian/ In the tor-browser-build directory, make alpha or make testbuild will result in browsers with included Snowflake.

WebRTC fingerprintability

Notes at Snowflake/Fingerprinting.


See also:

(Same query, including closed tickets)

Ticket Summary Status Owner Keywords Priority
#19001 Tor Browser with Snowflake new Very High
#19026 Remove local LAN address ICE candidates new Medium
#19315 Include libwebrtc license files in bundle new starter Medium
#19409 Make a deb of snowflake and get into Debian new High
#19569 DataChannel-only libwebrtc new arlolra Medium
#20813 Start producing snowflakes new High
#21304 Sanitize snowflake.log new starter Medium
#21305 Client gets into an unrecoverable connect / close loop new Medium
#21314 snowflake-client needs to stop using my network when I'm not giving it requests new Medium
#21315 publish some realtime stats from the broker? new Medium
#22718 OpenWebRTC? new Low
#22945 End-to-end confidentiality for Snowflake client registrations new Medium
#23257 Snowflake doesn't connect on the CalVisitor network new Medium
#23344 Show country of temporary bridge used in snowflake just like with the obfs4 PT in the Torbutton new tbb-team snowflake Medium
#23888 Creating a Snowflake WebExtension addon new ux-team Medium
#24465 Snowflake broken if no libatomic on host needs_revision tbb-team snowflake, tbb-rbm Medium
#25429 Need something better than client's `checkForStaleness` new Medium
#25483 Windows reproducible build of snowflake assigned sukhbir TorBrowserTeam201805 High
#25591 Pass ICE server information from Broker to WebRTC Client new Medium
#25593 Broker needs better resilience against DoS new Medium
#25594 Broker: investigate non-domain-fronting secure client / proxy registrations new Medium
#25595 Test suite for Snowflake on various NAT topologies new Medium
#25596 Configure TURN servers for the proxy and/or client new Medium
#25598 Let the broker inform proxies how often to poll new starter Medium
#25599 SOCKS4 failure message new Medium
#25601 Multiplex - one snowflake proxy should be able to support multiple clients new Medium
#25681 Defend against flooding of the broker by low bandwidth snowflakes new Medium
#25688 proxy-go is still deadlocking occasionally new Low
#25722 Put an opt-in button on the main snowflake page new ux-team Medium
#25723 Multiplex - one client splits traffic across multiple proxies new Low
#25874 DNS-based rendezvous for Snowflake new Medium
#25966 Report on Tor in the UAE (and question about Snowflake) new dcf snowflake Very Low
#25985 Snowflake rendezvous using AMP cache needs_revision Medium
#26092 Split broker into components new Low
#26151 Snowflake rendezvous using Amazon SQS new Medium
#26348 Guard against large reads new easy Medium
#27385 is confusing new snowflake, ux-team High
#27850 Provide stand-alone snowflake proxy for 32-bit new Medium
#28651 Prepare all pieces of the snowflake pipeline for a second snowflake bridge new Medium
#28672 Android reproducible build of Snowflake new android Medium
#28726 Loosen restrictions on message sizes in WebSocket server new Medium
#28732 Standardize on ArrayBuffer as the type of WebRTC messages needs_review Medium
#28784 Assembling WebRTC sources fails with error "You have unstaged changes" new tbb-team tbb-rbm, snowflake Medium
#28848 Document Snowflake broker implementation new Medium

Last modified 11 days ago Last modified on Dec 3, 2018, 9:40:15 PM

Attachments (4)

Download all attachments as: .zip