Free HTML hosting for a folder of files, a Vite or React build, or a site with an API behind it. Connect the repository, and SnapDeploy serves it with nginx on its own HTTPS address. No Dockerfile needed for plain HTML.
Free tier: 4 containers, 100 hours a month, 10 deploys a day. No credit card. Always-On from $12 a month for a site that must never pause and needs its own domain.
Last verified 28 September 2026 against the free-tier docs, the deployment code and each competitor's own limits page.
HTML hosting means a server somewhere sends your files, HTML, CSS, JavaScript and images, to anyone who opens the address. Nothing runs on the server; the browser does the work. That is why HTML website hosting is the cheapest hosting there is, and why several companies give it away.
Two kinds of free static hosting exist. A pure static host such as GitHub Pages or Cloudflare Pages copies your files to a content network and serves them forever, never sleeping. A container host like SnapDeploy runs a small web server, nginx, inside a container that you control. The container can sleep when idle on the free tier, which the pure hosts never do.
So the honest rule: if your site is only files and nothing else, a pure static host is the better free option. Choose a container when the site needs something next to it: an API, a database, a server-rendered page, a private repository without a paid GitHub plan, or an nginx configuration of your own. On SnapDeploy those all live in one account, with one address each, and the free tier covers four of them.
All three end the same way: an nginx container as the HTML host, on its own HTTPS address, redeployed on every push.
A repository with an index.html at its root and no other stack is detected as a static site. The build copies the files into an nginx image, serves them on port 80, and answers any unknown path with index.html, so single-page apps with client-side routing work as they are.
Nothing to configure. A /health path is added for the platform's health check.
A project with a build tool (Vite, webpack, Parcel, Rollup) but no server framework and no start script is treated as a static build. The build runs, the output folder is found automatically (dist, build or a custom Vite outDir), and nginx serves it.
Public-prefixed variables (VITE_, REACT_APP_, NEXT_PUBLIC_) set on the container are passed into the build. Works for React, Vue, Svelte, Angular and static exports of Next.js and Nuxt.
When you want your own nginx configuration, redirects, custom headers, a different web server or basic authentication, commit a Dockerfile and it is used as written. Two lines are enough to start.
FROM nginx:alpine
COPY . /usr/share/nginx/html/
EXPOSE 80
Using the GitHub path. No command line is needed for a plain site.
Place index.html at the root, with your CSS, JavaScript and images beside it or in folders. Public or private repositories both work; the platform reads private ones through your GitHub authorisation.
Sign up with an email address or a GitHub account, no card. Pick the repository and the branch. The detector recognises the static site and generates the nginx image for you.
The build streams to the dashboard. A plain HTML site produces a small image and is usually live within a few minutes; the cap is 60 minutes. The address is https://<name>.containers.snapdeploy.app, with the certificate already in place.
Every push to the linked branch rebuilds and redeploys. The new copy starts beside the old one and traffic moves only after it passes its health check, so a broken push leaves the previous version serving.
Static website hosting free of charge has one real limit here: running time. The same rules apply as to any container; the full list is on the free-tier page.
The free static site hosting limits of the main options, read from each provider's own limits or pricing page on 28 September 2026. Use it to pick the right kind of host, not just the cheapest.
| Host | Free bandwidth | Builds or deploys | Custom domain on free | Sleeps? | Card | The catch |
|---|---|---|---|---|---|---|
| SnapDeploy | Not metered; 100 container-hours/month of running time | 10 deploys/day | Always-On only ($12/mo) | Yes, after 15 min idle | No | Sleep on free; built for sites with an API or a Dockerfile next to them |
| Cloudflare Pages | Unlimited requests and bandwidth | 500 builds/month, 1 at a time | Yes, 100 per project | No | No | 20,000 files, 25 MiB per file; server code counts against Workers limits |
| GitHub Pages | 100 GB/month soft limit | 10 builds/hour soft limit | Yes, with HTTPS | No | No | Public repositories only on GitHub Free; private repositories need Pro or Team; 1 GB site |
| Netlify Free | 300 credits/month; bandwidth costs 20 credits per GB | A production deploy costs 15 credits | Yes, with SSL | No | Not stated | Credit-based: deploys and bandwidth draw from the same 300 |
| Vercel Hobby | 100 GB/month | 100 deployments/day | Yes, 50 per project | No | Not stated | Non-commercial use only; no repositories owned by a Git organisation |
| Render static sites | 5 GB/month on the Hobby workspace, then $0.15/GB | Counted in workspace pipeline minutes | Yes, 2 per workspace | No (static) | No | Small bandwidth cap; 25 services per workspace |
| Firebase Hosting | 360 MB/day (about 10 GB/month) | Not limited by count | Yes, with SSL | No | No | 10 GB storage; the daily transfer cap is low for media-heavy sites |
Sources: developers.cloudflare.com (Pages limits, updated 5 Sep 2026) and cloudflare.com/products/pages; docs.github.com (GitHub Pages limits and "About GitHub Pages"); netlify.com/pricing; vercel.com/docs/limits and fair-use guidelines (updated 14 and 16 Sep 2026); render.com/pricing and render.com/docs/free; firebase.google.com/pricing. Free HTML web hosting offers change often; the date above is the one that counts.
The cases where people move an HTML site into a container, from support requests and deploy logs.
Yes. The free tier runs up to 4 containers with 100 container-hours a month and 10 deploys a day, with no credit card. A static site is one container. It sleeps after 15 minutes without visitors and wakes in about 60 seconds when someone opens it in a browser; Always-On at $12 a month removes the sleep and adds a custom domain.
No. A repository with an index.html at its root is detected as a static site and served by nginx automatically. A Vite, webpack, Parcel or Rollup project with no server framework is built first and its output folder is served the same way. Add your own two-line Dockerfile only when you want a custom nginx configuration.
Yes. Every free container sleeps after about 15 minutes without traffic, including a static site, and the first visitor afterwards waits about 60 seconds. A pure static host such as GitHub Pages or Cloudflare Pages never sleeps, so for a site with nothing behind it those are the better free option. Always-On keeps a SnapDeploy site up 24/7.
Yes. A project that has a build tool but no server framework and no start script is treated as a static build: the build runs, the output folder (dist, build or a custom Vite outDir) is detected, and nginx serves it. Public-prefixed build variables such as VITE_ and REACT_APP_ set on the container are passed into the build.
Custom domains come with Always-On, from $12 a month per container, with the certificate issued automatically. On the free tier the site is reached at its containers.snapdeploy.app address over HTTPS.
Yes. Build an nginx image locally, run docker save, and upload the tarball; or point at a public image by name. GitHub is the easiest path because a push redeploys the site, but it is not required.
A static site cannot process a form by itself. Deploy a small API container next to it, on the same account, and have the form post to that container's HTTPS address. Both fit inside the free tier's 4 containers.
Bandwidth is not metered or billed. The shared domain applies a fair-use rate limit of 100 requests a minute per visitor IP address to one app; normal sites stay far below it. What is limited on the free tier is running time: 100 container-hours a month.
Push a folder, get an HTTPS address. Free tier, no credit card. Always-On from $12 a month when it must never pause.
Deploy Free TodayThe first managed container PaaS to offer a one-time 24-hour Always-On pass under $5. Unlimited deploys + Always-On for one Small (512 MB) container — including WebSockets & real-time apps. No subscription, no auto-renewal. Stack two for 48 hours.
Need a managed database too? DB Sprint Pack — $1 / 12h for Postgres, MySQL, MariaDB, Mongo, Redis, or RabbitMQ.