PRIVABROWSE
Transparency Report
PrivaBrowse believes you deserve to know exactly what your browser does. This document discloses every protection mechanism, every blocked domain, and every line of defense — no secrets, no fine print.
- Mission
- Threat Model
- What We Block
- What We Spoof
- What We Strip
- Data Poisoning Engine
- HTTPS Enforcement
- Cookie Consent & Annoyance Removal
- Cosmetic Ad Filtering
- YouTube Ad Blocking
- Search Engine Policy
- Password Vault
- PrivaForge Developer Tools
- Focus Mode
- Data Saver Mode
- What We Do NOT Do
- How We Compare
- How to Verify
- Architecture Overview
- Third-Party Dependencies
- Frequently Asked Questions
- Changelog
PrivaBrowse exists for one reason: your browsing data belongs to you and only you.
We reject the surveillance-capitalist model where browsers silently funnel your habits, preferences, and identity to advertising networks. Every feature in PrivaBrowse is designed to make mass tracking technically impossible — not just discouraged, but actively poisoned.
Privacy is not a feature we bolt on. It is the architecture.
PrivaBrowse is engineered to defend against the following threats:
| Threat | Defense |
|---|---|
| Cross-site tracking | Domain blocking, cookie isolation, referrer stripping, URL parameter cleaning, network state partitioning |
| Browser fingerprinting | 60+ spoofed vectors randomized per session |
| Supercookie tracking | ETag stripping, HSTS cache clearing (startup + every 30 min), favicon cache clearing, Client Hints removal |
| Data exfiltration | Nuclear data poisoning — 55+ API fields + smart header poisoning on tracker endpoints |
| IP address leaks | WebRTC policy enforcement, IP header spoofing on tracker requests |
| Privacy Sandbox surveillance | FLEDGE, Topics, Attribution Reporting, Shared Storage, Fenced Frames all disabled via flags + Permissions-Policy |
| Network cross-site leakage | HTTP cache, connections, SSL sessions, DNS all partitioned per top-level site |
| Bounce tracking | Rapid redirect chains (< 1.5s) detected; bounce tracker cookies/storage auto-purged |
| Stale cookie persistence | Cookies for domains not visited in 7+ days automatically deleted |
| CDN-based tracking | Decentraleyes-style CDN privacy — cookies/referrer stripped from CDN requests, tracking scripts blocked |
| Cryptojacking | 84+ miner domains blocked at the network level |
| Social media surveillance | 112+ social tracker domains blocked unconditionally |
| Search profiling | Surveillance-based search engines removed entirely |
| Cookie consent fatigue | Automatic banner dismissal — you shouldn't have to click "reject" 50 times a day |
| Newsletter/paywall harassment | Popup overlays automatically removed |
| Redirect tracking | Redirect tracker bypass — t.co, l.facebook.com, google.com/url resolved directly |
| Storage-based tracking | 60+ tracker localStorage keys and IndexedDB databases purged every 60 seconds |
| WebSocket/EventSource tracking | WS payloads poisoned, SSE connections blocked for tracker hosts |
| Anchor ping tracking | HTML ping attributes stripped, document.referrer sanitized to origin-only |
| Link click tracking | 110+ tracking parameters stripped from <a> hrefs in real-time before clicks |
Transparency means honesty about limits:
- State-level adversaries — PrivaBrowse is not Tor. Your ISP can still see which domains you connect to (use a VPN or Tor for that layer).
- Malware/phishing — We are not an antivirus. We block trackers, not malicious payloads.
- Compromised endpoints — If the website itself is hostile (e.g., a keylogger on a login page), browser-level protection has limits.
- Physical access — If someone has your machine, disk encryption is your defense, not a browser.
| Category | Count | Method |
|---|---|---|
| Fast-Block Hosts | 740+ domains | O(1) Set lookup on every request — zero performance overhead |
| Extended Blocklist (ads) | 408 domains | Loaded from src/blocklist.js |
| Extended Blocklist (trackers) | 446 domains | Loaded from src/blocklist.js |
| Extended Blocklist (aggressive) | 358+ domains | Loaded from src/blocklist.js |
| Social Tracker Hosts | 112 domains | Facebook, Twitter, LinkedIn, Pinterest, Instagram, ShareThis, AddToAny, etc. |
| Crypto Miner Hosts | 84 domains | Coinhive, CryptoLoot, JSEcoin, Mineralt, WebminePool, etc. |
| Combined Total | 2,100+ domains | All lists are deduplicated and auditable |
- 100+ regex patterns matching ad-serving URL structures (
/ads/,/adserv/,/pagead/, etc.) - Tracking pixel detection — 1x1 images, clear GIFs, spacer GIFs, beacon endpoints
- Script filename blocking —
ads.js,tracking.js,analytics.min.js,gtag.js,fbevents.js,pixel.js,tracker.min.js - Third-party iframe blocking — prevents cross-origin frames from loading tracker content (with a whitelist for ReCAPTCHA, YouTube embeds, Stripe payments, and other functional iframes)
- Web Vitals / Reporting API endpoint blocking —
web-vitals.js,/.well-known/attribution-reporting - Fingerprint script blocking —
fp.js,fingerprint*.js
Click to expand the full list of blocked services
Advertising Networks: Google Ads, DoubleClick, Facebook Ads, Twitter Ads, LinkedIn Ads, TikTok Ads, Amazon Ad System, Taboola, Outbrain, Criteo, Bing BAT, Yahoo Ads, AdRoll, MediaMath, The Trade Desk, AppNexus
Analytics & Tracking: Google Analytics, Hotjar, Clarity, Mixpanel, Segment, Amplitude, Chartbeat, Parsely, Piano, Permutive, Heap Analytics, Kissmetrics, Crazy Egg
Tag Managers & Pixels: Facebook Pixel, Google Tag Manager, LinkedIn Insight Tag, TikTok Pixel, Pinterest Tag, Snapchat Pixel
Session Recording: FullStory, Mouseflow, LogRocket, Smartlook, Lucky Orange
Marketing Automation: HubSpot, Marketo, Pardot, Salesforce, Mailchimp tracking, ActiveCampaign
A/B Testing: Optimizely, VWO, Google Optimize, AB Tasty
Attribution & Mobile: AppFlyer, Adjust, Branch, Kochava, Singular
Error Tracking: New Relic, Datadog, Sentry (blocked as tracker — errors stay on your machine)
Crypto Miners: Coinhive, CryptoLoot, JSEcoin, Mineralt, WebminePool, CoinImp, and 78 more
PrivaBrowse maintains a per-domain count of every blocked request. You can inspect the Tracker Graveyard from the browser's toolbar to see exactly how many trackers were stopped on each site you visit — full transparency into what's being blocked and where.
Every vector is randomized per-session to prevent cross-site linkage:
| Category | Vectors |
|---|---|
| Canvas | toDataURL(), toBlob(), getImageData() — subtle noise injection |
| WebGL | Renderer/vendor strings randomized, getParameter() spoofed, shader precision varied |
| AudioContext | getFloatFrequencyData() noise, createAnalyser() fuzz |
| Navigator | hardwareConcurrency, deviceMemory, platform, vendor, plugins, mimeTypes |
| Screen/Window | screen.width/height, availWidth/Height, colorDepth, pixelDepth, outerWidth/Height |
| ClientRects | getBoundingClientRect(), getClientRects() — sub-pixel noise |
| Timing | performance.now() precision reduced, Date precision reduced |
| Fonts | Font enumeration blocked, measureText() fuzzed |
| MediaDevices | enumerateDevices() returns empty or randomized list |
| Storage | localStorage/sessionStorage quotas fuzzed |
| Permissions API | Always returns "prompt" regardless of actual state |
| Language/DNT/GPC | Randomized Accept-Language, navigator.language, Do-Not-Track: 1, Sec-GPC: 1 |
| Timezone | Randomized Intl.DateTimeFormat resolved options |
| Math | Subtle variations in Math.tan(), Math.log(), etc. |
| WebRTC | IP leak prevention, RTCPeerConnection restricted via disable_non_proxied_udp policy |
| WebGPU | Adapter info spoofed |
| CSS matchMedia | Randomized prefers-color-scheme, prefers-reduced-motion |
| Navigator Extended | pdfViewerEnabled, cookieEnabled, javaEnabled(), mimeTypes, plugins |
| Performance | performance.memory heap size limits spoofed |
| CSS | CSS.supports() return values randomized |
| DOM | document.elementsFromPoint(), document.visibilityState spoofed |
| Network | navigator.connection (effectiveType, downlink, rtt) randomized |
| Encoding | TextEncoder/TextDecoder behavior normalized |
| Observers | IntersectionObserver timing fuzzed |
These APIs are completely disabled to prevent fingerprinting:
Full list of disabled APIs
Battery Status, Gamepad, Speech Synthesis, Keyboard Layout Map, USB, Bluetooth, Serial, HID, XR (WebVR/WebXR), Sensor APIs (Accelerometer, Gyroscope, Magnetometer, AmbientLight), MIDI, Idle Detection, Device Motion/Orientation, Presentation, CSS Paint Worklet, Web Share, Payment Request, Speech Recognition, Contact Picker, Wake Lock, Installed Apps, DRM (EME) fingerprinting, Navigator.pdfViewerEnabled, Navigator.cookieEnabled, Notification.maxActions, Performance.memory, Screen.orientation
PrivaBrowse rotates your User-Agent string either per-session or per-site (configurable). The randomized UA is drawn from a pool of common browser/OS combinations so you blend into the crowd rather than standing out with an unusual string.
- ETag supercookies —
If-None-Matchheader deleted on every request - Client Hints — All 10+
Sec-CH-*headers stripped/spoofed (Sec-CH-UA,Sec-CH-UA-Mobile,Sec-CH-UA-Platform,Sec-CH-UA-Full-Version-List, etc.) - URL tracking parameters — 110+ tracking parameters including
utm_source,utm_medium,utm_campaign,utm_term,utm_content,fbclid,gclid,msclkid,mc_eid,oly_enc_id,oly_anon_id,__hssc,__hstc,__hsfp,_hsenc,vero_id,wickedid, TikTok (_ttp,tt_*), Twitter (twclid), Reddit (rdt_cid), LinkedIn (li_fat_id), Amazon (tag,ascsubtag), Pinterest (epik), and more - Referrer header — Reduced to origin-only or stripped entirely (configurable)
- ETag headers — stripped to prevent supercookie tracking
Accept-CHandCritical-CHheaders — deleted to prevent servers from requesting Client Hints- Tracking cookies — cookies matching known tracker patterns are stripped
Every link on every page is cleaned in real-time. Before you navigate, PrivaBrowse strips utm_*, fbclid, gclid, and other tracking parameters from the destination URL so the receiving site never sees where the click came from.
When fingerprint protection is enabled, PrivaBrowse doesn't just block trackers — it actively poisons every piece of data they try to collect.
Blocking tells a tracker "this user has an ad blocker." That itself is a data point. Poisoning tells the tracker nothing useful — every field looks plausible but is completely fabricated. The tracker's dataset becomes polluted, their models degrade, and they can't distinguish real users from noise.
Every major data exfiltration API is intercepted and fed randomized garbage:
| Interception Point | What Gets Poisoned |
|---|---|
fetch() |
URL parameters + request body rewritten with fake data |
XMLHttpRequest |
URL parameters + request body rewritten |
navigator.sendBeacon() |
Payload replaced with poisoned version |
HTMLImageElement.src |
Tracking pixel URLs get fake parameters |
HTMLFormElement.submit() |
Hidden form fields filled with random data |
navigator.geolocation |
Returns randomized coordinates worldwide |
Every tracker request gets injected with fake: email addresses, full names, phone numbers, IP addresses, user agents, device IDs, session IDs, fingerprint hashes, Google Analytics client IDs, screen resolutions, languages, timezones, referrers, geographic coordinates, browser/OS version, GPU vendor/renderer, heap size, connection type, page URL/title, font list hash, canvas/WebGL hashes, and more.
PrivaBrowse uses a smart header poisoning strategy: instead of injecting hundreds of new headers (which degraded performance and broke websites), it only randomizes headers the tracker request already carries. This approach is stealthier, faster, and avoids detection.
For every request matching a tracker domain or URL pattern:
- User-Agent randomization: Rotated from a pool of 5 common browser/OS combinations
- Accept-Language spoofing: Randomized from 6 common locale combinations
- Referer/Origin spoofing: Replaced with common referrers (Google, DuckDuckGo, Reddit) or stripped
- IP header spoofing: X-Forwarded-For, X-Real-IP, CF-Connecting-IP, True-Client-IP, and 6 more — only randomized if the request already carries them
- Correlation/trace ID poisoning: X-Request-ID, X-Correlation-ID, X-Trace-ID, X-Amzn-Trace-Id, X-B3-TraceId, Traceparent, Sentry-Trace, Datadog — fake values replace existing ones
- Device/session ID poisoning: X-Device-ID, X-Session-ID, X-Visitor-ID, X-Device-Fingerprint, X-GA-Client-ID, X-Analytics-ID, X-Tracking-ID, Newrelic, Baggage — poisoned if present
- Sec-Fetch stripping: All Sec-Fetch-Dest/Mode/Site/User headers deleted (leaks cross-site behavior)
- Token stripping: Cookie, Authorization, X-CSRF-Token, X-XSRF-TOKEN, X-Requested-With, Proxy-Authorization all deleted from tracker requests
- Cache-busting: Cache-Control set to
no-cache, no-store; If-None-Match randomized to prevent ETag fingerprinting
Why smart instead of bulk? The previous approach of injecting 200+ headers on every tracker request caused measurable performance degradation and broke websites like YouTube. The new approach poisons only what exists, making PrivaBrowse undetectable to tracker servers that monitor for unusual header counts.
No company is excluded from data poisoning. Not Google. Not Facebook. Not Microsoft. Not Amazon. No one.
The only exception is YouTube's video playback — we don't break video streaming. But YouTube's tracker endpoints still get fully poisoned data, just like every other company.
WebSocket connections to tracker hosts have their send() method intercepted. JSON payloads are parsed and every tracking field is replaced with fake data. The connection itself is preserved (to avoid detection) but the data is garbage.
Server-Sent Events (EventSource) connections to tracker hosts are replaced with a fake stub that does nothing. The page thinks it connected; the tracker receives nothing.
Links through bounce trackers (t.co, l.facebook.com, google.com/url, click.redditmail.com, safelinks.protection.outlook.com, lnks.gd, youtube.com/redirect, href.li, steamcommunity.com/linkfilter) are intercepted and resolved directly to the real destination URL.
Every 60 seconds, PrivaBrowse purges 60+ known tracker localStorage keys (_ga, _fbp, amplitude_id, intercom, drift, hubspot, etc.) and deletes tracking IndexedDB databases (Firebase, Sentry, Amplitude).
HTML <a ping=...> attributes are stripped from all links via MutationObserver. document.referrer is overridden to return origin-only. window.name is cleared on every navigation to prevent cross-site data leaking. The Reporting API (ReportingObserver) is neutralized.
Beyond stripping tracking parameters on navigation, PrivaBrowse also cleans links in real-time within the page:
- Hooks
clickandauxclickevents on every<a>tag - Uses a
MutationObserverto clean dynamically added links as they appear - Strips 110+ tracking parameters (
utm_*,fbclid,gclid,msclkid, TikTok, Twitter, Reddit, LinkedIn, Amazon, Pinterest, and more) fromhrefattributes before the browser navigates - Works on both left-click and middle-click (new tab) navigation
Requests to CDN hosts (cdnjs.cloudflare.com, cdn.jsdelivr.net, unpkg.com, etc.) receive special handling:
- Cookie stripping: Cookies are never sent to CDN hosts
- Referrer stripping: Referer header is removed to prevent CDNs from knowing which site loaded their resources
- Tracking script blocking: Known tracking scripts disguised as CDN resources are detected and blocked via pattern matching
This is defined in src/cdn-replacements.js and applied in main.js.
Google's Privacy Sandbox APIs (marketed as "privacy-preserving" but still enabling interest-based advertising) are comprehensively disabled:
| API | How Blocked |
|---|---|
| FLEDGE / Protected Audience | disable-features Chromium flag + Permissions-Policy |
| Topics API / Browsing Topics | disable-features Chromium flag + Permissions-Policy |
| Attribution Reporting | disable-features Chromium flag + Permissions-Policy |
| Fenced Frames | disable-features Chromium flag + Permissions-Policy |
| Shared Storage | disable-features Chromium flag + Permissions-Policy |
| Private Aggregation | Permissions-Policy header |
| Interest Group Storage | disable-features Chromium flag |
| Conversion Measurement | disable-features Chromium flag |
These are blocked via both app.commandLine.appendSwitch('disable-features', ...) in the main process and by injecting a Permissions-Policy response header on every page load.
To prevent cross-site tracking via shared network state, PrivaBrowse enables Chromium's isolation features:
| State | Chromium Flag |
|---|---|
| HTTP cache | SplitCacheByNetworkIsolationKey |
| TCP/QUIC connections | PartitionConnectionsByNetworkIsolationKey |
| SSL sessions | PartitionSSLSessionsByNetworkIsolationKey |
| DNS cache | PartitionDomainReliabilityByNetworkIsolationKey |
| Network Error Logging | PartitionNelAndReporting |
| Third-party storage | ThirdPartyStoragePartitioning |
| Expect-CT state | PartitionExpectCTStateByNetworkIsolationKey |
This means Site A cannot detect whether you've visited Site B by probing shared caches, connection pools, or DNS state.
HSTS (HTTP Strict Transport Security) can be abused to store a unique identifier across browser sessions by selectively setting HSTS on a matrix of subdomains. PrivaBrowse defends against this by:
- Clearing the HSTS resolver cache on startup
- Clearing it again every 30 minutes while running
- Using
session.defaultSession.clearHostResolverCache()
Similar to HSTS supercookies, favicon caching can be exploited to track users across sessions. PrivaBrowse clears the favicon cache periodically alongside HSTS cache clearing using session.defaultSession.clearCache().
"Bounce tracking" is a technique where trackers redirect you through their domain for just long enough to set a cookie, then bounce you to your actual destination. PrivaBrowse detects this:
- Tracks navigation timestamps per webContents
- If a domain redirects within 1.5 seconds without user interaction, it's flagged as a bounce tracker
- All cookies and storage for flagged domains are immediately purged
- The system is integrated into the
onBeforeRequesthandler for main frame navigations
Even without bounce tracking, cookies can accumulate from domains you visited once and never returned to. PrivaBrowse tracks domain visit timestamps and periodically:
- Scans all cookies in the session
- Compares each cookie's domain against the last-visited timestamp
- Deletes cookies from domains not visited within a configurable threshold (default: 7 days)
- Runs on startup and can be triggered manually
PrivaBrowse can automatically upgrade all http:// navigations to https://, preventing passive eavesdropping on unencrypted connections. This is configurable per the user's preference and applies to top-level navigations and subresource requests alike.
The web is drowning in cookie banners. PrivaBrowse automatically detects and dismisses them:
- Cookie consent popups — Detected via common selectors and class names, auto-dismissed with "reject all" preference
- Newsletter signup overlays — Email capture modals are identified and removed before they interrupt your reading
- "Are you still there?" dialogs — Idle-detection prompts are auto-dismissed
- Overlay scroll locks — When a popup locks page scrolling, PrivaBrowse restores it
This runs entirely client-side via injected scripts. No network requests, no external services.
Beyond network-level blocking, PrivaBrowse includes a Universal Ad Nuker that removes ad containers from the rendered page:
- Hides elements matching known ad selectors (
[class*="ad-"],[id*="google_ads"],ins.adsbygoogle, etc.) - Removes empty placeholder divs left behind by blocked ad scripts
- Runs on
DOMContentLoadedand observes DOM mutations for dynamically injected ads - Purely cosmetic — no network requests are made, these elements are simply hidden from view
YouTube receives special handling because its ad delivery is tightly integrated with video playback:
- Pre-roll and mid-roll ads — Detected and skipped at the player level
- Ad overlay banners — Removed from the video player
- Tracker endpoints — Still fully poisoned (YouTube does not get a free pass on tracking)
- Video playback — Preserved and unbroken
PrivaBrowse only ships privacy-respecting search engines:
| Engine | Privacy Level | Notes |
|---|---|---|
| PrivaBrowse Search | Highest | Our own index, zero third-party tracking |
| DuckDuckGo (default) | High | No tracking, no profile building |
| Brave Search | High | Independent index, no Big Tech dependency |
| Startpage | High | Anonymous proxy to search results |
| Qwant | High | EU-based privacy-first engine |
| SearXNG | High | Open-source metasearch aggregator |
| Mojeek | High | Own crawler, no tracking |
| MetaGer | High | German non-profit metasearch |
| Swisscows | High | Swiss privacy, family-safe |
| Yep | High | Independent index by Ahrefs |
| Ecosia | Medium | Plants trees, minimal data collection |
Removed engines: Google, Bing, and Yahoo were removed because their search pages load tracking scripts that conflict with our blocking and because we don't believe a privacy browser should normalize surveillance-based search.
PrivaBrowse includes a built-in encrypted password vault so you don't need to trust a third-party extension with your credentials:
- Encryption — All entries are encrypted locally with a master password
- Zero-knowledge — Your master password never leaves your machine; we cannot recover it
- No cloud sync — Vault data stays on your device, period
- No third-party dependencies — The vault is implemented entirely within PrivaBrowse, not outsourced to an extension or external service
PrivaBrowse ships with PrivaForge — a completely custom developer tools panel built from scratch. This is not Chrome DevTools. It's a cyberpunk-themed toolkit designed to be fun and practical.
Chrome DevTools are powerful but generic. PrivaForge is purpose-built for PrivaBrowse users who want to inspect, debug, and audit websites with a tool that matches the browser's identity. It also includes a Privacy Scan tool that no standard dev tools provide.
| Panel | What It Does |
|---|---|
| Terminal | Hacker-style JavaScript console with a ▶ prompt. Execute any JS in the page context. Built-in commands include dom.count, dom.links, perf.timing, perf.memory, privacy.scan, storage.local, fun.rainbow, fun.flip, fun.party. Full arrow-key command history and tab-autocomplete |
| X-Ray | DOM inspector that scans the page tree structure. Collapsible node tree with color-coded tags, IDs, and classes. Pick Element mode with neon green highlight overlay — click any element to see box model, computed styles, and attributes |
| Pulse | Real-time network monitor via PerformanceObserver. Shows resource name, type, size, timing, and a visual waterfall bar. Filter by type (JS, CSS, Img, Fetch, Other). Record/pause toggle |
| Vault | Storage explorer for localStorage, sessionStorage, and cookies. Search/filter keys, click to inspect values, delete individual entries or clear all |
| Paint | Live CSS editor with line numbers and instant injection. Quick Inject snippets: Box Outlines, Grayscale Images, Comic Sans, Dark Mode, Rainbow Mode, Hover Zoom. Pull computed styles from hovered elements |
| Scan | Full site audit scoring Performance, Accessibility, Privacy, and SEO (0–100 each). Checks load time, DOM node count, lazy loading, alt text, HTTPS, trackers, meta tags, structured data, and more |
PrivaForge runs entirely locally. It does not send any data anywhere. The Terminal executes JavaScript within the page's webview context using executeJavaScript(). No external services, no telemetry, no analytics.
- F12 or Ctrl+Shift+I — Toggle PrivaForge
- Right-click context menu — "PrivaForge" option
- Command palette (
Ctrl+Shift+P) — "PrivaForge" command
PrivaBrowse includes a Focus Mode that lets you temporarily block distracting websites for a set period of time:
- Define your own blocklist of distracting domains
- Set a timer — the sites are inaccessible until it expires
- No workarounds, no "just 5 more minutes" — the block is enforced at the network level
This is a productivity feature, not a privacy feature, but it reflects our belief that a browser should work for you.
When bandwidth matters, Data Saver Mode reduces page weight by:
- Blocking third-party fonts (also a privacy win — font loading reveals your OS and language)
- Blocking animated images
- Optionally blocking all images entirely
- Reducing unnecessary subresource requests
To be absolutely clear:
- No telemetry — We never phone home. Zero analytics endpoints exist in the codebase.
- No crash reporting — Errors stay on your machine. No Sentry, no Bugsnag, no New Relic.
- No usage statistics — We don't know how many users we have, let alone what they browse.
- No update tracking — Update checks use standard Electron mechanisms, no identifying data sent.
- No A/B testing — Every user gets the same features.
- No data sales — We have no data to sell.
- No "anonymous" metrics — There is no such thing as truly anonymous analytics. We collect nothing.
- No partnerships with ad companies — We block them all.
- No acceptable ads program — All ads are treated equally: blocked.
- No remote configuration — There is no server-side feature flag system. What ships in the binary is what runs.
- No third-party account requirement — You never need to sign in to anything to use PrivaBrowse.
| Feature | PrivaBrowse | Brave | Firefox (strict) | Chrome |
|---|---|---|---|---|
| Built-in ad blocking | Yes | Yes | Partial | No |
| Tracker domain blocking (2,100+) | Yes | Yes | Partial | No |
| Fingerprint spoofing (60+ vectors) | Yes | Partial | Partial | No |
| Data poisoning engine | Yes | No | No | No |
| Smart header poisoning | Yes | No | No | No |
| ETag supercookie stripping | Yes | No | No | No |
| Client Hints removal | Yes | Partial | No | No |
| URL parameter cleaning (navigation + link clicks) | Yes | Partial | No | No |
| Privacy Sandbox API blocking | Yes | Partial | No | No |
| Network state partitioning | Yes | No | Partial | Partial |
| HSTS supercookie protection | Yes | No | Partial | No |
| Favicon supercookie protection | Yes | No | No | No |
| Bounce tracking detection | Yes | Partial | Partial | No |
| Stale cookie auto-cleanup | Yes | No | No | No |
| Local CDN privacy | Yes | No | No | No |
| Cookie consent auto-dismiss | Yes | No | No | No |
| Surveillance search engines removed | Yes | No | No | No |
| Zero telemetry | Yes | No | No | No |
| Built-in password vault | Yes | No | Partial | Partial |
| Open source | Yes | Yes | Yes | No |
| WebSocket/EventSource interception | Yes | No | No | No |
| Redirect tracker bypass | Yes | No | No | No |
| Storage cleanup (60+ keys) | Yes | No | No | No |
Don't take our word for it. Verify everything yourself:
- Visit Cover Your Tracks by the EFF
- Visit BrowserLeaks for detailed fingerprint analysis
- Visit AmIUnique to check your fingerprint uniqueness
- Visit CanvasBlocker Test for canvas protection
- Visit WebRTC Leak Test to confirm no IP leaks
- Visit DNS Leak Test to check for DNS leaks
Every protection is implemented in plain JavaScript, fully readable, no obfuscation:
| Protection Layer | File | What to Search For |
|---|---|---|
| Request blocking | main.js |
FAST_BLOCK_HOSTS, AD_URL_PATTERNS, onBeforeRequest |
| Domain lists | src/blocklist.js |
ads, trackers, aggressive arrays |
| CDN tracking lists | src/cdn-replacements.js |
CDN_TRACKING_HOSTS, isCdnTrackingScript |
| Fingerprint spoofing | src/renderer/renderer.js |
FINGERPRINT_SPOOF_SCRIPT |
| Data poisoning | src/renderer/renderer.js |
DATA_POISONER_SCRIPT |
| Smart header poisoning | main.js |
onBeforeSendHeaders, TRACKER_RE, isTracker |
| Link click param stripping | src/renderer/renderer.js |
LINK_CLICK_PARAM_STRIP_SCRIPT |
| Privacy Sandbox blocking | main.js |
disable-features, Permissions-Policy in onHeadersReceived |
| Network partitioning | main.js |
enable-features Chromium flags |
| HSTS/favicon supercookie protection | main.js |
startSupercookieProtection, clearSupercookies |
| Bounce tracking detection | main.js |
recordNavigation, checkBounceTracker |
| Stale cookie cleanup | main.js |
trackDomainVisit, runStaleCookieCleanup |
| Cookie banner removal | src/renderer/renderer.js |
COOKIE_BANNER_SCRIPT |
| Newsletter popup killer | src/renderer/renderer.js |
NEWSLETTER_KILLER_SCRIPT |
| Cosmetic ad filtering | src/renderer/renderer.js |
injectUniversalAdNuker |
| YouTube ad blocking | src/renderer/renderer.js |
injectYouTubeAdBlocker |
| Password vault | src/vault.js |
Entire file |
| PrivaForge dev tools | src/renderer/renderer.js |
privaforge, togglePrivaForge, pfTerminal, pfXRay, pfPulse |
| Clipboard shortcuts fix | main.js |
Menu.buildFromTemplate, Edit role items |
| HTTPS upgrade | main.js |
forceHTTPS |
The package.json pins all dependencies. Clone the repo, run npm install && npm run build, and compare the output to the distributed binary. If they differ, something is wrong and you should not trust it.
User's Request
│
├─► main.js: onBeforeRequest
│ ├─ FAST_BLOCK_HOSTS (Set, O(1) lookup)
│ ├─ blocklist.js domains (ads / trackers / aggressive)
│ ├─ AD_URL_PATTERNS (100+ regex patterns)
│ ├─ Social tracker hosts (112 domains)
│ ├─ Crypto miner hosts (84 domains)
│ ├─ Tracking pixel detection
│ ├─ Third-party iframe blocking (with functional whitelist)
│ ├─ YouTube ad endpoint blocking
│ └─ HTTPS upgrade (if enabled)
│
├─► main.js: onBeforeSendHeaders
│ ├─ ETag supercookie removal
│ ├─ Client Hints stripping / spoofing
│ ├─ URL parameter cleaning (utm_*, fbclid, gclid, etc.)
│ ├─ Referrer policy enforcement
│ ├─ User-Agent randomization
│ ├─ Smart header poisoning (randomizes existing headers only)
│ ├─ CDN cookie/referrer stripping
│ ├─ Bounce tracking detection
│ └─ Redirect tracker bypass (9 bounce domains)
│
├─► main.js: onHeadersReceived
│ ├─ ETag removal
│ ├─ Accept-CH / Critical-CH removal
│ ├─ Privacy Sandbox Permissions-Policy injection
│ └─ Tracking cookie stripping
│
├─► main.js: Background Tasks
│ ├─ HSTS supercookie cache clearing (startup + every 30 min)
│ ├─ Favicon cache clearing (periodic)
│ ├─ Stale cookie cleanup (domains not visited in 7+ days)
│ └─ Network state partitioning (via Chromium enable-features flags)
│
└─► renderer.js: Injected Scripts
├─ FINGERPRINT_SPOOF_SCRIPT (60+ vectors)
├─ DATA_POISONER_SCRIPT (fetch, XHR, beacon, form, pixel, geo)
├─ STORAGE_CLEANUP_SCRIPT (60+ tracker keys purged every 60s)
├─ MISC_PRIVACY_SCRIPT (anchor pings, referrer, sendBeacon, ReportingObserver)
├─ Cookie consent auto-dismissal
├─ Newsletter popup killer
├─ Idle dialog dismissal
├─ Cosmetic ad filtering (Universal Ad Nuker)
├─ YouTube ad blocker
├─ Link URL cleaner (strips tracking params from hrefs)
├─ Link click param stripping (MutationObserver + click/auxclick hooks)
└─ PrivaForge dev tools (Terminal, X-Ray, Pulse, Vault, Paint, Scan)
PrivaBrowse is built on Electron. We acknowledge this dependency and its implications:
- Electron 40.6.1 — Provides the Chromium rendering engine and Node.js runtime. We apply restrictive
webPreferences(context isolation, disabled Node integration, sandboxing) to minimize Electron's attack surface. - No third-party analytics SDKs — Zero. None. Not one.
- No third-party ad SDKs — We would sooner shut down.
- No CDN-loaded scripts — Everything ships in the binary. No external JavaScript is loaded at runtime by PrivaBrowse itself.
- Chromium telemetry — Disabled at the Electron configuration level. No Google services are contacted.
All dependencies are listed in package.json and are auditable via npm audit.
Does PrivaBrowse break websites?
Occasionally, yes. Aggressive blocking and fingerprint spoofing can interfere with sites that depend heavily on trackers for functionality (ironic, but real). PrivaBrowse provides per-site toggles so you can relax protections on specific domains without compromising your defaults.
Why Electron? Isn't Chrome/Chromium part of the problem?
Chromium is the rendering engine — it's how web pages display. The tracking infrastructure built on top of it (Google sync, Safe Browsing telemetry, usage metrics) is what we remove. We chose Electron because it gives us full control over the network stack via webRequest APIs, which is how all our blocking and poisoning works.
Is my data stored anywhere?
Your browsing data, history, bookmarks, and vault entries are stored locally on your machine in Electron's standard user data directory. Nothing is sent anywhere. Nothing is synced. If you delete the app, the data goes with it.
Can I export/import my data?
Settings and blocklists are stored in standard JSON format in your user data directory. They're yours to back up, move, or delete at any time.
Why did you remove Google, Bing, and Yahoo?
Their search result pages load dozens of tracking scripts that conflict with our blocking engine and degrade the experience. More fundamentally, a privacy browser should not route your most intimate data — your search queries — through the world's largest advertising companies.
Does data poisoning slow down my browsing?
No measurable impact. The poisoning logic intercepts requests that are already being made to tracker endpoints and rewrites their payloads. It doesn't add new network requests — it corrupts existing ones. Earlier versions injected 200+ headers on every tracker request, which caused performance degradation; this was refactored to a "smart" approach that only randomizes headers the request already carries.
How is this different from uBlock Origin + Firefox?
uBlock Origin is excellent at blocking. PrivaBrowse blocks and poisons. When a tracker slips past the blocklist (and some will), it collects garbage data instead of your real information. The data poisoning engine, smart header poisoning, 60+ fingerprint spoofing vectors, network state partitioning, Privacy Sandbox blocking, bounce tracking detection, and supercookie protection are features no extension can replicate at the same depth because extensions don't have access to the network stack the way Electron's main process does.
Privacy & Anti-Tracking:
- Expanded blocklist to 2,100+ domains
- Added Nuclear Data Poisoning Engine (55+ fields on tracker API requests)
- Refactored header poisoning from 200+ bulk-injected headers to smart approach (randomizes existing headers only) — fixes performance issues and website breakage
- Added Privacy Sandbox API blocking (FLEDGE, Topics, Attribution Reporting, Shared Storage, Fenced Frames) via Chromium flags + Permissions-Policy
- Added network state partitioning (HTTP cache, connections, SSL sessions, DNS isolated per site)
- Added HSTS supercookie protection (cache cleared on startup + every 30 minutes)
- Added favicon supercookie protection (periodic cache clearing)
- Added bounce tracking detection (< 1.5s redirects detected, cookies/storage purged)
- Added stale cookie cleanup (domains not visited in 7+ days have cookies deleted)
- Added local CDN privacy (Decentraleyes-style cookie/referrer stripping + tracking script blocking)
- Added link click parameter stripping (MutationObserver + click hooks clean 110+ params from
<a>hrefs in real-time) - Expanded URL parameter stripping to 110+ params (navigation + in-page links)
- Removed all company exclusions from data poisoning
- Expanded fingerprint protection to 60+ vectors
- Added WebSocket payload poisoning for tracker hosts
- Added EventSource (SSE) blocking for tracker hosts
- Added redirect tracker bypass (t.co, l.facebook.com, google.com/url, etc.)
- Added periodic storage cleanup (60+ tracker localStorage keys every 60s)
- Added anchor ping stripping and document.referrer sanitization
Search & Browsing:
- Removed Google, Bing, Yahoo search engines
- Added SearXNG, Mojeek, MetaGer, Swisscows, Yep
UI & Features:
- Added PrivaForge — custom cyberpunk developer tools with 6 panels (Terminal, X-Ray, Pulse, Vault, Paint, Scan)
- Added cookie consent auto-dismissal
- Added newsletter popup killer
- Added cosmetic ad filtering (Universal Ad Nuker)
- Added YouTube-specific ad blocking
- Added link URL cleaning (strips tracking params from hrefs)
- Added Tracker Graveyard (per-domain blocked request stats)
- Added Data Saver Mode
- Added Focus Mode
- Added HTTPS enforcement
- Added encrypted password vault
Security:
- Added process sandboxing and 30+ Chromium security flags
- Added strict Content Security Policy
- Added IPC input validation and rate limiting
- Added navigation guards and webview hardening
Bug Fixes:
- Fixed Ctrl+C/V/X/A not working (replaced null application menu with proper hidden Edit menu)
- Fixed yellow annotation bar appearing on text selection (disabled auto-injection of PAGE_ANNOTATE_SCRIPT)
- Fixed YouTube breakage caused by overly broad tracker detection regex
- Added safe-host bypass for data poisoner to prevent first-party site interference
Performance:
- Optimized blocklist lookups: O(1) Set for hostnames, single compiled RegExp for URL patterns
- Consolidated URL parsing in network handlers to reduce redundant
new URL()calls - Tightened tracker detection regex to use word boundaries and exact domain matching
Found a tracker we missed? A site that breaks? A privacy concern in our code?
- GitHub Issues: Report bugs, broken sites, or missed trackers
- Pull Requests: Every contribution is reviewed for privacy implications before merge
- Security Disclosures: If you find a security vulnerability, please report it responsibly via GitHub's private vulnerability reporting
This document is updated whenever PrivaBrowse's protection mechanisms change.
Last updated: March 6, 2026 · Version 1.1.0