You fixed the phone, it held for three weeks, and then you noticed you were doing the exact same reading at eleven at night on a laptop with nothing at all in the way.
So you went looking, and every list gave the same answer: install a browser extension. They get ranked and re-ranked on blocklists, schedules, password options, pretty dashboards. Almost none of those lists mention the number that decides whether the thing works, which is how many clicks it takes to make it stop existing.
That number is two. You can open the browser's extensions page and switch a blocker off, or remove it outright, in two clicks, with no password, in both Chrome and Firefox. The exact wording of the toggle moves around between versions. The count does not.
The block and the off switch live in the same drawer
Be precise about where this fails. An extension is not weak because it blocks badly; most of them block fine. It is weak because the thing that enforces the rule and the thing that cancels the rule are the same software, in the same window, under the same account, available at the same instant.
Every other lock in your life separates those two things by something. A gym membership takes a phone call. A savings account takes a transfer that clears tomorrow. The extension takes the width of your hand moving across the screen. And the moment you need the block is the moment you are most motivated to remove it, which is not a flaw you can patch with a better blocklist. It is the shape of the thing.
Two clicks. I have watched you take longer than that choosing a sandwich.
You do not even have to turn it off to get around it
Removal is the honest exit. The dishonest ones are quicker.
- A private window. Most extensions are off by default in incognito and have to be explicitly allowed there. If you never granted it, the rule simply does not apply.
- A second profile. Browsers let you make a new profile in seconds, and a new profile starts with no extensions. Nothing has been disabled. The block just is not there.
- A second browser. Your Mac ships with one you did not install the extension into.
- The phone in your pocket. Which is where you started, and which the extension has never once had an opinion about.
None of these count as breaking a rule, and that matters more than it sounds. A person who has to consciously disable their blocker feels the decision and sometimes stops. A person who opens a different window feels nothing, because there is nothing to feel. The blocker was not defeated. It was never in the room.
Count the clicks to off before you count the features
Every blocker has a shortest path back to the thing it is blocking. Find that path first. If it is shorter than the urge, the feature list does not matter.
The lists rank installability, which is close to the opposite of enforcement
The weakest category is the most recommended one, and the reason is not that everybody is lying to you. Extensions are the easiest thing here to write about. They install in one click, need no account, cost nothing to try, screenshot well, and a reviewer can test twelve in an afternoon and uninstall all twelve by teatime. Anything with real teeth is slow to review by construction, because the whole point is that it does not come off quickly. So the ranking runs on ease of trial, and ease of trial and strength of enforcement pull in opposite directions. The list is measuring the wrong axis with great care.
A gate with a gate-shaped hole beside it is just a door with opinions.
Rebuilding it, starting from the undo
Design the off switch first and the block almost writes itself. You want the cancel path slower than an urge, and living somewhere your eleven-at-night self is not already standing. Here is what that looks like with things you already own.
On a Mac, the hosts file outranks any extension
There is a plain text file at /etc/hosts. On macOS 26.2 it is 213 bytes, nine lines, owned root:wheel, mode 644. It is read by mDNSResponder, which supplies results for getaddrinfo, which is what turns a name into an address for essentially everything on the machine. Point a domain at 127.0.0.1 there and it is blocked in every browser and every app at once, including the private window, the fresh profile, and the browser you forgot you had.
Edit it with sudo nano /etc/hosts. On macOS /usr/bin/nano is a symlink to pico, so both names get the same editor. Then flush the cache:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
The honest part: this is one sudo command from being undone, and it does not survive anybody who knows it is there, which after this paragraph is you. It is a far better block than an extension and a far worse commitment device. It buys coverage, not resistance. It closes the incognito hole, the second-profile hole and the second-browser hole permanently, in about ninety seconds, for free.
On the phone, a Screen Time limit only bites once it has a passcode
Most people set an App Limit, hit it, tap through it, and conclude Screen Time does not work. What happened is that they never switched on the part that does.
- Set a passcode first.
Settings > Screen Time > Use Screen Time Passcode. Once one exists the same row is labelled Lock Screen Time Settings. Do this before the limit, because the option you actually want does not appear until the passcode does. - Add the limit.
Settings > Screen Time > App Limits > Add Limit. Now Block at End of Limit is there. Without the passcode it is not, and the limit screen offers you Ignore Limit For Today, which is one tap, which is the extension problem again in a different font. - Add the website to the same limit. An App Limit attaches to an app. The browser version of that app is a separate thing, and it is only covered if you put the domain in the Websites field inside the limit itself.
- Close the reinstall loophole. A limit attaches to an installed app, so deleting the app detaches it and reinstalling gives a clean one. Set
Screen Time > Content & Privacy Restrictions > iTunes & App Store Purchases > Deleting Appsto Don't Allow and that route closes.
Even then the limit screen offers One More Minute and Remind Me in 15 Minutes, and widgets, Spotlight results and notification previews keep showing content from a limited app without tripping the limit at all. The passcode is the difference between a suggestion and a rule. The rule still has soft edges.
System Settings > Screen Time exists and works, with one gap worth knowing: it reports Chrome, Arc, Firefox and Edge each as a single app row. Its website-level detail comes from Safari. If you want per-site limits on the Mac and you do not use Safari, the hosts file is the tool, not this.
The part neither of them does
Both of those are still switches, and you own both switches. The passcode helps only if you cannot remember it, which is a strange thing to arrange on purpose. What is missing is a cost that is real, paid before the block opens, and impossible to pay faster by being annoyed.
Who should skip all of this
If your problem is only the desktop, a paid desktop blocker with cross-device sessions will serve you better than anything on your phone, and Cold Turkey is heavier than anything else going if you can live with how blunt it is. If the phone is in your hand before you are awake, a hardware answer, an NFC tile or a physical key, beats software outright, on the single condition that you do not leave the tile upstairs. And if a gentle pause before opening is all you need, the friction apps do that well and cheaply, and you can stop reading lists like this one.
The question is never how strong the block is. It is how long the road back is, and who built it.
What we built instead, and what it costs
Scrappy is a small dog who guards three rules on an iPhone: quiet hours, a daily limit, an open limit. He is not stronger than an extension because he blocks harder. He is stronger because of what the road back looks like.
Getting past him costs a treat, and treats are earned by walking, roughly 2,000 steps for one, and one buys five minutes. They are never sold, and they never will be. Resistance is set per app: negotiable takes a treat, firm makes you sit with it for ten seconds first, and absolute means he will not take the treat at all. The removal lock closes the delete-and-reinstall loophole, and switching it off takes a day, which is deliberately longer than an urge lasts. And there is an emergency pass, one a month, no scolding, because nobody should ever be genuinely stuck behind a cartoon dog.
Two things to be straight about. The guarding runs through Apple's Family Controls, so a sandboxed Apple extension draws the shield and cannot phone home, and there is no account, no sign-up and no server of ours. And the Mac app has not shipped. For the laptop half of your problem, the hosts file above is still the answer today.
I do not need to be unbeatable. I only need to be slower than the urge.
What he'd do
- Open your current blocker's settings and time yourself turning it off. If it took under thirty seconds, you do not have a blocker, you have a bookmark with a warning label.
- Put the three or four domains that actually cost you into
/etc/hostsand flush the cache. Ninety seconds, every browser, no subscription. - Set a Screen Time passcode on the phone before you set another limit, so that Block at End of Limit is even on the menu.
Checked against
- The two-click disable in Chrome and Firefox, and the incognito and second-profile bypasses: mechanism notes in this site's shared competitor reference, not re-tested here.
- Screen Time paths, the passcode requirement for Block at End of Limit, the Websites field, the deleting-apps restriction and the Mac's single-row browser reporting: this site's verified reference file, corroborated across earlier articles rather than walked again.
/etc/hostssize, ownership, mode, themDNSResponderandgetaddrinfopath, thenanosymlink and the flush command: verified on macOS 26.2 and recorded in the same reference.- Competitor positioning, including the desktop and hardware alternatives above: the same reference, August 2026.
Or put a dog on the door.
Free to start, one whole rule, every safety rail. He does not know your passcode and does not want it.
Get Scrappy on the App Store