There are two ways to have a status page: rent one, or run one. This is
an honest account of what each costs you — written by the people who
make one of them, which is worth knowing while you read it.
Someone else runs the page. That is the entire proposition and it is a real one: the status page stays up when your infrastructure does not, which is the exact moment a status page matters most, and nobody on your team is paged for it.
What you give up is the other side of the same coin. The page lives on infrastructure you do not control, your incident history and your subscriber list live in someone else's account, and the terms — what it costs, what the limits are, what happens to the data — are theirs to change. If that trade is right for you, take it. It often is.
Self-hosted, open source
Uptime Kuma, Cachet, Gatus — and TERN
You run it, you can read every line of it, and nothing about your services leaves your machine. The history is in your database, the page is on your domain, and no part of it can be repriced or discontinued.
The cost is that it is now yours to keep alive. It needs a host, it needs updating, and — the part people underestimate — a status page on the same infrastructure as the thing it watches goes down with it. That is a real limitation of every option in this family, TERN included, and it is worth saying before you choose one rather than after.
The difference, in six lines
Deliberately structural. Prices, quotas and feature lists change without
notice, and a table full of them is out of date long before anyone
notices — these six do not move.
Hosted
TERN
Who runs it
The vendor
You
Where the history lives
The vendor's account
Your database
Source
Usually closed
AGPL-3.0, readable in full
Cost
A subscription
A server you already have
If your infrastructure is down
The page stays up
The page may go down with it
Data leaving your network
By design
None
Feature by feature
The ten status pages people shortlist most often, and this one. Every
row names the source it was read from and the date — all eleven read on
8 August 2026. The product name is the link. Feature
sets move; treat this as true on that date and follow the link if it
matters to your decision.
“Not stated” is not a “no”. It means we read that
product's own page and it does not say. Several of these are certainly
things the product does and simply does not advertise there — Statuspal's
home page, for one, is positioning rather than specification, which is
why its row is almost entirely blank. We would rather print a hole than
fill it with a guess about somebody else's work.
“Runs its own checks” compares unlike things. Some
products model a keyword match or a JSON query as their own kind of
monitor; TERN models them as assertions on the HTTP check, so they do
not appear in that cell even though it does both — and they compose,
which separate monitor types cannot: one check can assert a status code,
a latency of 800 ms as degraded, 3 s as down, and a JSONPath
value, all at once.
One asymmetry worth naming before you read it: our row is the only one
taken from source code, so it is the only one that can be answered
exhaustively. The other ten come from pages written to sell, which name
what the vendor chose to name. That flatters us, and the flattery is an
artefact of where the information came from rather than a difference
between the products. Our own row still says “not stated” for a private
page, because nothing in the schema provides one.
Stated by the source
The source says it does not
Not stated — we read the source and it does not say. Not
a "no".
Eleven status pages compared across seven capabilities. Each row names
the source it was read from and the date it was read.
Not stated
in the source we read; this is not a no
90+ services
Not stated
in the source we read; this is not a no
When TERN is the wrong choice
You need the page to survive your own outage. Put it
on a host that has nothing to do with the services it watches, or use
a hosted one. This is the honest answer and it is the most common
reason to pick something else.
Nobody wants to run one more thing. It is a container
and a database. That is not much, and it is not nothing, and a team
without anyone to own it is better served by a subscription.
You are not on Linux. The install has been run end to
end on Rocky Linux, Ubuntu and Arch. macOS and Windows are not
supported — see the note on the home page for why.
You want it today with no decisions. A hosted page is
a sign-up form. This is a command, a domain and a few minutes.
If it is the right choice
One command. It writes its settings, sets up its storage, and waits until
the page answers.
$curl -fsSL -o setup.sh https://raw.githubusercontent.com/lelabnet-creator/ternproject/main/scripts/setup.sh && sh setup.sh