Built into Webstarted Toolbox · macOS & Windows

Are your sites up? Look at the menu bar.

Paste your URLs and each one gets a color: green for a 2xx, amber for “it answered, but not 2xx”, red for no response — with the status code and the latency. Turn on background watching and the app checks them with the popover closed, telling you only when a site changes state.

Free · No account · Built into the app · macOS 12+ & Windows 10+
Three states2xx, answered-not-2xx, silent
Code and latencyNot just a dot
Watches closedOpt-in, from 5 min up
One notificationOn the change, not per check
Three colors

“Down” and “answering the wrong thing” are not the same emergency.

Most little uptime widgets give you a dot: up or down. That collapses the two failures you handle differently. Here a site that answers with a 503, a 403 or a 500 is amber — the machine is alive, something above it is not — and only a site that gives no HTTP response at all (DNS, refused, timeout) goes red. Green is a 2xx and nothing else.

Every row carries the status code, the latency in milliseconds and when it was checked, because “green, 2400 ms” is a story a green dot does not tell. Add a URL by typing it — a bare host gets https:// filled in — and the list is checked when you open the widget, plus whenever you press re-check.

  • One GET per site, body never downloaded: status and timing only
  • Up to 5 redirects, 15-second timeout, no https→http downgrade
  • Your own dev server works — http://localhost:3000 included
  • The last known state is kept, so reopening shows it before the fresh check lands
  • Lives in the Info tab, and pops out into its own window
Watching closed

A monitor that only looks when you look is not a monitor.

A site that goes down at 3am and comes back at 6 is exactly the case you want to hear about, and it is precisely the one nobody is watching. So there is a background watch: turn it on and the app checks your list with the popover closed and the tab never opened, then sends an OS notification when something changes.

It runs in the app’s native layer, not a setInterval, and that is not a preference: macOS throttles and suspends JavaScript timers in a hidden web view, so the one moment the check matters is the one moment the web view cannot promise it. The interval is yours between 5 minutes and one day, the panel shows “Watching every 10 min” while it is active, and turning it off takes effect in about a second rather than at the end of the current interval.

  • Ships off; the switch is in the widget’s config (right-click → gear)
  • Adding a site while it is on includes the site — no re-toggling
  • The check waits out its first interval, so nothing is requested twice on save
  • Results from a closed-popover round are already on screen when you reopen
One notification

Down for three hours is one notification, not 36.

The alert fires on the transition. “Still down” is silence, because a monitor that repeats itself every interval teaches you to dismiss it without reading, and then the one that mattered gets dismissed too. The first check of a site never notifies either: switching the watch on with two already-broken URLs would otherwise greet you with two alerts about something you already knew.

Coming back up is a separate toggle — going down always notifies, the recovery notice is opt-out. And it arrives as an OS notification, not as one of the app’s blocking alert cards: a site being down is something to find out about, not something to acknowledge. The widget declares that it notifies, so it appears in the per-widget mute list in Settings.

  • A 404 counts as down for the alert — you were watching that exact URL
  • The panel still shows amber for it: the distinction survives where it is useful
  • A URL you mistyped is logged and skipped, not reported as an outage
  • Muting the widget leaves the checks and the colors running
Coming from a hosted monitor?

This checks from your machine. That is the whole difference.

A hosted uptime service checks from its own servers, so it keeps watching while your laptop is shut. This widget checks from where you are — which means it also answers “is it down, or is it my network?”, needs no account, no agent and no third party holding your URL list, and costs nothing. It also means that when your Mac is asleep, nobody is checking.

Pick accordingly: for a site whose downtime wakes people up, keep the hosted monitor. For the eight URLs you actually glance at during the day — your site, your staging box, a client’s landing page, the dev server you just started — the honest version is a panel in your menu bar that tells you the code and the milliseconds.

  • No uptime history, no graphs, no public status page
  • No SMS, no webhooks, no on-call escalation
  • No SSL expiry warning yet — see the FAQ
  • Your URL list stays on your machine: no account, nobody else holds it
ThisHosted
Runs with your machine off
Says if it’s down for you
Localhost & LAN
No account
History & status page
SMS & webhooks
SSL expiry
PriceFreeTiered
Part of Webstarted Toolbox

It comes with Toolbox. There is nothing to install.

Website Monitor is built into Webstarted Toolbox, the app that lives in your menu bar on macOS and your system tray on Windows — so it is already there the moment you install it, in the Info tab. These are a few of its neighbors:

FAQ

Questions, answered.

Does it check while the popover is closed?

If you turn that on, yes. Background watching is a checkbox in the widget’s config (right-click → the gear) and it ships OFF. With it on, the checks run in the app’s native layer — a Rust thread, not a timer in the web view — so they happen with the panel closed and the tab never opened. What it does need is Toolbox running, which it is, because it lives in your menu bar. If you quit the app or the machine is asleep, nothing gets checked; that is the job of a monitor hosted somewhere else.

Why isn’t background checking on by default?

Because hitting someone else’s site every minute from a menu-bar app is bad manners, and that includes hitting it on behalf of a user who never asked. The widget was built without automatic polling for exactly that reason, and the background check did not reverse the decision — it made it yours to make. So you turn it on, the interval has a floor of 5 minutes and a ceiling of one day, and until then the only requests are the ones you can see: one per site when you open the widget, plus the ones you ask for with Re-check.

How often does it check?

Whatever you set between 5 minutes and 24 hours; new setups start at 10. The floor is not arbitrary — 5 minutes is where the free hosted monitors start too, and it keeps watching ten sites at roughly two requests a minute in total. The native layer clamps the value on its own, so a number outside the range gets pulled to the nearest edge rather than silently disabling the watch.

Will it spam me while a site stays down?

No. It notifies on the transition, not on every failed check: a site down for three hours sends one notification. The first check of a site never notifies either, because turning the watch on with two already-broken sites would otherwise fire two notifications at once about something you already knew. And coming back up is a separate toggle — going down always notifies, the recovery notice is the part you can switch off.

What do the three colors mean?

Green is a 2xx. Amber means the server answered but not with a 2xx — a 403, a 500, a 301 chain that ended somewhere unhappy — which is a different problem from silence. Red means no HTTP response at all: DNS failure, refused connection, timeout. Each row shows the status code and how many milliseconds the response took, plus how long ago it was checked, so “green, 2400 ms” tells you something a plain green dot would hide.

Does a 404 count as down?

For the notification, yes — and deliberately. You are watching one specific URL, so if it starts answering 404, something broke. The panel still shows it amber, because in the panel the distinction between “answered wrong” and “did not answer” is worth keeping; the notification only has one bit to spend, and it spends it on “this is not serving what it used to”.

Can I monitor localhost or a server on my LAN?

Yes. A URL you type is a URL it checks, private addresses included — type the scheme and port for those (http://localhost:3000), since a bare host gets https:// added for you. What is blocked is a different thing: a public site that 30x-redirects the request into loopback or your LAN, which is how a URL check gets turned into a probe of services that trust the local network. The gate looks at where the request started, so your own dev server keeps working.

Does it tell me when my SSL certificate expires?

Not today. That is a real gap and worth saying plainly rather than implying otherwise: the check reads the HTTP response, and reading the certificate’s expiry date needs a separate TLS handshake and parsing the certificate by hand, which is its own piece of work and is not built yet. A site with an expired certificate will usually show up red anyway — but as a failed request, without a date and without warning you in advance.

How heavy is the check on my site?

One GET per site per round, whose body is deliberately never read: the widget takes the status code and the timing and drops the connection, so nothing is downloaded. It follows at most 5 redirects and gives up at 15 seconds. It is still a real request, so it appears in your access logs and in any server-side counter — but no browser runs, so no page JavaScript and no client-side analytics tag fires.

Can I silence it without turning the watch off?

Yes, in two places. The widget declares that it posts OS notifications, so it shows up in the per-widget mute list in Settings, and the global notifications switch covers it too. Either one silences it while the checks keep running and the panel keeps showing the colors — which is the point of separating them.

How do I know the watch is still on?

The panel says “Watching every 10 min” above the list whenever it is. That line is not decoration: in a monitor, the only thing you cannot afford to confuse is “it didn’t warn me because everything is fine” with “it didn’t warn me because it’s off”, and someone who enabled it a week ago has no other way to tell.

Is it free?

Yes. Webstarted Toolbox is a free beta, needs no account, and Website Monitor comes built into the app — there is nothing to install and nothing to enable, beyond the background watch if you want it. It is desktop only: macOS menu bar and Windows tray.

Get Webstarted Toolbox

Free to use. Website Monitor is built in — download the app and it is already in the Info tab. macOS 12+ and Windows 10+.

Free beta · macOS · Windows (x64) · Signed & notarized · No account required
Keep exploring

One icon, many small tools

This is just one of the widgets in Webstarted Toolbox. Here are the rest:

Keep Awake Stop your Mac from sleeping, on your terms. 📊 LLM Quota Pace your Claude / AI usage against the clock. 🍅 Pomodoro 25/5 focus cycles in your menu bar. Countdown Live countdowns to anything that matters. Clipboard history Your recent copies, one keystroke away. {} Dev tools JSON, Base64, JWT, regex, epoch — offline. Quick Note A scratchpad that autosaves as you type. 🌐 My IP Your public IPv4 and IPv6, copyable, with ISP and location. 📈 System Info CPU, memory and GPU in your menu bar. 🐹 Topos A 30-second reflex game in your menu bar. 💣 Minesweeper Classic minesweeper in your menu bar. 🪙 Crypto Prices Live crypto prices with 24h change, in your menu bar. 💱 Currency Converter Convert currencies with real parallel rates (blue, MEP, CCL). 🌍 World Clocks Several cities' time at once — daylight saving handled automatically. 🔳 QR Generator QR codes for text, URLs, WiFi or contacts — offline. 🔑 Password Generator Strong passwords & passphrases, fully offline. 🌤️ Weather Any city, now + the days ahead — no API key. 🔥 Habit Tracker Daily streaks — don't break the chain. 100% local. 🔤 Text Tools Change case, slugify, count, dedupe — offline. 🎲 Random Picker Pick from a list at random, or roll dice. 🎨 Color Picker Pick a color, copy hex / rgb / hsl / hsv — offline. 🌐 Translator 18 languages from the menu bar — no API key needed. 🔀 Text Diff Compare two texts line by line — 100% local. Cron Wizard Cron expressions in plain English, with the next runs. 🗃️ Dummy Data Lorem ipsum and fake rows in JSON, CSV or SQL. 🔊 Focus Sounds White, pink or brown noise — synthesized, no files. 🔁 Subscriptions What your recurring services cost per month and year. 🧾 Rates & Tax Hourly ↔ yearly, and add or extract tax. Network Fees Ethereum gas and Bitcoin fees, right now. 📣 UTM Builder Trackable campaign links, normalized so GA behaves. 🌿 Git Status Which of your repos are dirty, unpushed or behind. 🧮 Calculator Type the calculation, read the result as you go. 🎬 Teleprompter Your script scrolls at the speed you read — in wpm. 📊 Stocks Stocks and ETFs with the day’s change — no API key. 🔥 Fireplace A fireplace generated on the fly — no files, no network. 💼 Job Tracker Your applications, with an OS alarm before each interview. Converter 57 units in 8 categories, converted with zero network. Alarms Clock-time alarms that ring with everything closed. 🗂️ Project Boards Kanban boards with your columns, and a due date that notifies you. 📤 Send to another computer Text and images to another computer on your network. 📅 Calendar A month view in your menu bar.