logo

Show HN: I'm solo-building a privacy browser in Tauri

Posted by kovaaksplayer |3 hours ago |1 comments

kovaaksplayer 3 hours ago

Early access — core works, not a daily driver yet. Been building this solo for about a week on Tauri v2 (Rust + WebView2).

Ad blocking at the COM level. Intercepts network requests via WebView2's WebResourceRequested before the page loads. adblock-rust with ~140k EasyList + EasyPrivacy rules, ~4.6μs per-request matching. Cached to disk as binary - 5ms warm load. No extension to disable, page JS can't detect it.

23 fingerprint resistance mitigations. Canvas PRNG noise, performance.now() clamped to 16.67ms, hardwareConcurrency spoofing, speechSynthesis/mediaDevices/storage.estimate blocked, WebGL renderer spoofed, toString() hardened Always-on

  Encrypted LAN sync. mDNS discovery, SPAKE2 zero-knowledge pairing (6-digit code never transmitted), Noise XX encrypted TCP, Loro CRDT for conflict-free merging of bookmarks, history, settings, and open tabs.

  Parallel downloads. 6-segment chunked downloads, pause/resume via HTTP Range, cookie extraction from WebView2 for authenticated downloads, crash-safe manifest persistence.

  Smart tab lifecycle. Active → suspended (COM TrySuspend, ~85% memory saved, instant resume) → destroyed (0 bytes, reloads on focus). Auto-suspends inactive tabs.

  Also: split view (4 panes), reader mode, PiP, sidebar media controls, cookie banner auto-reject, HTTPS-only, Chrome/Edge/Firefox import, themes.

  Some pain points:

  - COM callbacks that panic across FFI = 0xc0000005. Every handler needs catch_unwind + AssertUnwindSafe
  - adblock-rust single-thread feature must be disabled for Send + Sync
  - WebSockets don't fire WebResourceRequested — known gap
  - TrySuspend callback is (HRESULT, BOOL) and barely documented

  Windows only atm. ~27MB binary. Build instructions in the repo.