Skip to content

How we test

protocol v9 · updated September 27, 2026 · applies to every install-verified app and guide

An app's documented install is run on a real server before its page is stamped install-verified, and most of the catalog carries that stamp. This page is the exact protocol, so you can hold us to it.

In practice, an app's documented install commands are executed end to end on a reset cloud VM — unattended where the installer allows it, with interactive prompts answered where it demands a terminal — and only then does the page carry an install-verified stamp naming the OS and date of that run. No transcript, no stamp. We published what those runs found across the whole catalog, including the installs that failed: the install-quality report.

The protocol

  1. 01
    Start from a reset cloud VMA throwaway Ubuntu cloud VM (a GCP e2-standard-2 unless the app needs more), reset between installs — every container, volume, image, build cache and working file from the previous app is removed, and the run aborts if anything survives.
  2. 02
    Run the documented install, unattended where it can beThe app's own documented commands are executed end to end, first attempt, with a hard timeout and nothing smoothed over; installers that demand a terminal are answered by hand. A pass means every step exits cleanly — where the snippet has no health check of its own, we confirm the app answers by hand. Whether it worked first try is recorded, and a passing run puts its OS and date on the app's page.
  3. 03
    Re-check pricing, and show whenWe re-check VPS provider prices against each provider's own pricing page or API; the site shows when the latest check ran. SaaS list prices are taken from the vendor's page when a comparison is written or updated.

What the numbers mean

cost / moThe monthly starting price of our editorial baseline VPS — a 2 vCPU / 4 GB box billed as a plain monthly rate, no term commitment — as of its last re-check. It is one flat figure for every app, not sized per app, and nothing is added for backups, bandwidth or headroom. Your time is never priced in — that's what the effort column is for.
setupOur estimate of hands-on time for the guide — reading, typing and waiting included. Rounded up, never down.
savingsTwelve months of the SaaS plan's monthly list price, minus twelve months of that self-hosted figure. We only show it when it comes out positive; a SaaS with no published price gets no figure.

Difficulty reflects what the install actually asks of you — how many moving parts, how much DNS and config, how much can go wrong.

noteVPS prices show when they were last checked; SaaS list prices are as of the page's last update.

What we include

An app earns a place in this catalog only after it clears three bars, checked before any of the protocol above ever runs.

It has to be genuinely self-hostable: something you install and run on your own server, not a hosted-only tool wearing a self-hosted label. That's not just an editorial judgment call — every app row carries an explicit self-hostable flag, a required database column, not an optional tag we could leave blank.

It needs a documented install path we can actually run. Where our verification sweep has reached an app, its page carries the install-verified stamp described above; where the sweep hasn't reached it yet, that's visible too — see the install-quality report for the full state of the sweep, failures included.

And it can't already be here. Slug and title are unique constraints on the underlying table, so a duplicate entry isn't a style guideline we might slip on — it's a write the database itself refuses.

The shape of these criteria borrows from awesome-selfhosted's own public contribution rules, adapted to describe what this catalog actually enforces, not a wishlist.

Independence

Where we rank hosts, they're ordered by the cheapest plan that fits the workload — commission never enters the ranking, so a host that pays us can rank first, and when it does its link is labelled as paid. Where we name a single host to start on, the commission it pays is one of the reasons we picked it, and the module labels it as a paid link. When we can't recommend a partner honestly we don't link it. See how we make money for the full picture.

When we're wrong

If a reader reproduces a guide and gets a different number, we re-run the protocol, correct the page and update its date. Tell us at hello@selfhostatlas.com.

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.