Once it’s locked, there’s no unlocking it early.

Set the sites, keywords, and paths you want gone, then start a lock. A background daemon holds it until your timer runs out. Closing the browser doesn’t end it. Killing the extension doesn’t end it. Nothing does, until the clock says so.

Free, open source. Verified on Linux Mint + XFCE.

bash — mindgate install
$

Every blocker I tried had the same crack in it.

I’d install one, feel safe for a week, then find the exit: quit the app, pull the extension, reboot, wait out a grace period. Every blocker I tried assumed my willpower could be trusted right when things got hard — which is exactly the moment it can’t be. So I stopped looking for a better toggle and built something that doesn’t give me one.

Outdated open source
-> free, but effectively abandoned
-> no updates, easy to work around
-> some don’t even survive a browser restart
Paid apps
-> actively maintained
-> paywalled, subscription to stay protected
-> still just a toggle you can flip off in three clicks
Maintained, but bypassable
-> gets updates, has a decent UI
-> the block lives inside the browser process
-> quit the app, and the block quits with it

The daemon survives you trying to get out of it.

It runs outside the browser. Closing Chrome doesn’t touch it. Removing the extension doesn’t touch it. If the browser or extension disappears while a lock is supposed to be active, the daemon closes the browser itself rather than let the protection quietly lapse.

Actively developed in the open — commits, issues, and roadmap on GitHub.

Watch it survive a browser kill.

No cuts. The daemon reopens the blocked tab the moment the browser comes back — the lock never lapses.

mindgate-demo.mp4

How it works

Four steps, and only the first two are yours.

01

Define your block list

Domains, keywords, paths, subreddits — whatever you want gone, added however specific you need.

02

Set a lock duration

Pick a length, or lock with no end time at all. This is the last decision you get to make.

03

The daemon enforces it

Runs outside the browser. Refuses to shut down while a lock is active, and closes browser processes rather than let it lapse.

04

It clears on its own

No unlock button, because there isn’t one. When the timer ends, the blocked tab returns to where it was headed.

Install steps

MindGate ships as an unpacked extension you load yourself. That isn’t a corner cut — Chrome Web Store submission is running in parallel, but v1 doesn’t wait on a review queue. It’s open source top to bottom, so you can read exactly what you’re about to run before you run it.

1

Run the installer

Installs git if it’s missing, downloads MindGate, and runs the setup. You’ll be asked for your password.

$ curl -fsSL https://raw.githubusercontent.com/FaisBuilds/MindGate/main/installer/Bootstrap.sh | bash
2

Enable developer mode

Open chrome://extensions and flip on Developer mode, top right of the page.

3

Load the extension

Click Load unpacked and select the extension folder the installer created. MindGate is now watching.

Features

The extension is the only thing that knows what’s blocked. The daemon is the only thing that can’t be talked out of it.

Domain blocking

Block a domain and every subdomain under it with a single rule.

reddit.com (+ subdomains)

Keyword + DOM scanning

Matched against the URL and the visible page text — on first load and on in-page navigation.

scan: URL + DOM, on load + SPA nav

Path blocking

Block a specific path prefix under a domain, without touching the rest of the site.

youtube.com/shorts/*

Subreddit blocking

A legacy rule type, matched directly against Reddit URLs.

r/all, r/popular

Daemon × extension

Two processes, one job split in half. The extension is a sensor — the only thing that knows what’s blocked, matching URLs and page text as you browse. The daemon is the enforcer — it holds the lock and doesn’t trust the browser to still be there.

extension: detects → daemon: enforces

Linux lock mechanics

While locked, the daemon refuses its own shutdown command. It runs as a systemd service watching for the browser process — if Chrome or the extension disappears mid-lock, the daemon closes running browser processes rather than let protection quietly lapse.

systemctl stop mindgate → refused (lock active)

Technical details

What each piece actually does, and where it’s actually been tested.

Extension — sensor

  • -> Runs inside the browser
  • -> Matches domains, keywords, paths, subreddits
  • -> Scans page text on load and on in-page (SPA) navigation
  • -> The only component that knows what’s blocked

Daemon — enforcer

  • -> Runs outside the browser, as a background process
  • -> Holds the lock and its timer
  • -> Refuses its own shutdown command while a lock is active
  • -> Doesn’t trust the browser to still be there

Platform support

Linux (x86_64)

Linux Mint (Debian-based) + XFCE, hands-on tested.

Verified
Other systemd distros (Arch, etc.)

Daemon and watchdog only depend on systemctl, not a specific distro — untested.

Expected
Google Chrome

Tested directly.

Verified
Brave, Edge, Vivaldi, Opera

Share the same extension APIs, but each needs its own native-messaging host registration and its own copy of the extension loaded.

Expected
Firefox and other non-Chromium browsers

WebExtension and MV3 support differs enough to be separate work, not a port.

Not supported
lock guarantees
✓ Once locked, the block list can’t be edited or cleared before the lock ends.
✓ While locked, the daemon refuses its own stop/shutdown command.
✓ Closing the browser, or disabling/removing the extension, does not end a lock.
✓ If the browser or extension goes away mid-lock, the daemon closes running browser processes rather than let protection lapse.
✓ When the timer ends, the block clears automatically — no action required.

Known limitations

By design, not bugs — conscious scope boundaries, not gaps waiting to be silently fixed.

  • ! Incognito windows aren’t protected unless you manually enable “Allow in Incognito” — Chrome won’t let an extension grant itself that access.
  • ! Other browser profiles aren’t protected unless the extension is separately loaded into each one you want covered.
  • ! A different OS user account, or booting different media entirely, isn’t defended against.
  • ! Uninstalling and reinstalling everything while unlocked is always possible, by design.

MVP1 protects against accidental or impulsive bypass — not a determined effort to route around the whole OS.

Stay in the loop

Get notified when new features and platforms ship.

No accounts in the product itself — this is just an update list. Unsubscribe anytime.

Frequently asked questions

Full boundary list — what’s defended against and what isn’t — lives in SCOPE.md.