Exporting to Platforms
Popular CI: GitHub Actions with community Godot CI images (e.g., barichello/godot-ci) or godot-export actions.
39.1 Setup
*Editor → Manage Export Templates → Download and Install* (templates must match your exact Godot version).
*Project → Export → Add...* a preset per platform. Presets are saved in export_presets.cfg (commit it, but keep secrets like keystore passwords out — use environment variables or .godot/export_credentials.cfg, which is not committed).
Configure resources (export all, selected scenes, or exclude filters like *.psd, docs/*).
Click Export Project (or *Export PCK/ZIP* for patches/DLC).
39.2 Platform notes
Requirements & notes .exe + embedded or separate .pck; rcedit for icon/metadata; code signing optional
Universal binaries; notarization and signing for distribution (requires Apple Developer account) x86_64/arm64 binary + .pck
Android SDK, JDK 17, debug/release keystore; optional Gradle build for plugins; AAB for Play Store
Export Xcode project on macOS; sign and build in Xcode HTML5/WebAssembly; Compatibility renderer; threads need cross-origin isolation headers (COOP/COEP), or use the single-threaded export option (4.3+); C# not supported
Via third-party porting companies (W4 Games and others) due to NDAs
39.3 Command-line exports (CI)
Popular CI: GitHub Actions with community Godot CI images (e.g., barichello/godot-ci) or godot-export actions.
godot --headless --export-release "Windows Desktop" build/windows/game.exe
godot --headless --export-debug "Linux" build/linux/game.x86_64
godot --headless --export-release "Web" build/web/index.html
godot --headless --export-pack "Windows Desktop" build/patch.pck39.4 Feature tags and platform code
Custom feature tags (set in the export preset, e.g., demo) let you build variants: OS.has_feature("demo"). Project settings can also be overridden per feature (e.g., display/window/size/viewport_width.mobile).
if OS.has_feature("web"):
$QuitButton.hide() # can't quit a browser tab
if OS.has_feature("mobile"):
$TouchControls.show()
if OS.is_debug_build():
$DebugOverlay.show()
match OS.get_name():
"Windows", "macOS", "Linux": pass
"Android", "iOS": pass
"Web": pass39.5 Release checklist
Set application name, icon, version, and boot splash (*Project Settings → Application*).
Window stretch settings: canvas_items or viewport mode, aspect expand/keep.
Test exported builds (not just the editor): res:// is read-only; file paths are case-sensitive in PCKs; scripts are compiled to bytecode/tokenized.
Optional: PCK encryption (requires building custom export templates with an encryption key).
Strip debug features: remove debug overlays, and set *Debug → GDScript* warnings irrelevant to release.