An HTML5 game sitting on a hard drive does not really exist. Until it has an address, nobody can play it in one click, add it to a portfolio or submit it to a jam. The good news is that a web build needs almost nothing to live online: no database, no PHP, no application server. Static files, a URL, HTTPS.
The bad news is that “almost nothing” is not “nothing”. Depending on the engine, the size of the build and what you want to do with it, the three most common free hosts – itch.io, GitHub Pages and Netlify – are far from equivalent. We use all three at the studio, on different projects, and here is what really separates them.
What an HTML5 game asks of its host
A web export is a folder: an index.html, one or two JavaScript files, often a .wasm, and a pile of assets. Any static file server can deliver it, under three conditions. HTTPS first, because fullscreen, pointer lock, the Gamepad API and audio start-up all depend on it in recent browsers. MIME types next: a .wasm served as text/plain blocks streaming instantiation and stretches load times. Compression last, gzip or Brotli, because a Godot or Unity export easily weighs tens of megabytes uncompressed.
The special case of multithreaded builds
If the engine uses threads – true of Godot 4 exports with threaded rendering and of many Unity WebGL builds – the browser requires the page to be cross-origin isolated. In practice the server must return two headers, Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp, without which SharedArrayBuffer stays unavailable and the game refuses to start. That single constraint rules out one of the three hosts below.
itch.io, a storefront before it is a host
On itch.io you upload a ZIP archive containing an index.html at its root, tick the option marking the file as playable in the browser, and the platform handles the rest. It is the shortest path from a build to a playable link. It is also the only one of the three that brings an audience: product page, devlogs, comments, view statistics, jam entry and donations are all built in.
The stated limits for a browser-playable build are 1,000 files, 200 MB per file and 500 MB unpacked. Comfortable for a 2D game, much tighter for a 3D project. Beyond that, the butler command line tool pushes far heavier builds.
The trade-off is that the page is not yours. The URL stays on username.itch.io, the layout follows a template, and the search visibility benefits the platform first. To show work to a client or feed a professional site, it is the wrong medium.
GitHub Pages, when the repository becomes the site
If the project is already versioned, GitHub Pages costs almost no extra effort: push the build folder, turn Pages on in the repository settings, and the game is live seconds later over HTTPS, with a custom domain available at no cost.
The documented limits are generous for a game: 1 GB for the published site, 100 GB of bandwidth per month and around ten builds per hour. These are soft limits – GitHub warns or throttles rather than bills.
The real obstacle lies elsewhere. GitHub Pages does not let you set custom HTTP headers. No COOP, no COEP, therefore no cross-origin isolation and no SharedArrayBuffer: a multithreaded Godot 4 export or a threaded Unity WebGL build simply will not start. The request has come back regularly in GitHub community discussions for years without an answer. For a pure JavaScript game, with Phaser for instance, the question never arises and Pages does the job very well.
Netlify, continuous deployment and its new pricing
Netlify accepts both a drag-and-dropped build folder and a directly connected Git repository, with automatic redeployment on every commit. Above all, it lets you write whatever headers you need, through a _headers file placed in the published folder or through netlify.toml. It is the simplest way to serve a properly isolated multithreaded build.
Watch the change of model, though. Accounts created since September 2025 moved to a credit system: 300 credits per month on the free tier, a production deploy costing 15 credits and bandwidth 20 credits per gigabyte. In practice that means roughly fifteen gigabytes of traffic or about twenty deploys, as a hard cap. Older accounts keep the previous formula, 100 GB of bandwidth and 300 build minutes. For a web game weighing tens of megabytes, the arithmetic is worth doing before you share the link widely.
Which one to choose for your project
For a jam or a first release, itch.io is the obvious choice: the page exists in ten minutes, the audience is already there, and nobody expects a branded URL. For a portfolio, a prototype shown to a client, or a game you want indexed under your own domain, GitHub Pages is hard to beat, provided the build does not need cross-origin isolation. As soon as the engine requires COOP and COEP, or you want clean continuous deployment, Netlify becomes the only comfortable option of the three – while keeping an eye on consumption.
Nothing forces you to pick just one, either. We regularly publish the same version in two places: on itch.io for visibility and feedback, on our own domain for the portfolio. The build is identical, only the context changes. And if you are wondering what automation can genuinely take over in this pipeline, we covered it in AI and indie games: what you can really automate in 2026.
The mistakes we see most often
The first is the malformed archive: index.html ends up in a subfolder instead of the ZIP root, and the platform shows a blank page. The second comes from absolute paths. A project-level GitHub Pages site is served from /repository-name/, so an asset requested at /assets/sprite.png is looked up at the domain root and fails silently. You need relative paths, or a base configured at export time.
Then come mixed content – a font or a sound requested over http:// from an https:// page is blocked with no visible warning –, forgotten compression, which turns a three-second load into a thirty-second wait, and the missing mobile test, where touch input and available memory do not forgive assumptions made at a keyboard.
Going further
Putting an HTML5 game online takes ten minutes once you understand what the browser expects from the server. The important work happens earlier, in how the build is prepared: relative paths, compressed assets, headers that match the engine. If you are starting from scratch, our guide to building a 2D game with Phaser 4 covers the development side, and HTML5 and game development revisits the basics of the format. For indie release news, Subway Press is worth following.







0 Comments