Your VPN hides your IP. Your ISP still sees every DNS query. Your tunnel gets flagged by deep packet inspection. And everything you encrypt today can be harvested now and cracked once quantum computers land. Hasenpfote closes those network gaps from a single system tray icon.
For: everyday browsing, coffee shop WiFi, ad-tech tracking. No tunnel, no slowdown — your DNS stays private and tracker domains never resolve.
For: banking, sensitive email, corporate networks, restrictive ISPs. Full encrypted tunnel — and to deep packet inspection it carries no WireGuard signature, just generic UDP.
For: journalists, activists, whistleblowers, anyone whose traffic pattern is itself a risk. Sender anonymity through 5-hop mixnet routing. Your ISP can't see where you're going. The destination can't see where you came from.
Tauri GUI (Svelte 5, 1.6KB bundle, user process) | | gRPC over Unix Domain Socket | hp-daemon (root, privileged orchestrator) | -----+------+--------+--------+-----------+ | | | | | hp-mixnet hp-tunnel hp-dns hp-fingerprint hp-pqc (Nym 5-hop) (AWG 2.0) (DoQ/DoH) (browser) (X-Wing) | | -----+---------+------ | | hp-routing hp-firewall (TUN device) (kill-switch)
Strict privilege separation. The Tauri GUI runs as a normal user — it never touches the network stack. All privileged operations (TUN device creation, firewall rules, DNS interception, route table changes) are isolated in the root daemon. The two communicate over gRPC through a Unix domain socket with peer-credential authentication. Why gRPC over D-Bus or REST? Typed contracts via protobuf, server-streaming for real-time status events, and forward-compatible versioning. If the daemon panics, a registered cleanup hook tears down firewall rules and restores system DNS before the process exits.
AmneziaWG 2.0 removes everything DPI keys on: the fixed 0x01–0x04 message types become randomized magic headers, the tell-tale 148/92/64-byte handshake sizes are padded away, and junk packets muddy the flow start. DPI that flags standard WireGuard in milliseconds sees only generic UDP. Confirmed with a packet capture on public WiFi — 120 packets to the relay, zero carrying a WireGuard signature. (Honest limit: this defeats signature-based DPI, not a determined statistical flow analysis — that's what Maximum mode is for.)
Every tunnel uses X-Wing — a hybrid KEM that derives keys from both X25519 (classical, proven) and ML-KEM-768 (NIST-standardized, lattice-based). The derived secrets are combined via HKDF-SHA256. Pre-shared keys rotate every 90 seconds through the relay. If either algorithm is broken, the other still holds. This protects against harvest-now-decrypt-later attacks that are already happening.
A local stub resolver binds to 127.0.0.1:53; system DNS is redirected via launchd/systemd so no query leaves the machine in cleartext. Upstream it uses DNS-over-QUIC to Quad9 with a DoH fallback — your ISP can't read what you resolve. (Oblivious DoH, which would also hide queries from the resolver itself, is on the roadmap, not shipped.)
When a tunnel is active, pf (macOS) or nftables (Linux) rules default-deny all outbound traffic except the tunnel interface and essential system services. If the tunnel drops, traffic stops — it doesn't fall back to cleartext. During mode transitions, rules are updated atomically before the new tunnel is established. On daemon crash, a panic hook removes rules and restores DNS.
Maximum mode routes traffic through Nym's 5-hop mixnet via a local SOCKS5 proxy. Unlike a VPN, where the provider sees both sides, each mix node only knows its predecessor and successor. Continuous cover traffic defeats timing analysis even when the user is idle. Current integration is PoC-level (SOCKS5 to nym-socks5-client binary); production path is direct integration with nym-vpnd.
"Every privacy tool asks you to make a permanent choice: maximum protection with broken websites, or fast browsing with no protection. That's a false trade-off. A lawyer reviewing contracts and a journalist meeting a source have different threat models — but they shouldn't need different software."
— The design principle behind three modes
12 Rust crates. Privilege-separated daemon. Post-quantum by default. Open source, self-hostable, research-backed — don't trust it, verify it.
Let's Talk →