Go package hosted at tgragnato/snowflake.
Documentation available at pkg.go.dev.
- golang 1.24+ & bumped dependencies
- custom transport for broker negotiation (TLS 1.3 with selected ciphersuites & groups, MultiPath TCP)
- custom DTLS fingerprint, different from any popular WebRTC implementation
- use the Setting Engine to reduce MulticastDNS noise
- use a context aware io.Reader that closes on errors in copyLoop
- extremely simple token handling
- client padding to evade TLS in DTLS detection
- introduction of a proxy option to force the NAT type as unrestricted
- coder/websocket in place of gorilla/websocket

We have more documentation in the Snowflake wiki and at https://snowflake.torproject.org/.
Structure of this Repository
broker/contains code for the Snowflake brokerdoc/contains Snowflake documentation and manpagesclient/contains the Tor pluggable transport client and client library codecommon/contains generic libraries used by multiple pieces of Snowflakeproxy/contains code for the Go standalone Snowflake proxyprobetest/contains code for a NAT probetesting serviceserver/contains the Tor pluggable transport server and server library code