Deploying your first site for free: Vercel, Netlify, Cloudflare Pages, or GitHub Pages
Code5 min read · 27 September 2026
You’ve got a project running on your machine, and you want to show it to someone other than yourself. Good news: putting a site online for free has never been easier, as long as you understand what each host actually means by “free.” Here’s a comparison of four options students run into constantly, with the numbers and conditions checked against their official pages.
What’s actually free, and under what conditions
Vercel (Hobby plan)
Vercel’s Hobby plan is free and includes, per month, 100 GB of data transfer, 1 million edge requests, 1 million function invocations, 4 hours of active CPU, up to 200 projects, and 100 deployments a day. The detail not to miss: according to the official documentation, “the Hobby plan restricts users to non-commercial, personal use only.” That’s not just marketing language: if you go over your usage limits, you generally have to wait 30 days before you can use that feature again, and you can’t buy extra usage on this plan. Commercial use requires upgrading to Pro ($20 per user per month).
Netlify
Netlify’s free plan is advertised as “$0 forever,” with a monthly cap of 300 credits. Those credits get spent across several meters at once: production deploys, function compute time, bandwidth, web requests, and, more recently, AI inference. It’s a hard cap: once you hit it, you wait until next month. In exchange, the free plan includes “unlimited deploy previews,” handy for testing a branch before merging it.
Cloudflare Pages
Cloudflare draws a sharp line between two use cases. For a purely static site (compiled HTML, CSS, JS), hosting is unmetered for both bandwidth and request count: nothing to watch there. What is limited is builds (500 a month), files per deployment (20,000 files, 25 MiB per file max), and projects per account (100, with up to 100 custom domains per project). If your site uses Pages Functions (code that runs on demand), those calls count against Cloudflare Workers’ free plan, capped at 100,000 requests a day.
GitHub Pages
GitHub Pages is free, but built for personal sites, blogs, documentation, or student projects, not commercial activity: the official documentation states the service “is not intended for or allowed to be used as a free web-hosting service to run your online business, e-commerce site, or any other website that is primarily directed at either facilitating commercial transactions.” On the technical side: the source repository and the published site each have a recommended limit of 1 GB, bandwidth has a soft limit of 100 GB a month, and site builds are soft-limited to 10 per hour (unless you publish through your own GitHub Actions workflow).
Deploying from GitHub: the broad strokes
For Vercel, Netlify, and Cloudflare Pages, the process is nearly identical: connect your GitHub account, pick the repository to import, let the platform auto-detect your framework (or specify the build command and output directory yourself), and confirm. From there, every git push to the connected branch triggers a new automatic deployment, and other branches or pull requests get their own separate preview you can check before merging.
GitHub Pages works differently: either you publish the content of a branch or folder directly (/docs, for instance), or you write your own GitHub Actions workflow that builds the site and then publishes it. It takes a bit more setup upfront, but it’s still entirely free and gives you full control over the build steps.
Environment variables: where to hide them
An environment variable stores a sensitive or context-dependent value (an API key, a database URL) without writing it in plain text in your code, and therefore never in your Git repository. Each platform has its own place to declare them:
- Vercel: in the project settings, under “Environment Variables.”
- Netlify: “Project configuration > Environment variables” in the UI, with the option to import directly from a
.envfile. - Cloudflare Pages: in the Workers & Pages dashboard, on your project, under “Settings > Environment variables” (or through the Wrangler command-line tool).
- GitHub Pages: has no environment variables in the traditional sense, since it’s static file hosting with no server-side code execution. If you build your site through GitHub Actions before publishing it, sensitive values instead go into the GitHub repository’s “secrets,” used during the build workflow.
Custom domain names
All four platforms accept a domain name you bought elsewhere (from any registrar), on top of the free address they provide by default. On GitHub Pages, the process is well documented: you enter your domain in the repository settings (which creates a CNAME file at the root), then add an ALIAS, ANAME, or A record with your DNS provider (and optionally AAAA for IPv6). The official documentation recommends verifying your domain before adding it to the repository, to reduce the risk of someone else claiming it if you ever stopped using it. On Vercel and Cloudflare Pages, adding a domain happens directly from the project dashboard, with a custom-domain allowance that’s generous enough for a student site (up to 50 per project on Vercel’s Hobby plan, up to 100 on Cloudflare Pages).
Which one to pick
There’s no universal answer, only use cases. A fully static site (portfolio, documentation, project page) published from a GitHub repository you already manage: GitHub Pages does the job with no surprises. A project built with a modern framework (Astro, Next.js, Vite…) where you want automatic previews on every pull request: Vercel or Netlify are built for exactly that, keeping in mind that Vercel’s free tier is explicitly reserved for non-commercial, personal use. A mostly static site that might need occasional serverless functions later, with static bandwidth that isn’t metered: Cloudflare Pages holds up well. Either way, for a student or personal project, all four free tiers are more than enough: the real deciding factor is which tool you’re most comfortable configuring.
Key takeaways
- Vercel Hobby: generous quotas, but explicitly reserved for personal, non-commercial use; going over a limit means a pause of up to 30 days.
- Netlify: free “forever,” with a hard cap of 300 credits a month shared across several meters (bandwidth, compute, deploys, requests, AI).
- Cloudflare Pages: unmetered bandwidth and requests for a static site; limits apply to builds (500/month) and files (20,000/deployment).
- GitHub Pages: free but explicitly not meant for commercial activity; 1 GB recommended per site, 100 GB/month bandwidth as a soft limit.
- Deploying from GitHub: import plus auto-detection on the first three; a branch or an Actions workflow for GitHub Pages.
- Environment variables: a dedicated spot in each project’s settings, never committed into the code.
- Custom domain: managed from the dashboard on the first three; a CNAME file plus a DNS record on GitHub Pages, verified before adding.
Sources
- Vercel Hobby Plan — Vercel Docs · accessed 27 September 2026
- Pricing and Plans — Netlify · accessed 27 September 2026
- Limits — Cloudflare Pages docs · accessed 27 September 2026
- GitHub Pages limits — GitHub Docs · accessed 27 September 2026
- About custom domains and GitHub Pages — GitHub Docs · accessed 27 September 2026
- Environment variables overview — Netlify Docs · accessed 27 September 2026






