Host your Phaser game build online for free
Drag your Phaser build folder or a ZIP (up to 25 MB and 100 files) onto ship.page for a free HTTPS link to your game, no signup. A ZIP can unpack to 100 MB, and links stay online for 30 days, or 90 days when you claim them with a free account.
A file. A folder. A fresh start.
Your static site, one link away.
Uploading publishes your file. The link is public but unlisted, not password-protected, so leave out secrets and confidential content.
- Current Phaser version on npm (October 2026)
- 4.2.1
- Free ZIP limit (100 MB unpacked, up to 100 files)
- 25 MB
- Online with no account; 90 days with a free account
- 30 days
- Pro plan for permanent links, 100 MB ZIPs and updates
- $4/mo
How to put a Phaser game online
Build your Phaser project for production
If you started your project with npm create @phaserjs/game@latest and picked the Vite template, run npm run build in your terminal. Vite compiles your code and copies your assets into a dist folder. If you use a simple script tag or import map with no bundler, skip this step.
Check your output folder or pack a ZIP
Make sure index.html sits at the root of the folder you plan to upload, alongside your sprites, audio and JavaScript bundles. Direct folder uploads fit up to roughly 7 MB of files (encoded in a single 10 MB request), so if your game assets are larger, compress the dist folder into a .zip file up to 25 MB on the free plan.
Drag the folder or ZIP onto ship.page
Drop your dist folder or .zip file into the uploader on this page. If your ZIP has a single top-level dist folder inside it, ship.page unwraps it automatically so index.html becomes your homepage.
Share your live link or QR code
Your game is live in seconds on its own HTTPS subdomain. Copy the URL to send to players or download the PNG QR code from the success screen to test on your phone.
What to upload for each Phaser project setup
| Project setup | Build command | Upload this |
|---|---|---|
| Phaser Vite template | npm run build | The dist folder (or a ZIP of dist) |
| Other bundler templates (Webpack, ESBuild, Rollup, Parcel) | See template README | The production output folder named in your template README |
| Script tag or import map (no build) | None | Your project folder with index.html at the top |
Why does my Phaser game show a black screen when I open index.html?
When you double-click index.html on your computer, the browser opens it using the file:// protocol instead of http:// or https://. Phaser's documentation explains that you need a web server because browsers lock down file:// pages and block them from loading images, audio, JSON and JavaScript.
When the browser blocks your scene assets or scripts, Phaser cannot finish preloading and leaves you staring at a blank canvas. Uploading your build to free HTML5 game hosting serves every file over HTTPS, which satisfies browser security rules so your sprites, sounds and levels load normally.
What do I upload from npm create @phaserjs/game@latest?
Phaser 4 is the current major version (phaser 4.2.1 on npm in October 2026), and the official way to start a project is npm create @phaserjs/game@latest. It offers official templates for Vite, Webpack, ESBuild, Rollup, Parcel, Import Map and Bun, plus React, Vue, Angular, Svelte, Next, Solid and Remix variants.
Never upload your whole project root with node_modules or raw TypeScript files. In the official Vite template, running npm run build creates a dist folder, and the template README says to upload all of the contents of dist to a public web server, as with any Vite build. If you picked Webpack, ESBuild, Rollup, Parcel, Bun or a framework variant, check your template README for the exact build command and output folder.
Tip: If your game has no build step and loads Phaser with a script tag or an import map, drag your project folder straight in with index.html at the top.
Which asset mistakes break a Phaser build online?
A game that runs on your local dev server can still miss an image or sound online if your file paths or build settings do not match how static hosting works. Check these rules before you share your HTML game with testers:
- Match exact file casing: paths on ship.page are case-sensitive, so loading assets/Player.png will fail if the file on disk is named assets/player.png.
- Use relative paths in your loader: load assets with paths like assets/hero.png rather than absolute paths that assume a specific server subfolder.
- Turn off pre-compression plugins: files are served as they are with no Content-Encoding header, so do not pre-compress your bundle into .br or .gz files unless you include a JavaScript decompressor.
- Zip big folders: browser folder uploads go up in one 10 MB request (roughly 7 MB of raw files), and a ZIP upload takes up to 25 MB on the free plan.
- Use hash routing for wrapper UIs: if you wrapped Phaser in React, Vue or another framework with client-side routes, use hash routes (#/settings) because there is no single-page-app fallback.
What are the free limits, and can I update my game?
On the free tier, each upload accepts up to 100 files and a 25 MB ZIP (100 MB unpacked). Unclaimed links stay online for 30 days, or 90 days when you sign in with Google or an email link to claim them. Every page is sent with a noindex header and is unlisted, so only people with your URL can play your prototype.
A free upload cannot be edited in place; uploading a new build gives you a new URL. If you want to push patches to the same link, password-protect a private playtest, or upload larger asset packs, see pricing for the $4 a month Pro plan, which keeps links live forever, raises limits to 100 MB ZIPs (400 MB unpacked) and 10,000 files, and removes the closable ship.page badge. The $19 a month Team plan adds a vanity subdomain. You can also automate deploys with one curl command to POST https://ship.page/deploy, the GitHub Action, or the MCP server at https://ship.page/mcp.
If you need a custom domain name, use another host, since no ship.page plan offers custom domains.
Questions
Does ship.page work with both Phaser 3 and Phaser 4?
Yes. Phaser 3 and Phaser 4 (4.2.1 on npm as of October 2026) games run in the browser from static HTML, JavaScript and asset files, so any static Phaser build runs on ship.page.
Which folder do I upload from the official Phaser Vite template?
Run npm run build in your project folder, then upload the dist folder that Vite generates, or zip the dist folder and upload the ZIP. Do not upload your source folder or node_modules.
Why do my sprites or audio files fail to load after uploading?
Check the capitalization first. File paths on ship.page are case-sensitive, so the path in your Phaser preload code must match the exact uppercase and lowercase letters of each file.
Can I update my Phaser game without changing the link?
On the free plan, each upload creates a new link. With the $4 a month Pro plan, you can re-upload a new build folder or ZIP and keep the exact same URL for your players.
Can I host a multiplayer Phaser game with a Node.js server here?
ship.page hosts static client files only: HTML, CSS, JavaScript, images, audio, JSON and WebAssembly. It does not run Node.js, Python or PHP server code, though your Phaser client on ship.page can connect to an external WebSocket or API server you host elsewhere.
How big can my Phaser game be on the free plan?
A free upload supports a ZIP file up to 25 MB (up to 100 MB unpacked) containing up to 100 files, or a single HTML file up to 10 MB on its own. Pro raises the ZIP limit to 100 MB (400 MB unpacked) and 10,000 files.
Keep reading
- Free HTML5 game hosting
- Share an HTML game with a link
- Host a Vite build online
- Host a Three.js project
- Host a p5.js sketch
Put your Phaser game online now
Drag your dist folder or ZIP onto this page to get a playable HTTPS link in seconds.