Every time I ship a new side project, the same question comes up twice: once from me, and once from a developer in my DMs — "where should I host it for free, and can I use my own domain?" For years I answered that question by paying for a VPS and a control panel, because the free options felt like toys. Then I spent a month benchmarking the free tiers properly, and I found out I had been paying for things the free tiers now give away.
If you build Flutter web apps, React prototypes, or plain static sites, you do not need to pay for hosting. What you need is to know which free tier is honest about its limits. A Flutter web build is nothing more than a folder of static files — HTML, JS, CanvasKit, and assets — which means any of the platforms in this comparison can serve it. That fact is the whole reason the comparison exists: the platforms all do the same core job, and the differences are in the details that only bite you later.
This is a 2026 comparison of five free hosting platforms, scored against the criteria that actually matter: custom domain support, free-tier limits, deployment workflow, extra features, and the catch that no marketing page mentions.
The Criteria
Before any scores, here is how I weight each criterion. Your mileage will differ, but these are the ones that cost me money or time in practice:
| Criterion | Why it matters | Weight |
|---|---|---|
| Custom domain (free) | The entire point of this article | 30% |
| Free-tier limits | Bandwidth, build minutes, storage caps | 25% |
| Deployment workflow | Git push vs. drag-and-drop vs. CLI | 20% |
| Extra features | Edge functions, previews, analytics, serverless | 15% |
| The catch | Hidden limits, lock-in, or surprise charges | 10% |
Scores are out of 10 per criterion, and I have actually run all five of these in production or side-project traffic over the last two years. No criterion scores are invented; where I have not hit a limit, I say so.
GitHub Pages
The oldest and still the most reliable free option. It serves static files from a gh-pages branch or the docs folder of a repository, and it has been quietly doing this since 2008.
- Custom domain: 10/10. Free, with automatic HTTPS via Let's Encrypt and a CNAME file in your repo. One-line setup.
- Free-tier limits: 9/10. 1 GB of site storage and 100 GB of bandwidth per month. That is roughly 100,000 page loads of an average site. You will not hit it with a side project.
- Deployment workflow: 9/10. Push to the branch, and it deploys. I use a GitHub Action to build my Flutter web app and push the
build/weboutput automatically. - Extra features: 4/10. None. No serverless functions, no edge anything. If your project needs a backend, this is not the place.
- The catch: 6/10. It is GitHub-only, and it is static-only. The moment you need an API route or dynamic behavior, you are adding another service.
Verdict: the best place to start, the worst place to grow.
Netlify
Netlify took the static-site concept and added deploy previews, forms, and functions. It is the platform I use when a client's landing page needs a contact form without a backend.
- Custom domain: 10/10. Free, automatic HTTPS, and by far the smoothest DNS handling of the group.
- Free-tier limits: 8/10. 100 GB bandwidth and 300 build minutes per month on the free plan. Build minutes are the constraint — every deploy of a Flutter web app eats some of them.
- Deployment workflow: 9/10. Git push or a drag-and-drop folder. The drag-and-drop path means a non-developer teammate can deploy.
- Extra features: 9/10. Forms, edge functions, split testing, deploy previews on every pull request. This is the deepest free feature set of the group.
- The catch: 8/10. The free tier is genuinely generous, but the pricing page makes you work to find the limits, and hitting the build-minute cap mid-release is a bad day.
Verdict: the best all-rounder for sites that are slightly more than static.
Vercel
Vercel is the default for Next.js, but it serves any static folder fine — including a Flutter web build, which I have done for a client. Its selling point is the edge platform underneath everything.
- Custom domain: 10/10. Free, automatic HTTPS, instant DNS.
- Free-tier limits: 7/10. 100 GB bandwidth and 100 GB-hours of function execution per month, with the free tier for hobby use. The caveat is that production traffic is expected to be paid — the terms are stricter about commercial use than Netlify's.
- Deployment workflow: 9/10. Git push, plus a preview URL for every branch. The preview system is the best in the group.
- Extra features: 9/10. Edge functions, edge config, analytics that just works. If your stack is JavaScript, this platform is unfair.
- The catch: 7/10. The commercial-use terms on the free tier are the vaguest of the group, and the build image is slow for non-JavaScript frameworks.
Verdict: the winner for JS and Next.js projects; good but not special for pure static Flutter builds.
Cloudflare Pages
Cloudflare Pages bundles static hosting with Cloudflare's network, which means your site is served from ~300 locations and your TLS is free forever. It is the fastest option for a global audience, including in countries where other CDNs are slow.
- Custom domain: 10/10. Free, automatic HTTPS, and — because the domain lives inside Cloudflare — DNS changes propagate in seconds.
- Free-tier limits: 10/10. Unlimited bandwidth and unlimited requests on the free tier. This is the only platform in the group without a bandwidth number on its free plan.
- Deployment workflow: 8/10. Git push works, but the build system is less forgiving than Netlify's for Flutter web, and I have needed a custom build command more than once.
- Extra features: 8/10. Pages Functions, redirects, and the whole Cloudflare suite you can bolt on.
- The catch: 9/10. The free tier is the most generous in the group, but Pages Functions free usage is capped by request counts per day, and the documentation assumes you know Cloudflare already.
Verdict: the best free tier on the internet, with the highest setup learning curve.
Firebase Hosting
Firebase Hosting is Google's static host, and it is the option mobile developers already half-own because they are using Firebase for auth and analytics anyway.
- Custom domain: 9/10. Free and automatic, but DNS setup runs through Google Domains or a manual DNS records flow that is clunkier than the others.
- Free-tier limits: 8/10. 10 GB storage and 360 MB of transfer per day. The daily transfer cap is lower than the others and refreshes daily, which catches people who host media-heavy sites.
- Deployment workflow: 7/10. There is no git-push-to-deploy; you use the Firebase CLI (
firebase deploy). Fine for one person, friction for a team. - Extra features: 8/10. Cloud Functions integration, and it plays perfectly with a Flutter or Android app backend.
- The catch: 7/10. The daily transfer cap and the CLI-only workflow are the two things that surprise people.
Verdict: the right choice when your app already lives in Firebase.
The Comparison Table
| Criterion (weight) | GitHub Pages | Netlify | Vercel | Cloudflare Pages | Firebase Hosting |
|---|---|---|---|---|---|
| Custom domain (30%) | 10 | 10 | 10 | 10 | 9 |
| Free-tier limits (25%) | 9 | 8 | 7 | 10 | 8 |
| Deployment workflow (20%) | 9 | 9 | 9 | 8 | 7 |
| Extra features (15%) | 4 | 9 | 9 | 8 | 8 |
| The catch (10%) | 6 | 8 | 7 | 9 | 7 |
| Weighted total | 8.6 | 8.9 | 8.6 | 9.0 | 7.9 |
The Shared Pitfalls Nobody Warns You About
Across all five platforms I hit the same three traps, and none of them are the host's fault:
-
Putting the custom domain on late. Free subdomains are fine for testing, but I have watched projects get shared and linked on a
.vercel.appURL, then moved to a real domain and lost the accumulated links and search equity. Put the custom domain on before you promote anything to anyone. - Ignoring build minutes. For Flutter web specifically, every deploy rebuilds CanvasKit and the framework assets, which eats build minutes on Netlify and Vercel far faster than a plain static site. Cache aggressively or your monthly allowance vanishes mid-sprint.
- Trusting the marketing page about bandwidth. Netlify and Vercel publish their caps clearly; GitHub Pages and Cloudflare are vaguer about what they will tolerate. Read the free-tier docs before you link a media-heavy project to any of them.
The One Thing That Has Not Changed
Free hosting has gotten more generous every year since I started, but the single constraint has stayed constant: your time. The cheapest host in the world is expensive if it makes you debug builds at midnight. My personal default today is Cloudflare Pages for anything that needs global reach, and GitHub Pages for anything that must simply stay alive with zero care. Both are free, both take a custom domain in minutes, and neither has ever sent me a surprise invoice.
The Verdict
The honest answer depends on your stack, and that is not a cop-out — it is the decision rule:
- Static-only, zero maintenance: GitHub Pages. Nothing beats a CNAME file and a git push.
- Landing page with a form, or a team deploying often: Netlify. The forms and previews alone are worth it.
- Next.js or heavy JavaScript: Vercel. It is not a fair fight.
- Global audience, want the most free headroom: Cloudflare Pages. Unlimited bandwidth on the free tier is real.
- Already using Firebase for your app: Firebase Hosting. One ecosystem, less to learn.
The one universal rule I give every developer who asks: put the custom domain on it from day one. Free hosting without a real domain is an experiment; free hosting with your own domain is a product. A .netlify.app or .vercel.app subdomain signals "temporary," and I have watched clients discount demos hosted on free subdomains.
All five of these platforms are free, all five support custom domains with automatic HTTPS, and all five will serve a Flutter web build without complaint. Pick the one that matches the stack you will keep building on, set up the domain on day one, and stop paying for hosting while your projects are still at the "prove it works" stage. When a project outgrows the free tier, the migration path is the same for all five: keep the same static files, move the DNS, and the new host picks them up in an afternoon.
*Gulshan Yad
Top comments (0)