For three.js and web game developers

Where to publish HTML5 games, portal by portal

Every web portal has its own size budget, SDK and revenue model. Here are the published numbers for the five that matter most, the build settings that keep a game working inside their iframes, and how to get audio to start.

The short answer

The main homes for HTML5 games are CrazyGames, Poki, YouTube Playables, itch.io and GameDistribution. CrazyGames wants an initial download of 50 MB or less, and 20 MB or less for its mobile homepage. YouTube Playables caps the initial bundle under 30 MiB. Poki warns that players move on if loading takes more than 10 seconds, and itch.io allows 500 MB in total. Export single-threaded so the game runs inside portal iframes without special headers, which is the default in Godot 4.3 and later, and start audio on the first tap. Web export is not available in Summer yet.

Publishing an HTML5 game looks simple. Zip the build, upload it, share a link. The rules that decide whether a portal accepts it, features it or quietly disables it on phones live in each portal's developer docs, and they differ a lot. One portal measures the bytes downloaded before gameplay starts. Another asks for web exclusivity. A third is invitation only.

This guide collects the published requirements of the five portals most web game developers look at first, with the source for each number, and explains the two technical choices that cause most rejected or broken builds. Those are threads, which pull in cross-origin headers that portals cannot set for you, and audio, which browsers will not start until the player interacts.

What it does

CrazyGames

Open submissions with a Basic Launch stage where the SDK is optional and monetization is off, then a Full Launch for selected games with the SDK and ads required. Strict size and load-time rules, and games must work in Chrome and Edge.

Poki

Every game is hand-picked. Poki splits revenue 50/50 for players who arrive through Poki and gives you all of it for players you bring directly. It asks for web exclusivity, while Steam, app stores and consoles stay yours.

YouTube Playables

Games inside YouTube, built with the Playables SDK and certified by Google. The developer portal is in private preview and participation is by invitation only.

itch.io

Upload a ZIP with an index.html and it plays in the page. Generous limits, open revenue sharing where you choose itch.io's cut of sales, and an optional switch for SharedArrayBuffer.

GameDistribution

A distribution network for web games. You integrate the GD SDK, pause and mute the game during ads, show ads only after user input, and get paid monthly once your share passes 50 euros.

Summer for web developers today

Summer Studio generates sprites, textures, 3D models, sound effects and music you can download and use in any HTML5 game. The Summer engine builds desktop games. Web export is not available in Summer yet.

How it works

  1. 1

    Step 1: Pick your portals and write down the strictest budget

    Choose the portals before you optimize. If you want the CrazyGames mobile homepage, your budget is 20 MB before gameplay. For YouTube Playables it is under 30 MiB initial, with every file under 30 MiB. Build to the smallest number on your list.

  2. 2

    Step 2: Export single-threaded

    Threads in the browser need SharedArrayBuffer, which needs Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp on the page. Portals embed your game in an iframe on their own domain and you usually cannot set those headers. Ship a single-threaded build instead. In Godot 4.3 and later that is the default, and the Godot web export guide shows the preset. In a three.js game, avoid libraries that need threaded WebAssembly.

  3. 3

    Step 3: Add a tap-to-start screen

    Chrome creates an AudioContext in the suspended state if the page has had no user gesture, and you must call resume() after one. Show a Play button, start or resume audio in its click or touch handler, then load the first scene. Godot's docs recommend the same pattern with a splash screen.

  4. 4

    Step 4: Integrate the portal SDK

    Each portal has its own SDK for ads, pause events and analytics. The common rule is to pause and mute the game while an ad plays and resume after. GameDistribution requires this on SDK_GAME_PAUSE and SDK_GAME_START, and Poki requires audio to be muted during ads.

  5. 5

    Step 5: Test inside an iframe on real devices

    Host the build in an iframe on a different origin, then open it on a phone, in Safari, and on a low-memory laptop. CrazyGames expects smooth play on a 4 GB RAM Chromebook, and games that load files from external hosting must reach gameplay within 20 seconds. Time the load from a cold cache.

  6. 6

    Step 6: Submit, starting where feedback is fastest

    itch.io is the quickest place to get a public link and first players. CrazyGames Basic Launch tests the game with real traffic before monetization. Apply to Poki once the game is polished, and remember its web exclusivity if you plan to spread the game across other portals.

Two ways to run it

In Studio, or from the agent you already use

In Summer Studio

Summer Studio runs in the browser and generates the assets a web game needs, including sprites and textures, 3D models as GLB files, sound effects and music. Download them and use them in three.js, Phaser or any HTML5 engine, then compress for your portal's budget. Studio makes assets. It does not build or host web games.

Open Summer Studio

From Claude, Cursor or Codex via MCP

From Claude Code, Cursor or Codex, the Summer MCP can generate images and audio with summer_generate_image and summer_generate_audio. Generation runs on Summer servers, so this works for a web project without the Summer desktop app open, and summer_get_asset_download_url returns the file for your agent to save into the project.

Example prompt for your agent

Generate a 512 pixel gold coin sprite with a transparent background and a short bright coin pickup sound with Summer, then save both into public/assets in this web project and list their file sizes.
Set up the Summer MCP
HTML5 game portals compared (published requirements, checked September 2026)
PortalSize and load rulesHow you earnOther rules
CrazyGamesInitial download 50 MB or less, 20 MB or less for the mobile homepage, 250 MB total, 1,500 files, and gameplay within 20 seconds when files load from external hostingShare of ad revenue after Full Launch, with monetization off during Basic LaunchMust work in Chrome and Edge, games that do not work well in Safari are disabled there, smooth on a 4 GB RAM Chromebook
PokiNo fixed cap, players tend to move on if loading takes more than 10 seconds, progressive loading recommended50/50 split for players who come through Poki, 100 percent for players you bring directlyHand-picked, web exclusivity, desktop, mobile and tablet support, audio muted during ads, 16:9 support
YouTube PlayablesInitial bundle under 30 MiB (under 15 MiB recommended), total under 250 MiB, every file under 30 MiB, interactive in under 5 seconds recommended, JavaScript heap under 512 MBMonetization settings exist in the portal but do not change the ads players see yetInvitation only, Playables SDK, Google certification
itch.io500 MB extracted, 200 MB per file, 1,000 files, ZIP with index.htmlOpen revenue sharing on sales, you choose itch.io's shareOptional SharedArrayBuffer support, mobile option launches fullscreen on click
GameDistributionNo size limit published in its SDK documentationRevenue share, paid monthly once the 50 euro minimum is reachedGD SDK, pause and mute during ads, ads only after user input

Sources: CrazyGames technical requirements

Examples

Prompts that work, and what comes back

Checks and prompts that catch the usual reasons a portal build fails. Use them with whatever agent or engine you build with.

Initial download audit

Prompt

List every file the game downloads before the first gameplay frame, with sizes after compression, and flag anything over 512 KB.

What you get

A number to compare with the portal budget, and a short list of files to lazy load, compress or cut.

Tap to start

Prompt

Add a Tap to play screen. Create or resume the AudioContext in the pointerup handler, start the music only after that, and then load level 1.

What you get

Audio that starts reliably on phones and desktop browsers, and a first screen that loads almost instantly.

Pause and mute on ads

Prompt

Wire the portal SDK's pause and resume events to stop the game loop and set the master volume to zero, and restore both after the ad.

What you get

A build that passes the ad rules on Poki and GameDistribution, where audio during ads is not allowed.

Godot 4.3 or later web preset

Prompt

Checklist. Web preset, Variant, Thread Support off, Extensions Support off, and no C# in the project.

What you get

A build that runs in portal iframes without cross-origin headers. Godot 4 cannot export C# projects to the web at all.

Sound pack from Studio

Prompt

Short bright coin pickup, retro 8-bit, under one second

What you get

A sound effect to download from Studio and compress for the web, ready for any HTML5 engine.

Which portal fits which game

Start with where your players are and what you can give up. CrazyGames and GameDistribution take submissions through their developer portals, so they suit a first release and a game you want to spread widely. Poki pays half of the revenue from its own traffic, but it hand-picks games and asks for web exclusivity. YouTube Playables puts the game inside YouTube, with a load target under 5 seconds and access by invitation. itch.io is less about traffic and more about a community, a public link and paid downloads, and its limits are the most relaxed.

A common path is itch.io for the first public build and feedback, CrazyGames Basic Launch to see how real portal traffic plays it, and then either a Poki application or a wide release through the open portals. Keep a desktop version in mind as well. Poki's exclusivity covers the open web only, so a Steam release of the same game stays possible.

Threads, COOP and COEP, and why single-threaded wins

Browsers only enable SharedArrayBuffer, the feature WebAssembly threads depend on, on pages that are cross-origin isolated with the Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy headers. That isolation also blocks cross-origin requests the page did not opt into, which is a problem for ad SDKs, analytics and embeds. Godot's own write-up of its 4.3 web export names the core issue. Most web games are published on third-party platforms where the authors may not even be able to set the required headers.

A single-threaded build needs none of this and runs on ordinary hosting and in portal iframes. That holds for any engine. In Godot 4.3 and later single-threaded is the default, and our Godot web export guide has the exact steps. itch.io does offer a SharedArrayBuffer checkbox. It sets the isolation headers on your files and uses COEP credentialless on the embedding page, but Safari does not support credentialless, so a threaded build is still a risk there. For portals, single-threaded is the safe choice.

Audio that starts on the first tap

Chrome allows sound only after the user has interacted with the page, apart from a few exceptions such as installed apps. An AudioContext created before that gesture starts suspended, and you must resume it afterward. On iOS, CrazyGames tells developers to call resume inside a user gesture such as touchend or click to restore audio after the system interrupts it.

In Godot 4.3 and later, web exports play audio as samples instead of streams by default, which keeps sound clean on single-threaded builds but means audio effects are not supported in that mode. Plan your mix around that, and test on a phone before you submit.

  • Show a Play or Tap to start screen before any audio.
  • Create or resume the AudioContext inside that click or touch handler.
  • Mute everything while a portal ad plays and restore it after.
  • Test with the phone's silent switch on and off.

Keeping inside the size budget

Portals measure what the player downloads before gameplay, not the size of your whole game. Load a small first scene and fetch the rest in the background. Compress textures and prefer compressed audio for music. itch.io's CDN serves files ending in .br as Brotli, so precompressed builds are an option there. YouTube Playables recommends individual files under 512 KiB, which is a good discipline for every portal.

Where Summer fits today

Summer Engine is a desktop app for macOS and Windows and builds desktop games for Steam and itch.io downloads. Web export is not available in Summer yet. If your game has to run in a browser today, build it with a web-capable tool such as three.js, Phaser or stock Godot 4, and see our Godot web export guide for the Godot settings.

Summer still helps a web game in two ways. Studio generates the art and sound, and a desktop version built in Summer can go on Steam or itch.io next to the browser game.

Where to take your web game next

Port it to make money

Web portals pay from ads, so a desktop version is how most web games add sales. Steam needs an executable build, either the web game wrapped in Electron, NW.js or Tauri or a native build from an engine, plus a Steam Direct fee of 100 US dollars per game that is paid back after 1,000 US dollars in adjusted gross revenue.

Ship a three.js game on Steam

Release it on Summer Games

Summer Games is a new store for games made with Summer. It is launching soon. A game built in another web stack will not qualify as it is. The games that will be ready are built in Summer, have passed a review, and work as single-player games first.

See Summer Games (launching soon)

Grow it

On portals, the first seconds decide everything, so a fast load and a clear first screen are your marketing. Beyond the portal, a desktop version brings a store page, wishlists, a trailer and creators who cover your genre.

Market your indie game

Remake it in Summer

For a bigger desktop version, start from a Summer template close to your genre, import your models and art, and have the agent rebuild each system from your web code as the spec. Playtest in the engine as you go and keep the web game running as your demo.

Remake your game in Summer

Frequently asked questions

Where should I publish my first HTML5 game?

itch.io is the quickest start, because you upload a ZIP to your own project page and it plays in the browser. CrazyGames and GameDistribution take submissions through their developer portals, and CrazyGames starts games in a Basic Launch with real traffic. Poki hand-picks games, and YouTube Playables is invitation only. Check each portal's current terms before you submit.

Which HTML5 portal pays the most?

None of them publish earnings per player. What is public is the model. Poki splits revenue 50/50 for its own traffic and pays 100 percent for players you bring, CrazyGames shares ad revenue after Full Launch, GameDistribution pays your share monthly once it passes 50 euros, and itch.io lets you set its cut of sales.

Do I need COOP and COEP headers for my HTML5 game?

Only if the build uses threads. A threaded build needs Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp, while a single-threaded build needs no special headers and runs in portal iframes. Godot 4.3 and later export single-threaded by default, and our Godot web export guide walks through the settings.

How do I embed an HTML5 game on my website?

Host the exported files and load the index.html in an iframe on your page. Single-threaded builds work without special headers. Threaded builds need COOP and COEP on both the page and the game files.

Why does my web game have no sound until I click?

Browsers block audio until the user interacts with the page. In Chrome an AudioContext created before a gesture starts suspended, and you must call resume() after a click or tap. Add a Tap to start screen and start audio in its handler.

How big can an HTML5 game be?

It depends on the portal. CrazyGames allows 250 MB in total but only 50 MB before gameplay, or 20 MB for its mobile homepage. YouTube Playables needs an initial bundle under 30 MiB and a total under 250 MiB. itch.io allows 500 MB extracted and 200 MB per file.

Can I publish the same game on Poki and CrazyGames?

Not if Poki accepts it. Poki asks for web exclusivity, so the game cannot appear on other web portals or aggregators. Steam, app stores and consoles are not covered by that exclusivity.

Can Summer Engine export HTML5 games?

Not yet. Summer is a desktop engine for macOS and Windows and builds desktop versions of your game. Web export is not available in Summer yet, and browser play is a research preview. Studio assets work in any HTML5 game.

Make your game. Grow your game.

Even if it is built in another engine.

Free to download for macOS (Apple silicon) and Windows.