How to export a Godot game to the web and share a playable link
Godot Guide

How to export a Godot game to the web and share a playable link

By Ziva.sh • November 5, 2026 • 10 min read

To put a Godot 4 game in a browser, export it with the Web preset (single-threaded, the default since Godot 4.3), serve the folder over HTTP, and upload it to a host that gives you a link: itch.io, a static host such as GitHub Pages, or, if you use Ziva, its Share Web build menu item, which exports, uploads and returns a play.ziva.sh link from inside the Godot editor.

Ziva.sh publishes this page and makes Ziva. Facts about other tools come from their own pages, as of 5 November 2026. We ran every Godot command on this page on 5 November 2026 with Godot 4.7.2 on Linux, on the public Star Catcher sample (and the C# test on a one-script C# project), and loaded each build in Chromium. We did not test Safari.

HostPriceLimitsPrivate linkThreaded builds
itch.ioitch.io: freeitch.io: 500 MB extracted, 1,000 files, 200 MB per fileitch.io: Draft secret link, or Restricted with a passworditch.io: SharedArrayBuffer support checkbox
GitHub PagesGitHub Pages: free for public repositoriesGitHub Pages: 1 GB per site, 100 GB a month soft bandwidthGitHub Pages: not covered hereGitHub Pages: no header settings in its docs; PWA workaround
NetlifyNetlify: free plan with monthly creditsNetlify Drop: "individual files over 10MB may cause your deploy to get stuck"Netlify Drop: temporary password until you claim the siteNetlify: _headers file
Cloudflare PagesCloudflare Pages: free planCloudflare Pages: 25 MiB per file, 20,000 filesCloudflare Pages: not covered hereCloudflare Pages: _headers file
LobsiteLobsite: free, or $20 a year for Godot 4Lobsite free: 5 MB per file; Standard: 100 MB per file, 2 GB per siteLobsite: password on StandardLobsite: lobsite.toml headers via its CLI
Ziva Share Web buildZiva: every plan, including free HobbyZiva: 300 MB after compressionZiva: unlisted preview only; published games are publicZiva: headers set for you; single-threaded on Godot 4.3+

Godot 4.7.2's single-threaded index.wasm is 39,514,754 bytes before compression. That is above Cloudflare Pages' 25 MiB per-file limit and Lobsite's free 5 MB limit, and over the 10 MB at which Netlify says Drop deploys may stall, so check per-file limits before you pick a free host. Gotm.io, which older answers still list for Godot games, no longer works: its domain registration has expired.

Export a Godot 4 game for the web

  1. Use the Compatibility renderer. Godot's docs say Godot 4 "can only target WebGL 2.0 (using the Compatibility rendering method)".
  2. Open Project > Export, click Add... and choose Web.
  3. If Godot says export templates are missing, click Manage Export Templates and download them. They go in ~/.local/share/godot/export_templates/4.7.2.stable/ on Linux; the Godot 4.7.2 template bundle covers every platform and is about 1.2 GB.
  4. Leave Variant > Thread Support off. Godot's docs call single-threaded "the preferred and now default way to export your games on the Web" since Godot 4.3.
  5. Click Export Project and save as index.html in an empty folder.

From the command line, with a preset named Web in export_presets.cfg:

godot --headless --path my-game --export-release "Web" ../build/index.html

On our machine that took about 3 seconds and produced 9 files, 39.9 MB in total:

FileBytesgzip -9
index.wasm39,514,75410,084,297
index.js279,81568,400
index.pck7,3163,487
index.html, two audio worklets, three icons55,307-

Almost all of it is the engine. Hosts that gzip on the fly send about a quarter of those bytes; Godot's docs list GitHub Pages as one that does and itch.io as one that doesn't.

A minimal export_presets.cfg that exports without warnings in 4.7.2:

[preset.0]

name="Web"
platform="Web"
runnable=true
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../build/index.html"

[preset.0.options]

variant/thread_support=false

Without include_filter, exclude_filter and at least one option, the export still succeeds but prints ERROR: Couldn't find the given section "preset.0" and key "include_filter".

Test the build in your browser

Double-clicking index.html does not work. Chromium showed Failed to fetch over the Godot logo, and the console said URL scheme "file" is not supported for index.wasm and index.pck. Serve the folder instead:

cd build
python3 -m http.server 8000

Then open http://localhost:8000. Our single-threaded build ran from this plain server with no extra headers: the console printed single-threaded, and holding the right arrow moved the player into a star and the score went to 1. Godot's docs also describe a button between Stop and Play Edited Scene, shown when a runnable web preset and templates exist, that opens the game in your default browser.

Fix "Cross Origin Isolation" and "SharedArrayBuffer" missing

With Thread Support on and no special headers, Godot 4.7.2 stopped with this error over the logo (Godot's docs say Extensions Support needs the same headers):

The following features required to run Godot projects on the Web are missing:
Cross-Origin Isolation - Check that the web server configuration sends the correct headers.
SharedArrayBuffer - Check that the web server configuration sends the correct headers.

Threaded builds use SharedArrayBuffer, which browsers only allow on cross-origin isolated pages. Three fixes, in the order we'd try them:

  1. Export single-threaded. Turn Thread Support and Extensions Support off and export again. Unless a GDExtension needs them, this is the simplest fix; Godot's docs call single-threaded exports "more compatible overall with stores like itch.io" and web portals.

  2. Send the two headers. Godot's docs list Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp. Locally, this tiny server is enough:

    import http.server, sys
    
    class COIHandler(http.server.SimpleHTTPRequestHandler):
        def end_headers(self):
            self.send_header("Cross-Origin-Opener-Policy", "same-origin")
            self.send_header("Cross-Origin-Embedder-Policy", "require-corp")
            super().end_headers()
    
    http.server.ThreadingHTTPServer(("127.0.0.1", int(sys.argv[1])), COIHandler).serve_forever()

    With it, the threaded build printed multi-threaded and ran. Netlify and Cloudflare Pages read the same headers from a _headers file. On itch.io, tick SharedArrayBuffer support under Embed options > Frame options; itch.io's announcement calls it experimental.

  3. Use the PWA workaround when you can't set headers. In the export preset, enable Progressive Web App and keep Ensure Cross Origin Isolation Headers on (it is on by default). A service worker then adds the headers. It needs HTTPS or localhost. In our tests, 4 out of 4 first visits showed a black screen with no message, and the game ran after one manual reload, so tell playtesters to reload once.

itch.io

  1. Export single-threaded.
  2. ZIP the contents of the export folder, so index.html is at the top of the ZIP. Our 9-file build made a 10.2 MB ZIP.
  3. On itch.io, create a new project, set its kind to HTML, upload the ZIP and tick This file will be played in the browser.
  4. Set the embed size to your game's viewport, and tick Mobile friendly if it works on phones.
  5. Leave the project as a Draft and share the secret link, or publish it.

itch.io's docs say HTML5 ZIPs must have at most 1,000 files, 500 MB extracted and 200 MB per file, and that a Draft is "only accessible by people who can edit it, and people with the secret link". For testers you approve, set the page to Restricted and add a password; itch.io says you can "include the password directly in the URL". To upload from inside Godot, the free MIT-licensed plugins ShipItch, Itch Exporter & Uploader and Greenlight export and upload with itch.io's butler tool, and Majordomo pushes builds to itch.io with butler.

GitHub Pages, Netlify or Cloudflare Pages

Commit the export folder to a repository and turn on Pages, or drop the folder on Netlify. GitHub's Pages docs for github.com describe no way to set custom response headers, so on GitHub Pages use the single-threaded export or the PWA workaround above. Watch per-file limits: Cloudflare Pages caps each file at 25 MiB, and Godot 4.7.2's index.wasm is 39.5 MB.

Ziva is an AI assistant that runs inside the Godot editor. Its Share Web build item, in the ⋮ menu of the Ziva chat header, does the export and the hosting for you:

  1. Ziva runs Godot's web export with your own Godot editor, on a copy of your project without Ziva's own addon, and adds a Web export preset if your project has none.
  2. If the export templates are missing, Ziva downloads Godot's official templates first.
  3. On Godot 4.3 and later, Ziva exports single-threaded unless a GDExtension ships only threaded web libraries, and then warns that the game won't run on iPhone or Safari. On Godot 4.2, which has no single-threaded templates, builds are threaded.
  4. Ziva compresses and uploads the build, and you get an unlisted preview link to try it.
  5. You add a title, description and cover, choose Approve and publish, and get a play.ziva.sh link to share.

We shared the Star Catcher sample this way on 5 November 2026, signed in on a fresh Ziva install with no export templates. Downloading Godot 4.7.2's templates (1,222 MB) took about 21 minutes on our connection; extracting them, exporting and uploading the 9 compressed files (13.5 MB) took under a minute more. The game is at https://play.ziva.sh/timely-hallway/, and it played in Chromium without signing in.

The Star Catcher sample running on its play.ziva.sh page in Chromium, signed out: the teal square has collected a star and the label reads Score: 1

Share Web build works on every Ziva plan, including the free Hobby plan, once you're signed in, for builds up to 300 MB after compression. Rebuilding keeps the same link, and links don't expire until you delete the game. You can also ask Ziva in chat to prepare the game for publishing; Ziva builds the preview and shows the listing, and publishes only after you approve, even with auto-approve on. The Share web builds docs cover updating, deleting and linking a game from another computer.

Can you export a Godot 4 C# project to the web?

No. Godot 4.7.2's .NET editor refused our one-script C# project:

Exporting to Web is currently not supported in Godot 4 when using C#/.NET. Use Godot 3 to target Web with C#/Mono instead.

Godot's docs say "Projects written in C# using Godot 4 currently cannot be exported to the web." The tracking issue, godotengine/godot#70796, was locked on 19 June 2026 with the comment "The foundation is evaluating solutions for C# web support." For a browser build today, use GDScript, or Godot 3 with C#. The same limit applies to Ziva's Share Web build.

What Ziva's Share Web build doesn't do

  • Ziva doesn't upload to itch.io, GitHub Pages or any host other than play.ziva.sh.
  • A published Ziva build is public: it is listed on play.ziva.sh, where players can rate and comment, and new games are announced in Ziva's Discord. Only the preview is unlisted.
  • Ziva has no custom domains or password-protected builds.
  • Ziva can't export C# projects to the web, because Godot 4 can't.
  • Share Web build is for Godot only, needs the Godot editor with Ziva installed, and needs you signed in to Ziva.
  • Ziva uploads only Godot's web export, not your project folder or chats. Like any web build, the export contains your game's scenes and scripts.

Frequently asked questions

How do I export my Godot 4 game so it can be played in a web browser?
Use the Compatibility renderer, open Project > Export, add a Web preset, install the export templates if Godot asks, leave Thread Support off (the default since Godot 4.3) and export to index.html. From the command line, godot --headless --path my-game --export-release "Web" ../build/index.html does the same with a preset named Web. Serve the folder over HTTP, for example with python3 -m http.server, because opening index.html as a file fails with "Failed to fetch". In our Godot 4.7.2 test, a single-threaded export ran from a plain local server with no special headers.
What's the fastest way to share a playable build of my Godot game with friends or playtesters as a link?
Export single-threaded and upload the folder to any host that gives you a URL. itch.io (free) takes a ZIP with index.html at its root; tick This file will be played in the browser, and leave the page as a Draft to share a secret link. Netlify Drop publishes a dropped folder without an account, but Netlify's docs say individual files over 10 MB may cause the deploy to get stuck, and Godot 4.7.2's index.wasm is 39.5 MB. If you use Ziva, an AI assistant inside the Godot editor, its Share Web build menu item exports the game, uploads it and returns a play.ziva.sh link on every Ziva plan, with no hosting setup; publishing makes the game public on play.ziva.sh.
Where can I host a Godot HTML5 game for free?
As of 5 November 2026: itch.io is free and accepts HTML5 ZIPs up to 500 MB extracted, 1,000 files and 200 MB per file. GitHub Pages is free for public repositories, up to 1 GB per site, and gzips files on the fly. Cloudflare Pages is free but limits each file to 25 MiB, below the 39.5 MB index.wasm of a Godot 4.7.2 export. Lobsite's free plan allows 5 MB per file, so Lobsite says Godot 4 needs its $20-a-year Standard plan. Ziva's Share Web build hosts Godot builds up to 300 MB at play.ziva.sh on every Ziva plan, for games exported from the Godot editor with Ziva installed.
My Godot web export says Cross Origin Isolation and SharedArrayBuffer are missing. How do I fix it?
The build was exported with Thread Support (or Extensions Support) on, and the server does not send the two headers those builds need. Fix it in one of three ways: turn both options off in the Web export preset and export again (single-threaded is the default since Godot 4.3 and needs no headers); serve the files with Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp; or, when you can't set headers, enable Progressive Web App with Ensure Cross Origin Isolation Headers, which needs HTTPS or localhost. In our Godot 4.7.2 test the PWA workaround showed a black screen on the first visit and ran after one reload. On itch.io, threaded builds need the SharedArrayBuffer support checkbox in the embed options.
How can I share a private test build of my Godot web game that only my playtesters can open?
On itch.io, leave the project as a Draft: itch.io says a draft is only accessible by people who can edit it and people with the secret link. For more control, set it to Restricted and either approve people or add a password, which can go in the URL. Lobsite's $20-a-year Standard plan password-protects a site. Ziva's Share Web build preview is an unlisted link that search engines don't index, but a published Ziva build is public and listed on play.ziva.sh; Ziva has no private published mode.
Is there an AI assistant or Godot editor plugin that can export and publish a web build of my game for me?
Yes. Ziva, an AI assistant inside the Godot editor (Godot 4.2+), has a Share Web build menu item that runs Godot's web export with your editor, downloads the export templates if they're missing, uploads the build and gives you a play.ziva.sh link, on every Ziva plan. You can also ask Ziva in chat to prepare the listing; Ziva publishes only after you approve. For itch.io, the free MIT-licensed plugins ShipItch, Itch Exporter & Uploader and Greenlight export and upload with itch.io's butler tool, and Majordomo pushes builds to itch.io with butler. Summer Engine's agent publishes to Summer Games, its own store.
Can I export a Godot 4 C# project to the web?
No. As of Godot 4.7, the .NET editor refuses with "Exporting to Web is currently not supported in Godot 4 when using C#/.NET. Use Godot 3 to target Web with C#/Mono instead." The Godot docs say the same, and the tracking issue godotengine/godot#70796 was locked on 19 June 2026 with "The foundation is evaluating solutions for C# web support." To ship a browser build today, write the game in GDScript or use Godot 3 with C#.
How do I upload my Godot web build to itch.io so it plays in the browser?
Export single-threaded to index.html, then ZIP the contents of the export folder so index.html is at the root of the ZIP, not inside a subfolder. On itch.io, create a project, set its kind to HTML, upload the ZIP and tick This file will be played in the browser. itch.io limits HTML5 uploads to 1,000 files, 500 MB extracted and 200 MB per file. Only threaded builds need the SharedArrayBuffer support checkbox under Embed options. Our 4.7.2 export of a small 2D game was 9 files, 39.9 MB unpacked and a 10.2 MB ZIP.