Most browsers compete on what they add. Null competes on what it removes. Blocking isn't an extension you bolt on — it's the foundation: ads, trackers, cookie walls & phishing stopped on your device before they load. No cloud, no server, no account — your data's journey is device → nowhere. The ∅ shield counts what didn't load, emptied ad slots get stamped "∅ hidden by Null," and unblockable video ads are auto-skipped. Free for Windows.
No reviews yetBe the first to leave a review for Null Browser ∅
Maker
📌
Hey Product Hunt! 👋 I'm Madhuram, maker of Null Browser.
What inspired this: One evening I counted everything standing between me and a recipe: a cookie wall boasting "1,481 partners," a newsletter popup, an autoplay video ad, and a "Wait — don't go!" overlay. Four negotiations for one webpage. I realized we've quietly accepted that using the web means being interrupted, followed, and sold — and I didn't want to accept it anymore.
The problem: Every existing fix is a patch on top of the problem. An adblocker extension sits on a browser whose maker profits from ads. "Privacy browsers" still run clouds, accounts, and servers — you're trusting a promise, not a design. I wanted privacy that's structural: a browser where there's simply no server to send your data to.
How I approached it: I built Null on one principle — removal. Blocking is the foundation, not a feature. Ads, trackers, cookie walls, and phishing are stopped on your device before they load. There is no Null cloud; your data's complete journey is: your device → nowhere.
The process was humbling. YouTube alone took me seven versions to get right — its player fought my blocking with black screens and silent audio until I found the real cause. I documented all of it in plain words on the release notes page, because I think honesty is a feature: some video ads are stitched into the stream server-side and no browser on earth can block those. So Null auto-clicks Skip the instant it appears instead. You see moments, not minutes.
My favorite detail: flip on "Show what Null hid" and every emptied ad slot gets stamped "∅ hidden by Null." The ads sign their own absence.
It's free, Windows today, macOS and Linux on the way.
I'd love to hear: what's the most absurd thing a website has ever put between you and its content? And if you try Null and something still gets through — tell me the site. Removing it is literally the whole product. ∅
Report
💡 Bright idea
The ∅ counter is a really clever touch, makes the invisible feel satisfying. One thing that would make me switch full-time: a quick way to whitelist a specific site temporarily without digging through settings, maybe a popup that activates only when something is blocked and offers a 30-minute allow toggle.
Report
Maker
@eslempaiy Thank you — the ∅ counter is my favorite part too. Blocking you can't see never feels real.
You're closer to this than you think: Null already has a per-site allowlist under the hood (it's how video sites get a clean pass — it genuinely switches off every blocker hook for that site, not just cosmetically). What it's missing is exactly what you described: reaching it from the moment of frustration instead of from Settings.
So here's what I'm taking from your comment: click the ∅ shield on any page → "Allow this site for 30 min / until I close it / always." No digging, and the temporary option means you never forget a site in the allowed list — which is honestly the failure mode of every allowlist ever.
Adding it to the top of the list — the release notes page will show it in plain words when it lands. Genuinely appreciate you telling me the exact thing standing between you and switching. That's the most useful sentence a launch day can produce. ∅
Report
Maker
@eslempaiy Update for you: it's built, and it's yours. ∅
As of v0.4.0 — shipped a few hours after your comment — you click the ∅ shield on any page and get exactly what you described: Allow 30 min · Allow always · Block again. While a timer runs, the panel shows "allowed · X min left," and when it hits zero, blocking switches itself back on. No settings, no digging, and nothing to remember to undo — your point about temporary being the right default was the whole design.
Small bonus from implementation: the timer survives an app restart and still expires on schedule, and re-blocking kicks in on the very next request rather than waiting for a reload.
The release notes entry for this one is literally titled "The one a launch-day comment built." Thank you for telling me the exact thing between you and switching — that sentence turned into a feature in an afternoon. If you take it for a spin and anything feels off about the flow, I want to hear that too. ∅
Report
Love the "data's journey is device to nowhere" angle. One thing that would make this killer for me: a simple import/export for custom allowlists and per-site rules so I can sync settings across my desktop and laptop without an account. Even a plain encrypted file I drop into a folder would do the job and stay true to the no-cloud spirit.
Report
Maker
@ag_rbas9241 Great feedback and i am working on importing bookmarks from other browsers, and can add an import of allow list. Sync settings - is doable but that would require you to login and saving your profile and credentials - which is what i do not want to do. I will keep this in the product roadmap.
Report
Love that the shield counts what didn't load, that's a really satisfying way to feel the impact. One thing that would make it stick for me: a per-site toggle to temporarily allow blocked content, so I can support smaller creators or read a paywalled article without flipping a global setting on and off.
Report
Maker
@ahinertalunbn yes so there is an option called allow list where you can add the sites which you do not want to track. Alternatively there is a button on the browser and once you click it and it gives an option to switch off. Do try it.
Report
Love that everything runs locally, way overdue. One thing that would make me actually switch though, you should add a per-site toggle for the blocklist so I can keep Null as default but quickly whitelist a page when I need to log into something finicky like a bank or work SSO without disabling it globally.
Report
Maker
@elaezher thanks and for banks or work SSO this is in the product roadmap and planned for a premium or a paid tier feature. Right now i would suggest you can still do the banking transactions and click on a button. So everything stays local and nothing goes out of your machine.
Report
tried it for a bit and honestly the counter thing is weirdly satisfying, like seeing how much stuff didn't load in real time. also noticed pages actually feel snappier without all that garbage pulling in.
Report
Maker
@cengizkzla7e6h Thanks for the comment and yes the pages will feel superlight and fast, as there are lot of trackers that load the client side.
Report
finally tried null and the counter showing how many trackers it blocked was genuinely eye-opening, didn't realize how much was being blocked until i saw the numbers pile up within a few minutes of browsing.
Report
Maker
@bargm8e thanks and yes that was the intent to create the Null browser. Now you do not have to worry about the ad trackers and just focus on what you want to do on web.
The ∅ counter is a really clever touch, makes the invisible feel satisfying. One thing that would make me switch full-time: a quick way to whitelist a specific site temporarily without digging through settings, maybe a popup that activates only when something is blocked and offers a 30-minute allow toggle.
@eslempaiy Thank you — the ∅ counter is my favorite part too. Blocking you can't see never feels real.
You're closer to this than you think: Null already has a per-site allowlist under the hood (it's how video sites get a clean pass — it genuinely switches off every blocker hook for that site, not just cosmetically). What it's missing is exactly what you described: reaching it from the moment of frustration instead of from Settings.
So here's what I'm taking from your comment: click the ∅ shield on any page → "Allow this site for 30 min / until I close it / always." No digging, and the temporary option means you never forget a site in the allowed list — which is honestly the failure mode of every allowlist ever.
Adding it to the top of the list — the release notes page will show it in plain words when it lands. Genuinely appreciate you telling me the exact thing standing between you and switching. That's the most useful sentence a launch day can produce. ∅
@eslempaiy Update for you: it's built, and it's yours. ∅
As of v0.4.0 — shipped a few hours after your comment — you click the ∅ shield on any page and get exactly what you described: Allow 30 min · Allow always · Block again. While a timer runs, the panel shows "allowed · X min left," and when it hits zero, blocking switches itself back on. No settings, no digging, and nothing to remember to undo — your point about temporary being the right default was the whole design.
Small bonus from implementation: the timer survives an app restart and still expires on schedule, and re-blocking kicks in on the very next request rather than waiting for a reload.
The release notes entry for this one is literally titled "The one a launch-day comment built." Thank you for telling me the exact thing between you and switching — that sentence turned into a feature in an afternoon. If you take it for a spin and anything feels off about the flow, I want to hear that too. ∅
Love the "data's journey is device to nowhere" angle. One thing that would make this killer for me: a simple import/export for custom allowlists and per-site rules so I can sync settings across my desktop and laptop without an account. Even a plain encrypted file I drop into a folder would do the job and stay true to the no-cloud spirit.
@ag_rbas9241 Great feedback and i am working on importing bookmarks from other browsers, and can add an import of allow list. Sync settings - is doable but that would require you to login and saving your profile and credentials - which is what i do not want to do. I will keep this in the product roadmap.
Love that the shield counts what didn't load, that's a really satisfying way to feel the impact. One thing that would make it stick for me: a per-site toggle to temporarily allow blocked content, so I can support smaller creators or read a paywalled article without flipping a global setting on and off.
@ahinertalunbn yes so there is an option called allow list where you can add the sites which you do not want to track. Alternatively there is a button on the browser and once you click it and it gives an option to switch off. Do try it.
Love that everything runs locally, way overdue. One thing that would make me actually switch though, you should add a per-site toggle for the blocklist so I can keep Null as default but quickly whitelist a page when I need to log into something finicky like a bank or work SSO without disabling it globally.
@elaezher thanks and for banks or work SSO this is in the product roadmap and planned for a premium or a paid tier feature. Right now i would suggest you can still do the banking transactions and click on a button. So everything stays local and nothing goes out of your machine.
tried it for a bit and honestly the counter thing is weirdly satisfying, like seeing how much stuff didn't load in real time. also noticed pages actually feel snappier without all that garbage pulling in.
@cengizkzla7e6h Thanks for the comment and yes the pages will feel superlight and fast, as there are lot of trackers that load the client side.
finally tried null and the counter showing how many trackers it blocked was genuinely eye-opening, didn't realize how much was being blocked until i saw the numbers pile up within a few minutes of browsing.
@bargm8e thanks and yes that was the intent to create the Null browser. Now you do not have to worry about the ad trackers and just focus on what you want to do on web.