# How to block websites on a Mac, and what each way costs

To block a website on a Mac you can edit the hosts file, install a browser extension, or run a native app that watches the frontmost window - only the third one also covers the apps you drift into.

- URL: https://swiftfox.studio/handbook/how-to-block-websites-on-mac
- About: https://swiftfox.studio/apps/nomore
- Published: 2026-06-18
- Updated: 2026-09-06
- Publisher: Swiftfox Studio (https://swiftfox.studio)

## In short

- NoMore compares the frontmost app and the current browser tab against your list locally: no proxy, no DNS service and no VPN profile.
- The unit is a streak with a name, a day count and a strictness, not a line in a block list - so what you would lose is visible at the moment you drift.
- A block can be narrowed twice over: to one path of a site, and to the hours of the day it applies.
- Opening something anyway is always possible, but the cost escalates: a click on gentle, a countdown that grows through the day on firm, a typed confession on brutal.
- Reading a browser's current tab requires an Automation permission on macOS, which is why setup asks for one per browser.

## The three ways to block a site, and what each costs

**Edit `/etc/hosts`.** Free, and it breaks the site everywhere including the
places you needed it to work. It also takes about four seconds to undo, which is
roughly how long your resolve lasts.

**A browser extension.** Works well inside the browser it is installed in, and
does nothing at all about the desktop chat client, the game, or the second
browser you will open instead.

**A native app that watches the frontmost window.** It sees the browser tab and
the application, so both routes go through the same list. This is what
[NoMore](https://swiftfox.studio/apps/nomore) does, and everything below is in the shipping version.

## How the detection works

NoMore watches two things: which application is frontmost, and - when that
application is a browser - what its current tab is. It asks the browser directly,
through the same scripting interface Safari, Chrome and the Chromium family
expose to macOS, and compares the answer against your list on your own machine.

There is **no proxy, no DNS service and no VPN profile**. Your browsing is not
routed anywhere, and the app has no server-side record of what you open, because
the comparison happens locally and the result never leaves.

macOS gates that scripting access behind an **Automation** permission, which is
why setup asks for one per browser. That prompt is the price of seeing the tab at
all; there is no way to read a browser's current URL on a modern Mac without it.

Firefox is the exception, and it is worth knowing which permission you are
granting and why. Firefox publishes no AppleScript dictionary at all, so there is
nothing to ask; its URL is read out of the **Accessibility** tree instead, and so
is the step back. That is one app-wide grant rather than one per browser, and
without it Firefox is the one browser NoMore cannot see into.

Detection is a poll rather than a hook: while a browser is frontmost, NoMore
re-reads the current URL every couple of seconds. That is what catches you
navigating inside a tab you already had open, rather than only the one you just
opened.

## What you actually put on the list

The unit is not "a blocked site". It is a **streak** - a thing you are trying to
stop doing, which has a name, a start date, and a set of domains or applications
that count as breaking it.

![The NoMore menu bar popover on macOS listing three streaks, each with its day count and strictness, above a New streak button](https://swiftfox.studio/nomore/listing/shot-1.jpg "Each entry is a named streak with its own domains, apps and strictness, not just a line in a block list.")

One streak might be a single domain. Another might be four news sites. A third
might be an application with no website involved at all. Each carries its own
**strictness** - gentle, firm or brutal - and its own day count, and milestone
notifications fire at 7, 14, 30, 60, 90, 180 and 365 days.

A domain does not have to mean the whole site. An entry can carry a path -
`youtube.com/shorts`, `reddit.com/r/nba` - and then only that part is blocked
while the rest of the domain stays open. Matching is by whole path segment, so
`/shorts` covers `/shorts/abc123` and never `/shortsclips`.

![The NoMore streak editor on macOS showing a path-scoped domain and an active-hours window from 09:00 to 18:00](https://swiftfox.studio/nomore/listing/shot-4.jpg "A streak can be narrowed twice over: to one path of a site, and to the hours of the day it applies.")

A streak can also be given **active hours** - a From, a To, and it blocks only
between them. It is off by default, which means around the clock, and an end
earlier than the start is read as a window that runs through the night rather
than a mistake.

Framing it as a streak rather than a filter is the design decision the rest of the
app follows from. A filter has a binary state. A streak has a length, and a length
is a thing you do not want to lose.

## What happens when you open one anyway

This is the interesting part, because the answer is not "you can't".

![The NoMore friction panel reading 8 days without Reddit, with Step back as the primary button and Open anyway as a small link below it](https://swiftfox.studio/nomore/listing/shot-2.jpg "The day count, then a lopsided choice: a large Step back, and a small link that spells out what opening costs.")

A blurred panel takes over in front of what you opened. It shows how many days
the streak is at, and offers a deliberately lopsided choice: **Step back** is the
large primary button, and **open anyway** is a small link that spells out what it
will cost. Every other escape hatch - pause for an hour, the daily free pass, the
external-link exception - sits behind a **More options** disclosure, so the main
screen stays a calm two-way decision rather than a menu.

The strictness setting changes what "open anyway" costs:

- **Gentle** takes the click. The panel was the friction.
- **Firm** starts a countdown you have to sit through, with a text field asking
  what you are going to do there. The countdown escalates within the same day -
  30 seconds the first time, 60 the second, 120 from the third on - so a bad
  afternoon gets progressively more expensive rather than costing the same every
  time.
- **Brutal** asks you to type out a confession of a minimum length before the
  button unlocks at all.

Stepping back does something real: NoMore asks the browser to go back and then
re-checks the URL to confirm the tab actually left. For an application it hides
the app rather than quitting it. That is a decision rather than a limit: quitting
something you are in the middle of using can cost you unsaved work, and the block
is meant to stay soft enough that deliberately reopening the app ten minutes later
is allowed.

Hiding has one wrinkle worth naming, because it looks like a bug: dismissing the
panel hands focus back to whatever was frontmost before it, which is the app that
was just hidden, so macOS un-hides it. A short watchdog re-hides it for about a
second and a half to outlast that, then stops.

## Bypasses, on purpose

Three exist, and they are all counted. **Pause for an hour** suspends a streak
temporarily. A **daily free pass** allows one deliberate visit. An
**external-link exception** covers the case where a link someone sent you happens
to land on a blocked domain.

None of these are oversights. NoMore is friction, not a lock - and software that
traps you out of your own machine gets uninstalled the first time it is
inconvenient at the wrong moment, after which it protects nothing at all. A
bypass you spend on purpose, that gets recorded, is a better outcome than a
workaround you find in a rage.

## What it records, and where it stays

Every trigger, every outcome and every "what are you going to do there" answer is
written to a local store, and the stats screen turns that into which streaks are
holding, what time of day you drift, and how the bypasses got spent.

![The NoMore stats view with total clean days, longest streak, active streaks and a trigger-hours chart](https://swiftfox.studio/nomore/listing/shot-3.jpg "Clean days, the longest streak, and the hour of day the triggers cluster in - computed locally, uploaded nowhere.")

Once a week that record turns into a note rather than a screen you have to open:
on Sunday evening NoMore lists your three longest runs and the one streak you
walked away from most in the last seven days. It is a single notification, it says
nothing when there is nothing to report, and it can be turned off in the app's
General settings.

All of it is on your Mac. The only network traffic the app makes goes to our own
servers - license validation, updates, config, and anonymous usage and crash
diagnostics, none of which carries a URL you visited.

## What it deliberately does not do

There is no DNS filter, no VPN profile and no proxy, which is the same sentence as
"your browsing is not routed anywhere" read from the other side. That has a real
cost and it is worth stating: NoMore checks the window you are looking at, so a
blocked video already playing in a background window keeps playing. This is
attention friction, not a network filter.

It cannot be locked. There is no password, no parental-controls mode and no way to
stop yourself from quitting the app - and there is no version of this that imposes
a list on somebody else's account. Every escape hatch is counted rather than
closed, because the alternative is an app people delete in a bad moment and never
install again.

There is still no schedule in the calendar sense. Active hours are one window per
streak, the same every day - not a timetable with different rules for different
days, and not a session you start and wait out. The default is all day, because
what you are trying to stop doing is a thing you are trying to stop doing at three
in the morning too; the window is there for the streaks where that is honestly not
the case.

And it never reads a page. NoMore sees a URL and an application name, compares
both against a list on your Mac, and forgets both. It has no idea what any page
says.

## What it costs, and what else to look at

NoMore runs on **macOS 14 or later**, on Apple Silicon and Intel, and takes about
25 MB. It is a **one-time $8.99 purchase** rather than a subscription, with a 30-day
trial that needs no card and no email. The full specification is on
[the NoMore page](https://swiftfox.studio/apps/nomore).

Blocking solves drifting. It does not solve starting, and it does not solve
choosing. If the problem is that the work never begins, a fixed interval is the
lever - [Pawodoro](https://swiftfox.studio/apps/pawodoro). If it is that you have four things and no
decision, [Anchored](https://swiftfox.studio/apps/anchored) puts one of them in the menu bar for the
day, feature by feature in
[a menu bar task timer for Mac](https://swiftfox.studio/handbook/menu-bar-task-timer-for-mac). There is a comparison of the whole category in
[the best focus apps for Mac](https://swiftfox.studio/blog/best-focus-apps-for-mac).
