A content filter that installs into a browser that has none — works in private windows, cannot be switched off without your PIN, and provisions a brand-new VM in one command.
Source code and full documentation on GitHub
Installing by hand is fine once. It is not fine for the fifth VM this month. GuardLock reads its whole configuration — including the PIN — from browser policy, so a freshly built machine comes up already filtered and already locked: no setup wizard, no window where the browser is open and unfiltered, and nothing to pay per machine.
One command on a fresh Linux box:
curl -fsSL https://www.linearit.co/filter/guardlock/install/install.sh \
| sudo bash -s -- --pin 4821 --categories adult,gambling
Or on Windows, from an elevated PowerShell:
& ([scriptblock]::Create((irm https://www.linearit.co/filter/guardlock/install/install.ps1))) -Pin 4821
Both hash the PIN locally, write the policy for Edge, Chrome and Firefox, and drop a copy of the
extension in a fixed place. Re-running is safe, --uninstall reverses it, and
--dns will also point the machine at a filtering resolver so it is covered before any
browser even starts. Add --categories, --allow, --block,
--lists or --no-private to taste.
The policy carries a PBKDF2 hash of your PIN, never the digits. Settings the policy pins are greyed out and refuse to change even for someone holding the PIN — they are changed in the policy, not in the browser. Because there is no setup step there is also no recovery code, so keep the PIN somewhere safe.
Policy configures GuardLock; something still has to install it. Firefox is the easy one — it
force-installs a signed .xpi straight from a URL and grants private-window access
without anyone ticking a box. For Edge and Chrome, either publish once to the Edge Add-ons store
(free) and pass --ext-id, or host it yourself with
npm run pack-crx. Failing both, the installer still leaves a copy on disk and
pre-authorises the id Chromium will give it, so one "Load unpacked" is all that remains — and even
then the browser comes up locked and configured.
edge://extensions and turn on Developer mode.Chrome, Brave and Opera take the same steps at chrome://extensions.
Firefox only installs signed add-ons permanently. To try it now, open
about:debugging#/runtime/this-firefox → Load Temporary Add-on →
pick manifest.json from the unzipped folder. It goes away when Firefox closes.
For a permanent install, sign it once with a free Mozilla developer account:
npx web-ext sign --channel=unlisted inside the unzipped folder..xpi it hands back to install it.about:addons → GuardLock → Details, set Run in Private Windows to Allow.Every browser keeps extensions out of private windows until a person allows it
by hand — no extension can grant itself that. GuardLock checks whether it has the access, marks the
toolbar icon amber when it does not, and puts the fix at the top of its settings.
On a computer you administer, the surer route is to switch private browsing off entirely; the
enterprise folder in the download has ready-made Firefox and Edge policy files that do
that and also make the extension impossible to remove.