HOME GITR3KT ← All reports
Research report · Researched 30 Oct 2026 For single-file HTML artifacts · 50 KB – ~10 MB each

Where should your HTML files live?

You keep accumulating self-contained pages — reports, tools like the robot voice tuner — and each one deserves a durable public URL. This report compares cheapest vs. most ownership vs. most functional across the whole field, with provider-verified pricing kept strictly separate from what people on Reddit, Hacker News, and the self-hosting forums say actually happened to them.

✓ Provider facts verified live 2026-10-30 where marked Community claims labelled — never mixed into prices Domain itself: ~$10–20/yr for a .com*

*Registrar pricing is from secondary sources only — it was not separately verified against primary registrar pages.

🏆 Cheapest

Cloudflare Pages / Workers Static Assets

$0

The only major free static tier that is genuinely unmetered.

  • Unlimited sites, requests & bandwidth on every plan, including Free
  • 25 MiB per file — 2.5× headroom over your largest (~10 MB) artifacts
  • 20,000 files per site · 100 custom domains per project · HTTPS free
  • Catch: Cloudflare now steers new projects to Workers — start there
🏆 Most ownership

Cheap VPS + Caddy

≈ €6/mo

A Hetzner CX23-class box — not raw home hosting. Your stack, their power bill and public IP.

  • 20 TB included traffic (EU) · flat price, no meters
  • Full control without exposing your home IP or ISP uplink
  • At home instead? Cloudflare Tunnel ($0) is the only home route practitioners consistently endorse
  • Raw port-forwarding is the one option the community actively warns against
🏆 Most functional

Cloudflare, stepped up

$5/mo

Workers Paid + D1 / KV / R2 — the cheapest credible step from files to forms, state, and a database.

  • 10M requests included; static assets stay free & unlimited
  • D1 database, KV store, R2 storage, free Web Analytics
  • Roughly ¼ the price of Vercel Pro ($20/seat) or Netlify's metered equivalents
START HERE

Pick your situation

Three honest answers depending on what you actually need today — not what you might need someday.

01 · THE FIELD

Every option, side by side

Provider-verified figures only. “Free custom domain” means free to connect a domain you own — the domain itself still costs money at a registrar.

OptionReal costBandwidthSize limits (vs. your 50 KB–10 MB files)Domain / HTTPSDeploy one HTML fileMain catch
Cloudflare Pages / Workers Static Assets$0Unlimited requests & bandwidth (static)25 MiB/file · 20,000 files/siteYes, free (100/project) · Auto HTTPSDrag-and-drop upload or WranglerNew projects steered to Workers; ecosystem lock-in
GitHub Pages$0 (public repo)~100 GB/mo (soft)Site ≤ 1 GB totalYes, free · Auto HTTPSCommit / web uploadTerms bar sites “primarily directed at facilitating commercial transactions or providing commercial SaaS”
Netlify$0 = 300 credits/mo20 credits/GB (≈15 GB max on free)No per-file cap foundYes, free · Auto HTTPSDrag-and-drop (Drop) — easiestCredits out → all sites pause 15 credits per deploy
Vercel Hobby$0100 GB/mo—Yes · Auto HTTPSGit push / CLINon-commercial only caps pause features; can't buy more
GitLab Pages$0—Site ≤ 1 GBYes (≤150) · Auto HTTPSNeeds a CI pipelineMost setup friction for one file; 400 CI min/mo on Free
Codeberg Pages$0—Pre-built HTML onlyYes (.domains file) · Let's EncryptPush pre-built filesFLOSS-only; “best effort”, single maintainer
Neocities$0 / $5/mo Supporter200 GB free / 3,000 GB paid1 GB storage free / 50 GB paidPaid onlyWeb upload / WebDAV (paid)Free tier: no custom domain, file-type limits
Surge$0No bandwidth billing450 MB/project · 10,100 filesYes, free · Auto HTTPSCLI surge450 MB/project cap (index-only data — see Open questions)
Render (static sites)$05 GB/mo pooled, then $0.15/GB or suspension—2 incl., then $0.25/mo · Auto HTTPSGit / manual deployTightest bandwidth pool in the field
Tiiny Host$05 GB/mo3 MB/file freePaid ($13/mo tier)Drag-and-drop3 MB cap is below most of your artifacts; banner; log in every 3 months
Home + Cloudflare Tunnel$0 (+ domain)Your uplink; edge-cachedNone (your disk)Yes (DNS on Cloudflare) · Auto HTTPSCopy file to server folderCloudflare in the middle; home uptime
Home + Tailscale Funnel$0Unpublished, non-configurable limitsNoneNo — *.ts.net onlyCopy file + tailscale funnelBeta; ports 443 / 8443 / 10000 only
Home + DDNS / port-forward + Caddy$0 (+ domain)Your uplink onlyNoneYes · Auto (Caddy)Copy file to server folderHome IP exposed ISP ToS / port blocks / CGNAT; your uptime
VPS (Hetzner CX23 class) + Caddy≈ €5.49–5.99/mo20 TB incl. (EU), overage €1/TBNone (40 GB disk)Yes · Auto (Caddy)rsync / gitYou patch & back it up; 2026 price rises + stock issues*
Cloudflare R2 (public bucket)$0 ≤ 10 GB · $0.015/GB-moEgress freeNone practicalYes · HTTPS yesUpload object (S3 API/CLI)A bucket, not a host: no builds / index niceties
AWS S3 website$0.023/GB-moEgress $0.09/GB after 100 GB/mo freeNoneYes · via CloudFront (~$0.085/GB)Upload objectEgress pricing; most setup friction
Backblaze B2 + CDN~$0.00695/GB-moFree ≤ 3× stored; free via Cloudflare/FastlyNoneVia CDN partnerUpload objectNeeds a partner in front to be a website
No option matches that search. Try a shorter term — “credit”, “tunnel”, “egress”.

*Hetzner CX23 pricing rests on multiple agreeing October 2026 snapshots plus Hetzner's own price-adjustment notices — consistent, but not cleanly live-verified; Cost-Optimized lines were showing “not available” intermittently. Check the console before committing. Full caveats in Open questions.

02 · CHEAPEST

Free tiers, honestly priced

“Free” in 2026 means three different things: genuinely unmetered, softly capped, or a meter that pauses — or bills — you. The difference is the whole story.

Cloudflare Pages / Workers The standout

“All plans come with unlimited sites, seats, requests, and bandwidth” for static assets — there is no bandwidth meter to run up. Free limits (official limits page, updated 2026-09-05, verified live): 500 builds/month, 1 concurrent build, 20-minute build timeout, 100 projects per account, unlimited preview deployments.

25 MiB / file20,000 files / site100 domains / project
  • Deploy: Direct Upload — drag-and-drop in the dashboard (1,000 files per drop) or Wrangler CLI (20,000 files). Rename the artifact to index.html, or drop a folder containing one.
  • The catch is strategic: docs now say “Start new projects with Workers.” Pages is supported, but new investment goes to Workers Static Assets — same 25 MiB / 20,000-file free limits, same free unlimited static serving. Dynamic behaviour (Pages Functions) counts against Workers quotas.

GitHub Pages Simplest if you live in git

Free in public repositories on GitHub Free (private-repo Pages needs Pro/Team). Commit the file or drag it into the web UI — nothing to configure for plain HTML.

Site ≤ 1 GB total~100 GB/mo soft bandwidth10 builds/hr soft
  • The 1 GB total is the binding constraint for a growing library: ~100 worst-case (10 MB) artifacts fill it; typical sizes leave room for thousands, but media-heavy artifacts eat it fast.
  • Exceeding quotas can trigger a “polite email” suggesting a CDN, Releases, or a different host — soft limits, but real.

Netlify No longer the default free answer

Since September 2025 the Free plan is a 300-credit/month hard meter: a production deploy costs 15 credits, bandwidth 20 credits/GB, compute 10 credits/GB-hour, web requests 2 credits per 10,000. Accounts created before 2025-09-04 keep the legacy 100 GB/month plan.

≈15 GB traffic OR 20 deploys / moPersonal $9/mo · 1,000 creditsPro $20/mo · from 3,000
  • At zero credits all your sites pause and show “Site not available” — and Free cannot top up. The hard cap at least makes the old surprise-bill failure impossible on Free, by pausing you instead.
  • Still the best deploy experience in the field — Drop and instant rollbacks are genuinely loved (see Community).

Vercel Hobby Personal use only

Hobby ($0, verified live 2026-10-30) includes 100 GB Fast Data Transfer/month, 1M CDN requests, 1M function invocations, 4 hours of Fluid active CPU, 360 GB-hours provisioned memory, 1 GB Blob storage, and 50K Web Analytics events/month.

  • The FAQ states Hobby is “for personal, non-commercial use” and Hobby accounts cannot purchase additional usage — hitting a cap pauses the feature until the cycle resets.
  • Pro is $20/seat/month with a $20 usage credit and real spend management: a default $200 on-demand budget with an optional hard limit that auto-pauses projects. Pro overage rates ($0.15/GB after 1 TB; $2/M after 10M edge requests) are from October 2026 secondary comparisons — index only.
  • Framework-first (Next.js) orientation is overkill for lone HTML files, though it serves them fine.

Neocities $0 / $5 Surge GitLab · Codeberg

Neocities — free: 1 GB storage, 200 GB bandwidth (supporter page, verified live) — the most generous free bandwidth after Cloudflare. Supporter at $5/mo: 50 GB storage, 3,000 GB bandwidth — and custom domains, custom-domain SSL, multiple sites, WebDAV and removal of file-type restrictions are all Supporter features, so the free tier is a side-home, not the canonical one.

  • Surge ($0, index-only): unlimited projects/domains, custom domains + automatic certificates free on every plan, “no bandwidth billing, no overage”; 450 MB per project, 10,100 files; CLI-first (surge ./folder); rate limits pause publishing, never serving.
  • GitLab Pages ($0): site ≤ 1 GB, up to 150 custom domains, Let's Encrypt — but publishing runs through GitLab CI (400 compute min/mo on Free), the most friction here for “I have one HTML file.”
  • Codeberg Pages ($0): custom domains via a .domains file, Let's Encrypt, pre-built HTML only (which suits this use) — but it's a non-profit for free/libre open-source software only, docs warn domain setup is “not fully tested yet”, and community reports call it single-maintainer “best effort.”

Render static & Tiiny Host Fit problems

Render static sites are free and always-on — but the Hobby workspace shares a pool of only 5 GB outbound bandwidth/month (then $0.15/GB with a payment method; without one, free services are suspended when the pool is exhausted), 500 pipeline minutes, 2 included custom domains ($0.25/mo each extra). 5 GB is ~500 downloads of a 10 MB artifact. (Index.)

  • Tiiny Host free: 1 page/site, files up to 3 MB — below most of your artifacts — 5,000 visits, 5 GB/month, a banner, and the site stays online indefinitely only if you log in every 3 months. Paid tiers ($5/mo “Tiny”, $13/mo “Solo”, billed yearly) lift the caps. Included for completeness; not recommended.
  • NearlyFreeSpeech.NET — not free, nearly: the old guard's answer. Pay-as-you-use shared hosting, rsync/FTP upload, custom domain and .htaccess control, transparent pricing, nothing proprietary to escape from. Cents-to-a-dollar a month for a low-traffic static site — but every byte is metered, so a viral spike is a real (if modest) bill.

Try it: how fast does Netlify's free meter run out?

300 credits a month, shared across everything. Drag both sliders — this is why Netlify is now a great one-off share and a poor permanent home for a frequently-updated library.

Credits used
—
15 per deploy · 20 per GB (compute & requests not included — real usage runs out faster)
Status
—
—
03 · MOST OWNERSHIP

Your hardware, your rules — within limits

You own a Netgear Nighthawk router/modem outright, an always-on Intel N95 mini-PC, and a Pi 5. The hardware was never the bottleneck. The uplink, the IP address, and your ISP's fine print are.

Cloudflare Tunnel $0 · The sane home route

Run Caddy/nginx/anything on the mini-PC or Pi; cloudflared makes outbound-only connections, so: no open ports, no port-forwarding, works behind CGNAT and dynamic IPs, and your home IP is not in public DNS. Free, including on Zero Trust Free (up to 50 users). You need a domain with DNS on Cloudflare for named tunnels. Maintenance: near zero — one daemon, auto-HTTPS. Performance: excellent for static files (edge-cached).

  • What can break/expose you: Cloudflare itself — traffic is decrypted at their edge, your account is a single point of failure, and free-CDN terms have historically discouraged pushing large volumes of non-HTML content through tunnels (the §2.8 saga, in Community). Practitioners report anxiety specifically about streaming media (Jellyfin/Immich) over free tunnels. For small static HTML artifacts, a non-issue in practice.
  • Not this: Quick Tunnels (trycloudflare.com) — random hostname that changes every run, no uptime guarantee, 200 in-flight-request cap, no SSE. Testing only. (Official docs, updated 2026-09-30.)

Cheap VPS + Caddy (or Coolify) The ownership sweet spot

Rent a public IP, a real uplink, and someone else's power bill — keep the entire software stack yours. Caddy/nginx serving a folder of HTML, deployed by rsync or git. A static site cannot meaningfully be “outgrown” on a 2 vCPU / 4 GB box: 20 TB of included traffic is ~2 million downloads of a 10 MB artifact.

  • Hetzner, with a warning: the €3.79–4 CX22 price in every older guide is dead. The CX22 was retired; successor CX23 (2 vCPU, 4 GB RAM, 40 GB NVMe, 20 TB traffic in the EU) rose twice during 2026 (2026-04-01 and 2026-06-15 for new orders). October 2026 snapshots: €5.49/mo excl. VAT/IPv4, €5.99 incl. IPv4; IPv4 €0.50/mo extra where unbundled; overage €1/TB; backups +20%. Cost-Optimized lines were intermittently “not available” in October 2026 — see Open questions.
  • What can break: it's a server on the internet — patching, backups, monitoring are yours. Plain Caddy + static files is far less work than a PaaS; community accounting for Coolify on a CX23 is ≈ $6/mo cash plus 1–3 hours/month of your time.

DDNS + port-forwarding $0 marginal · Maximum exposure

Everything is yours — including all the failure modes. The N95 is the better box (x86, more headroom); the Pi 5 is ample for static files. In order of likelihood:

  • Your home IP is in public DNS — anyone can see where the site lives, and your connection is the DDoS target.
  • Residential upload is your global bandwidth — a 10 MB artifact to ten simultaneous visitors on a 20 Mbps uplink is a bad minute.
  • ISP terms — many residential contracts nominally prohibit servers; some ISPs block inbound 80/443 outright.
  • CGNAT — if your ISP has you behind it, port-forwarding is simply impossible, no matter what your router allows. CGNAT sits upstream of the router.
  • Power cut, ISP outage, router reboot, or an IP change faster than DDNS updates = downtime.

The highest maintenance of any option here, for the least benefit for static files specifically — you're running a public-facing server to do a job a CDN does free.

Tailscale Funnel $0 · Narrower than it looks

Available on all plans including free Personal (up to 6 users, non-commercial). Fine for a webhook, a demo, a temporary share. Disqualifying for a permanent personal site:

  • Listens only on ports 443, 8443 and 10000
  • The public name is only ever *.ts.net — your own custom domain is not possible
  • Funnel traffic is subject to “non-configurable bandwidth limits” for which Tailscale publishes no number
  • Still labelled beta

Unpublished bandwidth limits are the wrong foundation for files up to 10 MB that might get shared widely.

The pattern the community actually converged on: home services stay private (Tailscale for your own access); anything public is either on a free static host or behind a tunnel/VPS gateway — with Pangolin (self-hosted, WireGuard + Traefik + identity, on a cheap VPS) as the current enthusiast favourite for Tunnel-like behaviour without Cloudflare in the middle. Detail in Community.

04 · MOST FUNCTIONAL

When a file isn't enough

“Functional” matters only when an artifact needs something a file can't do: accept a form, remember a user, store state, run a cron job, or keep secrets. Ranked by the cost of the first paid step.

Cloudflare full stack $5/mo

Workers Paid: $5/mo minimum, including 10M requests and 30M CPU-ms, then $0.30 per million requests and $0.02 per million CPU-ms. Static-asset requests remain free and unlimited — your library stays $0 while the dynamic parts meter gently. Free tier for trying: 100,000 requests/day, 10 ms CPU per invocation.

  • D1 (SQLite): free 5M rows read/day, 100K written/day, 5 GB storage
  • KV on paid: $0.50/GB-mo stored, $0.50/M reads, $5/M writes
  • R2, Durable Objects, Queues (10K ops/day free), free Web Analytics
  • Forms = a Worker + D1/KV: code you own, no per-submission fee

Netlify & Vercel stacks

Netlify — Functions and Edge Functions, Forms, Identity (full features on Pro+), Blobs, and a Postgres-backed Netlify DB. Polished — but on Free, everything drinks from the same 300-credit pool, so adding functions makes the whole estate, static library included, pause sooner. Current credit-plan docs say form submissions are free on credit plans — legacy sources quote 100/month then paid; the discrepancy is flagged in Open questions, not resolved.

  • Vercel — Fluid Compute, Blob (1 GB on Hobby), Cron Jobs, Web Analytics (50K events/mo on Hobby), Speed Insights. The DX benchmark, and Pro has real spend controls.
  • But Hobby's non-commercial term means any work-adjacent artifact pushes you to Pro at $20/seat/month — 4× the Cloudflare step-up — and usage beyond the included credit is uncapped unless you set the hard limit.

Fly.io · Render · Deno · Coolify

  • Fly.io — real servers, no free tier. A shared-cpu-1x 256 MB always-on Machine ≈ $2.19/mo (512 MB ≈ $3.69), volumes $0.15/GB-mo, egress $0.02/GB (NA/EU) — but managed Postgres starts at $38/mo, the real price of “Fly + a database.” Free allowances ended October 2024; trial only now. Pick Fly for an actual long-running process, not HTML. (Index, via secondaries.)
  • Render — $7/mo to stop the sleeping. Starter web service $7/mo always-on, Postgres from $6/mo. Simple and predictable; the free tier's behaviour is the catch, not the paid tier.
  • Deno Deploy — do not build on this. On 2026-10-09 Deno announced its team is joining Cloudflare and Deno Deploy will operate for six months before shutting down ~April 2027, despite its pricing page still advertising Free (1M requests/mo, 20 GiB egress, 1 GiB KV) and Pro at $20.
  • Coolify / Dokploy on the VPS — the functional-ownership hybrid: your own Vercel-like dashboard on your €6 VPS, git-push deploys, databases and cron included. The cost is your ops time.
Sources: Deno Deploy pricing (index) · shutdown via Oct 2026 coverage at agentdeals.dev
05 · OBJECT STORAGE BASELINE

S3 vs. R2 vs. B2

Object storage is the wrong primary tool — no deploys, previews, redirects, or index page without extra machinery. But R2 is the right overflow tool, and the egress column decides what a viral link costs you.

Cloudflare R2AWS S3 (+ website hosting)Backblaze B2 (+ CDN partner)
Storage$0.015/GB-mo; free tier 10 GB-mo$0.023/GB-mo (first 50 TB, us-east-1)~$0.00695/GB-mo ($6.95/TB-mo); first 10 GB free
Egress$0 — free$0.09/GB after 100 GB/mo free (account-wide)Free up to 3× average stored/mo, then $0.01/GB; free & unlimited via Bandwidth Alliance partners (Cloudflare, Fastly, bunny.net)
RequestsClass A $4.50/M, Class B $0.36/M; free tier incl. 1M A + 10M B/moPUT $0.005/1,000; GET $0.0004/1,000Class A/B/C calls free
As a websitePublic bucket + custom domain works; no build step, no pretty index handling — it's a bucketThe original static-website mode; clunky (separate endpoint, DIY HTTPS via CloudFront at ~$0.085/GB)Not a website by itself; needs Cloudflare/Fastly in front — at which point the CDN is doing the hosting work

Cost calculator: a 5 GB library, a busy month

Drag the “served” slider to a viral month and watch which bill explodes. Assumptions are the provider figures in the table above; B2 assumes egress via a Bandwidth Alliance partner (Cloudflare), Pages assumes static assets only, and the VPS is flat until 20 TB.

Cloudflare Pages / Workers
$0.00
Unmetered static serving, any slider position
Cloudflare R2
$0.00
Inside the 10 GB free tier · egress $0
Backblaze B2 + Cloudflare
$0.00
First 10 GB free · egress free via partner
AWS S3
$0.00
Storage + egress past the 100 GB/mo free allowance
Hetzner CX23-class VPS
≈ €5.99
Flat — 20 TB included traffic (EU)
Netlify Free credits
—
Bandwidth alone, at 20 credits/GB vs. a 300-credit pool
Egress cost alone — serving 1 TB in a month
R2$0 B2 + CF$0 via partner VPSincluded (20 TB) S3≈ $81

S3 math: (1,024 − 100 free) GB × $0.09 ≈ $83 — chart rounds to ≈$81–83 depending on GB/GiB convention. The report's own viral example: a 10 TB month on S3 ≈ $890. R2's zero egress is the only storage pricing where a link going viral is a pleasant surprise instead of a bill.

06 · THE RECOMMENDATION

The permanent stack

For a personal site plus an ever-growing artifact library. Total running cost: the domain, and nothing else until you choose otherwise.

1

Your own domain — the only part that's truly yours

Registered anywhere reputable, DNS on Cloudflare (free). ~$10–20/yr for a .com (secondary sources). Every URL you ever share hangs off it, so you can change everything behind it without breaking a link.

2

Cloudflare Workers Static Assets (or Pages) as the host

One project per artifact — or one site with a folder per artifact and a hand-written index page as the library catalogue — deployed by drag-and-drop or wrangler deploy. $0, unmetered bandwidth, 25 MiB/file, 100 custom domains per project for when the library gets its own subdomain.

3

Keep the source of truth in git — and a copy at home

A repo on GitHub/GitLab/Codeberg (private is fine with Cloudflare) and a copy on the home server/NAS. The host becomes a cache you can abandon in an afternoon — the specific insurance policy against every rug-pull in the Community section.

4

R2 public bucket for overflow

Any file that outgrows 25 MiB, or that you want at a stable files.yourdomain URL, goes in R2 — 10 GB free, $0 egress.

5

At home: stay private

Keep the mini-PC/Pi on Tailscale for your own access. If you later want to serve something dynamic from home, expose it with Cloudflare Tunnel — never by opening ports. If you later want a fully-owned public stack, the €6 VPS + Caddy is a one-evening migration because the domain and the files were never trapped.

6

First paid step, only if needed: Workers Paid, $5/mo

Not a VPS, not Vercel Pro. That's the whole ladder.

The single easiest path, for a one-off: Netlify Drop — drag the file (or a folder/zip with it as index.html) and get a URL in under a minute, no account needed. Two caveats: an unclaimed drop sits behind a temporary password, so claim it by signing up for a clean public link — and once claimed it lives on the credit meter. The durable version of the same gesture, one signup more and zero meters forever, is Cloudflare Pages' Direct Upload. For an artifact you'll link to for years, do the Cloudflare version first and skip the migration. (Whether re-dropping a claimed Drop counts as a 15-credit production deploy is inferred from Netlify's published metering, not test-confirmed — see Open questions. Netlify's own guide: deploy your Muse artifacts to Netlify.)

07 · WHAT TO AVOID

Traps, specifically for this use case

Expiring / random share links as “publishing”

Cloudflare Quick Tunnels (new random hostname every run), ngrok-style free tunnels, any “share” URL with a session in it. Fine for showing someone something now; worthless as a durable URL.

Hosts that sleep or expire

Render free web services (sleep after 15 min idle) and free Postgres (expires after 30 days, deleted 14 days later). In 2026, free backend tiers sleep — static tiers don't. Plus Tiiny Host free's log-in-every-3-months rule and 3 MB cap, and Deno Deploy entirely (shutdown ~April 2027).

ToS traps

GitHub Pages and Vercel Hobby for anything commercial — both say so explicitly, and Vercel enforces by suspension (Community). Using Cloudflare's free CDN proxy as a file host for mostly non-HTML content (the §2.8 trap — Pages/R2 are the sanctioned products). Streaming media libraries through free Cloudflare Tunnel. Codeberg Pages for non-open-source content.

Uncapped meters without a hard spend limit

The $104K Netlify story happened on a free plan with no card on file. Prefer hosts whose free tier pauses rather than bills (Netlify's new credits and Vercel Hobby both pause; Cloudflare static simply has no meter) — and on any paid metered plan, set the hard budget cap on day one. Vercel Pro supports this; AWS infamously makes you build it yourself.

Your home IP as a public web address

Raw port-forwarding: IP exposure, residential uplink as your bandwidth ceiling, ISP server clauses, CGNAT, and your uptime. Sections 03 and Community have the full accounting.

File-size dead ends

Tiiny free caps at 3 MB — below most of your artifacts. GitHub Pages caps the site at 1 GB. Surge caps each project at 450 MB (index-only figure). Check the ceiling against a 10 MB worst case before you commit a library to it. Single-file deploy methods, tested: dev.to — 5 ways to put a single HTML file online.

08 · COMMUNITY — REPORTED, NOT VERIFIED

What people actually run — and what broke

Everything in this section is forum and blog evidence about experience, not current pricing — where a community source quotes a price, it may be stale (the Hetzner threads below are the proof). Method note: direct site:reddit.com searches returned no results in this research environment; Reddit material was reached via redd.it shortlinks, the tx.me r/SelfHosted mirror, and citations in other posts.

The migration arrow points one way: Netlify → Cloudflare

Flavio Copes moved his ~2,000-post blog in June 2026 and published a free-tier survey concluding the same. Milan Jovanovic's detailed write-up: Netlify $19/mo → $0, zero-downtime dual-deploy via GitHub Actions, R2 praised as a “hidden gem” — with stated trade-offs of “more eggs in one basket” (DNS + CDN + host all Cloudflare) and Pages' weaker build system, sidestepped by building in GitHub Actions. Individual bloggers describe making the same move specifically after reading the $104K story.

Ask HN: “What's the move for static site hosting in 2025?”

“Self-hosting.” · “nearlyfreespeech.net” · “I use [a] small commercial hosting service and just ftp my index.html… Works great.”

— and the OP's own follow-up: “looks like the answer is Netlify.” Read honestly, this small thread (2 points; four top-level replies, read in full via the HN Algolia API) shows the old-school FTP/shared-hosting answer is still alive — and that there is no single thunderous consensus thread. The consensus is visible in migration behaviour, not in any one discussion.

The $5-VPS romantics persist

One HN commenter prefers Cloudflare Pages over GitHub Pages because the backing repo can stay private; another runs a $5 VPS for his personal site (“I don't want to depend on GitHub or Cloudflare… $5 is indistinguishable from free”); there's agreement that Apache serving static HTML is nearly impossible to saturate on such a box — and that patching/security/alerting is the real cost — plus one commenter who would “rather not have a personal website than be beholden to some big company… [and] flaky automated ToS enforcement.”

NearlyFreeSpeech — the indie old guard's pick

Across multiple HN threads: rsync the files up, custom domain, .htaccess control, “transparent and predictable” pay-as-you-use pricing, and trivial exit because there's no proprietary tooling. The Privacy Guides forum recommends Neocities, Codeberg Pages, SourceHut Pages, Cloudflare Pages and NFSN in one thread — and notes Codeberg Pages is single-maintainer “best effort” (as of Nov 2024). Lobsters' SourceHut Pages thread shows users who left GitHub Pages for an open, contributable host, with strong anti-Cloudflare-centralisation sentiment.

Horror stories & gotchas

The $104,000 Netlify bill r/webdev → HN, Feb 2024

A free/Starter-plan static site carried a 3.44 MB MP3 that was downloaded repeatedly in a DDoS-like pattern — ~190 TB in about four days (retellings vary; one summary says ~60.7 TB in a day). Netlify's first offer was 95% off — still ~$5K. Only after the Reddit post was pushed to HN (~1,783 upvotes per usagepricing.com) did Netlify's CEO reply in-thread that the bill was waived entirely. The HN argument split between “no spend cap is a scam” and “the pricing was transparently uncapped.” This single story is the most-cited reason practitioners give for leaving metered hosts, and for preferring hosts that pause instead of bill.

AWS egress shock

HN's discussion of “A Surprise AWS Bill”: a publicly linked 14 GiB VM image served ~30 TiB and cost ~$2,600; commenters note the same traffic costs ~€150/month on dedicated servers and advise fronting storage with nginx on Hetzner/OVH rather than paying cloud egress. A 2026 podcast post-mortem recounts the classic variant: a 1 GB file posted to HN, ~50 TB of egress in a weekend, ~$4,500.

Source: HN 23956671

Cloudflare's §2.8 non-HTML trap

HN “Ok, Cloudflare I am leaving”: a user was suspended under the old terms clause limiting the free CDN to serving web pages — “video or a disproportionate percentage of pictures, audio files, or other non-HTML content” was prohibited through the free proxy (one cited case: 140 TB of archive files in 15 days). Directly relevant here: the free CDN in front of your own origin is not a file host; Pages/R2/Workers are the products where file serving is the point. (Cloudflare's CEO clarified in another HN thread that Workers' terms differ.)

Source: HN 34235237

Vercel Hobby suspensions

Vercel's own community forum, “Hobby Plan Account Suspended, Not Reset After 30 Days” (2025-09-24): a user's projects stayed suspended past the 30-day reset and needed a support case to restore; another thread reports a DDoS-triggered Hobby suspension that staff had to unpause manually. A practitioner pricing blog (gautamkhorana.com, Jan 2025 anecdote) reports a client hit with a surprise $380 Vercel bill in a “quiet” month from edge-function invocations plus an image-optimisation misconfiguration.

Exposing the house — lived experience

“The 'Cloudflare Anxiety' finally got to me” r/selfhosted

A year of Cloudflare Tunnel for Nextcloud/Jellyfin behind CGNAT “felt like magic” — then the author (u/ProfessionalOk4935; 87 votes, 86 comments) moved to WireGuard between home and a VPS with Nginx Proxy Manager. MTU/fragmentation debugging “cost me a few hours” of weird connection drops; latency ended up better than Cloudflare's routing; the summary line — he “traded set and forget for total control.”

Read via the tx.me r/SelfHosted mirror; the mirror shows the post as removed by a moderator, so treat details as community-reported.

Pangolin is the current r/selfhosted enthusiasm

“I love it, but I'm also a hypocrite. Centralized internet is bad but cloudflared is incredible.”

— Lemmy, “Cloudflare Tunnel?” thread

Pangolin (“I'm addicted to Pangolin”, u/ParadoxHollow) is a self-hosted Tunnel alternative — WireGuard + Traefik + identity access — that runs on your cheap VPS. The skeptic's point in the Lemmy thread: Pangolin doesn't remove the hard part, which is having “an affordable VPS with reasonable bandwidth” (“I use racknerd for VPS and it's about $35/year”). Practitioner blogs add the other side: XDA (2026-04-22) cites Tunnel latency for Home Assistant/streaming and ToS anxiety over streaming video (Jellyfin/Immich) — “penalties are rare, [but] an abuse report can take down my services at any time” — and moved to Tailscale + Caddy with services kept private. MakeUseOf (2026-10-23) objects to traffic being decrypted at Cloudflare's edge; its Pangolin trade-off: you now maintain a VPS and have two machines that can go down.

CGNAT & ISP clauses — the silent killers

Behind CGNAT, port-forwarding is impossible in principle; the practitioner patterns are exactly (a) Cloudflare Tunnel / Tailscale Funnel, or (b) a cheap VPS as a WireGuard “bridge” (one author's ISP static-IP alternative was ~€20/mo in Spain). ISP “no servers” clauses are real but unevenly enforced: an HN thread quoting Comcast, Verizon and AT&T terms shows all three nominally ban residential servers, while commenters report self-hosting on port 80 on Comcast for a decade unnoticed — enforcement arrives with traffic/attention, not with the server itself. Port 25 is blocked by ~99% of residential ISPs regardless.

One dramatic single-source blog claim — a forwarded home server found by Shodan within 4 days, a 42 Gbps flood, ISP blackholing for 48 hours — is unverified and included in the research only to illustrate the fear, not as fact.

The blunt consensus on hosting from home

“Static site hosted by someone else for free is the way to go. I wouldn't invite that sort of pain upon my network.”

— programming.dev, “Do you selfhost your own blog/website?”

Many there run a VPS under $40/yr and rsync static files to nginx; GitHub Pages is called “extremely feature-poor.” ServeTheHome's forums agree: “You're probably better off with a VPS for under $5 a month honestly,” don't self-host DNS, and use cloudflared if you do expose anything so your IP needn't be public. Careful home-hosters who do publish from home isolate services on an “untrusted” VLAN behind nginx + CrowdSec. And on Hetzner specifically: Lobsters user ine documents migrating DigitalOcean → Hetzner purely on cost, then — after “Hetzner had 2 non-trivial cost increases this year” — exploring a small-VPS reverse proxy back home, finding Cloudflare Tunnel “works very well” while disliking Cloudflare as MITM/big tech. Coolify, the community's self-hosted PaaS default, gets the honest accounting: ≈ $6/mo cash but 1–3 hours/month of ops time — “the cheapest option quietly bills you in pager duty instead of dollars.”

The free-tier rug-pull timeline

2022-11-28

Heroku free dynos / Postgres / Redis ended.

2024-05-20

Render cut free Postgres expiry from 90 to 30 days.

2024-10-07

Fly.io free allowances ended for new customers. Glitch and Cyclic shut down entirely; Railway's free tier became a $1/month credit after a trial.

~April 2027

Deno Deploy shuts down (announced 2026-10-09, team joining Cloudflare).

The pattern practitioners draw: static tiers have survived everywhere; free backends have been withdrawn, slept, or expired everywhere. Compiled by snapdeploy.dev/state-of-free-hosting and flaviocopes.com/hosting-free-tiers (Sept 2026). More migration colour: GitHub Pages → R2 for media · GitHub Pages → Cloudflare Pages.

Community consensus stack, synthesised: own domain + Cloudflare DNS → static artifacts on Cloudflare Pages / Workers Static Assets ($0, unmetered), sources kept in git (and optionally R2) so exit takes minutes → home services stay private on Tailscale; public home exposure, if any, via Cloudflare Tunnel or a cheap-VPS WireGuard/Pangolin gateway — not raw port-forwarding → a ~€6 VPS + Caddy (or Coolify) as the “mine, flat-price, no meters” fallback. That is also this report's recommendation in Section 06, reached independently from the provider data.

09 · COULD NOT VERIFY

Open questions, stated plainly

Everything the research could not nail down against a primary page. Nothing here is load-bearing for the recommendation — but you should know where the floor is soft.

Surge — index-only

The provider's pricing page could not be opened in the research environment (a direct open failed with a policy block; it was not retried). All Surge figures are from the search index of that page and older secondaries.

Hetzner — partial live check

hetzner.com/cloud was visited live: the Shared/Cost-Optimized lines did show “Currently not available,” but rendered price figures were garbled/incomplete. CX23 pricing (€5.49 excl. VAT/IPv4; €5.99 incl. IPv4) rests on multiple agreeing October 2026 third-party snapshots plus Hetzner's own price-adjustment notices. Availability fluctuates; check the console before committing.

Vercel Pro overage rates

Hobby limits and the non-commercial term were verified live on vercel.com/pricing (2026-10-30). The Pro overage numbers (1 TB included then $0.15/GB; 10M edge requests then $2/M) come from October 2026 secondary comparisons that cite that page.

Netlify Forms — discrepancy flagged, not resolved

Current credit-plan documentation says form submissions are free/unlimited on credit plans; legacy documentation and many secondary sources quote 100 submissions/month followed by a paid upgrade.

Netlify Drop credit cost — inferred

That re-dropping/re-deploying a claimed Drop counts as a 15-credit production deploy is inferred from Netlify's published metering, not confirmed by a test deploy (no account was created, per research constraints).

Also not separately verified

Reddit access (direct search/browse returned no usable results; claims come via redd.it shortlinks, the tx.me mirror, and citations, labelled community-reported throughout). Domain registrar pricing (~$10–20/yr for .com), home electricity cost, and Firebase Hosting limits were not verified against primary pages — Firebase appears only inside free-tier roundups. Two HN threads captured from search snippets in an earlier pass, without item URLs, were not used as load-bearing evidence.

10 · SOURCES

Sources

Provider pages — verified live (opened directly, 2026-10-30)

Provider pages — via search index of the provider's own pages/docs, Oct 2026

Secondary / comparison sources (index, Oct 2026)

Community sources (Section 08 — reported, not verified)