Home/Blog /Shipping

How to export a vbgnt game for Windows, Mac, Linux, Android and iOS

The arcade plays the web build. Everything else starts in the Publish pane: tick the platforms, press Export, and a build machine does the rest while you keep working on the game.

Your arcade plays the web build, and for most games that is the whole story: a link that opens on a phone, a laptop or a television. But at some point a game earns a download button, a Steam page, a place on a friend's phone that doesn't need a browser. Every game in the studio has a Publish pane for exactly that moment. This is what it does, what it gives you for each platform, and where it hands off to you.

What the Publish pane does

Open a game and the right-hand side of the studio shows three panes: Game, the live preview; Files, the project; and Publish. The third one is an export queue. Tick the platforms you want, press Export, and a dedicated build machine spins up with the Godot editor and the export templates for every platform installed. It mirrors the project files as they were last saved, runs the export for each platform in turn, packages the results and uploads them. The pane shows each platform's status as it goes, then a download link per package and the build log underneath.

The build machine is separate from the one your conversation runs on, so an export does not block the agent and the agent does not block an export. The one rule is that the pane refuses to start while a build turn is in progress, because the export would otherwise miss whatever that turn is about to change. Wait for the arcade to update, then export.

Step by step

  1. Open the game and switch the pane to Publish.
  2. Tick the platforms. Web, Windows, macOS and Linux are ticked by default; add Android and iOS when you want them.
  3. If iOS is ticked, an Apple Team ID field appears. Fill it in if you have one; leave it blank to get a project you finish configuring in Xcode.
  4. To publish to itch.io in the same run, tick Push to itch.io and enter the project as yourname/your-game. This needs an itch.io API key saved in the studio settings and a project page that already exists on itch.io.
  5. Press Export. A typical game with all six platforms ticked finishes in ten to fifteen minutes; a single desktop platform in three or four.
  6. Download what you need from the job's rows. Links stay valid for an hour at a time; reopening the job mints fresh ones. Old jobs can be deleted from the same place.

Each export gets a version number that ticks up per game, and the same number is baked into the Windows file properties, the macOS bundle, the Android version code and the itch.io push. If someone reports a bug, the version tells you which export they have.

What each platform gives you

Web

The same single-threaded WebAssembly build your arcade serves, zipped with index.html at the root. It exists here for two reasons: itch.io wants exactly this shape, and some people like a copy they can host anywhere.

Windows

One .exe for 64-bit Windows with the game data embedded, so there is no .pck file to keep next to it. It is not code-signed. Steam does not care; a direct download will show a SmartScreen warning until enough people have run it, which is the same for every small unsigned game on the internet and not something a build machine can fix without your certificate.

macOS

A universal .app, running natively on Apple Silicon and Intel, delivered as a zip. It is ad-hoc signed, which matters more than it sounds: an unsigned binary will not launch on Apple Silicon at all, while an ad-hoc signed one launches after the unidentified-developer prompt (right-click, Open, the first time). It is not notarized. Notarization needs an Apple Developer account and Apple's own tooling, and is the step that makes the prompt go away entirely.

Linux

One 64-bit executable with the data embedded. Mark it executable if the unzipping tool dropped the bit, and it runs. This is also most of what Steam Deck needs from you.

Android

An APK for arm64 phones and tablets, which covers everything sold in the last several years. It is signed with a debug key: fine for sideloading onto your own device, fine for itch.io, and exactly what Google Play refuses. Play wants an App Bundle signed with your own upload key, and the keystore behind that key is something you should own rather than a build machine, because losing it means losing the ability to update the app. The Google Play guide covers that step.

iOS

An Xcode project, zipped, with the bundle identifier and Team ID filled in when you gave one. It is not an app yet. Only Xcode on a Mac can sign and archive an iOS build, and no Linux machine, ours included, can do it for you. This is the one platform the pane exports but never pushes anywhere, since itch.io does not distribute iOS apps either. The App Store guide picks up from the unzipped project.

The itch.io push

With Push to itch.io ticked, each platform that finishes is handed to butler, itch.io's upload tool, and pushed to a channel named for the platform: html5, windows, mac, linux, android. itch.io reads the platform from the channel name and adds the right download buttons to the page on its own. The Mac build is pushed as the unpacked .app, which is what the itch.io desktop app expects.

Two things stay on your side of the fence. The project page has to exist before the first push: create it on itch.io, set its kind to HTML if you want the web build playable in place, and note its URL slug. And after the first push, open the page's edit screen and tick This file will be played in the browser on the html5 upload. Both are one-time settings. The itch.io guide walks the page setup end to end.

When an export fails

A platform can fail on its own without taking the others with it: the job reports "partly done", the failed row shows the last lines of the Godot export log, and the full log sits under the job. The usual causes are ordinary Godot ones. A script that only compiles in the browser build, an asset that imported fine for the web but not for mobile texture compression, a plugin with no native library for the platform. Paste the error into the chat and the agent will fix the project; then export again.

Exports use the project files as saved in the Files pane, so a file you edited or uploaded there is in the next export without a chat turn. The reverse holds too: if you changed something by hand and the export looks stale, check the file actually saved.

The honest read

The pane gets every platform to the point where the next step needs a credential of yours: a signing certificate, a keystore, an Apple account, a store login. That is a deliberate line. The studio can hold an itch.io key because itch.io hands them out freely and revokes them just as easily. Holding your Apple certificate or your Play upload key would make the build machine the most valuable thing to steal in your whole setup, and it is better that it never has them.

So: itch.io is one click, and it is the one that gets a generated game in front of strangers fastest. Everything past it is a download from this pane plus the paperwork the store in question insists on.

Frequently asked questions

How do I export a vbgnt game for Windows or Mac?

Open the game in the studio, switch the right-hand pane from Game to Publish, tick the platforms you want and press Export. A dedicated build machine mirrors the project files as last saved, runs the Godot export for each platform, packages the results and lists them with download links in the same pane a few minutes later. Windows and Linux come out as single-file binaries with the game data embedded; macOS is a universal .app in a zip.

Does the export sign the builds?

Partly. The macOS app is ad-hoc signed, which is what lets it launch on Apple Silicon at all, but it is not notarized, so a downloaded copy still shows the unidentified-developer prompt until the player right-clicks and opens it. The Android APK is signed with a debug key, fine for sideloading and itch.io but not what Google Play accepts. Windows and Linux binaries are unsigned. Store submissions need your own certificates and keystores, which the guides for each store cover.

Can the export build an iOS app?

It produces the Xcode project, with your Apple Team ID and bundle identifier filled in when you provide them, zipped for download. Turning that into an .ipa needs Xcode on a Mac: open the project, sign it with your developer account and archive it. No Linux build machine can do that step, which is why iOS is the one platform the pane exports but never pushes anywhere.

How does the itch.io push work?

Save an itch.io API key in the studio settings once, create the project page on itch.io, then tick Push to itch.io in the Publish pane and enter the page's slug as username/game-name. After each platform exports, butler pushes it to the matching channel: html5 for the web build, windows, mac, linux and android for the rest, with the version number the studio assigns. After the first push, open the page on itch.io and mark the html5 upload as playable in the browser.

Keep reading

Related articles

Shipping

How to publish a Godot game on itch.io

The only one of the four the studio can finish for you. No native build, no signing, no review, no fee. Create the page, tick a box, and the Publish pane pushes the build.

9 min read
Shipping

How to publish a Godot game on Steam

Steam will not take the web build, so the job starts with a desktop export. Then a $100 fee, a 30-day wait, and a store page that matters more than the game does.

11 min read
Shipping

How to publish a Godot game on Google Play

Twenty-five dollars, once, and no Mac required. Then the obstacle nobody sees coming: twelve real testers, for fourteen continuous days, before you can ship.

10 min read