export-config
Skill2 starsChanged 6 months agoMITView on GitHub
Configure Godot 4.x export presets for Windows, macOS, Linux, Web, Android, iOS — set up export_presets.cfg, signing, icons, and CLI build commands. Includes a pre-flight checklist and CI build snippet.
- Reads credentials
1 other project uses a version of this.
Adopted by
Most recently taken up by
- luiseiman/dotforgetheir own version, first seen Oct 13, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- luiseiman/dotforge★ 8same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository33 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- bootstrap-godot-projectSkill
- codebase-surveySkill
- create-autoloadSkill
- create-componentSkill
- create-resourceSkill
- create-sceneSkill
- create-state-machineSkill
- feature-planSkill
- feature-specSkill
- game-brainstormingSkill
- gdd-writerSkill
- genre-pack-3d-actionSkill
- genre-pack-platformerSkill
- genre-pack-topdownSkill
- genre-pack-turnbasedSkill
- godot-patternsSkill
- gut-test-writerSkill
- networking-foundationSkill
- performance-auditSkill
- save-schema-migrationSkill
- setup-collision-layersSkill
- setup-git-godotSkill
- setup-input-mapSkill
- setup-localizationSkill
- setup-save-systemSkill
- sfx-generatorSkill
- shader-writerSkill
- subagent-dev-modeSkill
- ui-patterns-godotSkill
- update-docsSkill
- using-godot-superpowersSkill
- writing-game-planSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 154
Before any release export:
- Very specific: line 288
Rate-limited template download: when many parallel jobs hit GitHub mirrors → pin chickensoft-games/setup-godot to a release that caches …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Export Config
Configure Godot exports cleanly for distribution. Reference: Exporting projects.
Prerequisites
- Export templates installed: Editor → Manage Export Templates → Download (matches your editor version)
export_presets.cfgin.gitignore(it can contain keystore paths and signing secrets); commitexport_presets.cfg.exampleif useful- Icon assets: Source
.png1024×1024 for the icon; Godot generates platform variants
export_presets.cfg structure
This file is auto-generated by Godot but understandable. Each preset is a numbered section:
[preset.0]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter="docs/*, test/*, *.gdignore, *.md"
export_path="builds/windows/MyGame.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.0.options]
custom_template/debug=""
custom_template/release=""
binary_format/embed_pck=false
debug/export_console_wrapper=1
binary_format/architecture="x86_64"
codesign/enable=false
application/icon="res://icon.ico"
application/file_version="1.0.0.0"
application/product_version="1.0.0.0"
application/company_name="MyStudio"
application/product_name="MyGame"
application/file_description="MyGame"
application/copyright="© 2026 MyStudio"
ssh_remote_deploy/enabled=falseRecommended: configure presets through the editor UI (Project → Export). It writes the file. Then commit a sanitized template.
Per-platform presets
Windows Desktop
- Architecture:
x86_64 - Embed PCK:
false(separate.pckships smaller patches;truefor single-file) - Code signing:
osslsigncodeorsigntool(Windows SDK). For most indie releases, leave unsigned (users see a SmartScreen warning that goes away after enough downloads). - Icon:
.icofile viaapplication/icon - Console wrapper:
1for debug builds,0for release (no console window)
macOS Desktop
- Architecture:
universal(x86_64 + arm64) — required for Apple Silicon - Bundle identifier: reverse DNS, e.g.
com.mystudio.mygame - Codesign:
application/codesign/enable = trueand provide a Developer ID certificate; otherwise users see Gatekeeper warning - Notarization: required for distribution outside Mac App Store; via
xcrun notarytoolor Godot's built-in - Icon:
.icnsfile
Linux
- Architecture:
x86_64(alsoarm64if targeting Pi / Steam Deck) - Distribution format: AppImage (recommended for desktop), tarball, or Flatpak
- Embed PCK:
true— single binary easier to distribute - Set executable: chmod +x post-build
Web (HTML5)
- Custom HTML shell: optional but useful for branding the loading screen
- Threads: requires CORS headers (
Cross-Origin-Embedder-Policy: require-corp,Cross-Origin-Opener-Policy: same-origin); itch.io has a setting for this - Embed PCK:
true(single.pckrequest fewer) - VRAM compression:
truefor smaller download - Limits: 2GB max memory; large textures can crash mobile browsers
Android
- Java SDK + Android SDK required; configure paths in Editor Settings → Export → Android
- Keystore: generate with
keytool -genkey -v -keystore my.keystore -alias mygame -keyalg RSA -validity 10000. Store outside repo. Never commit. - Min SDK: 24 (Godot 4.4 default); covers Android 7+
- Target SDK: latest (required by Play Store)
- Architectures:
arm64-v8a(required for Play Store), optionallyarmeabi-v7afor older devices - Permissions: declare only what's needed (Internet for online; nothing for offline single-player)
iOS
- Xcode required (macOS-only)
- Apple Developer account with provisioning profile
- Team ID + Bundle ID in preset
- App icons: full set (use appicon.co or similar)
- Architectures:
arm64 - Use TestFlight for beta distribution
Project icon
Source: icon.png 1024×1024 with transparent background. Godot can convert to platform variants but .ico (Windows) and .icns (macOS) need manual generation:
# .ico (Windows) via ImageMagick
convert icon.png -define icon:auto-resize=256,128,96,64,48,32,16 icon.ico
# .icns (macOS)
mkdir icon.iconset
sips -z 16 16 icon.png --out icon.iconset/icon_16x16.png
sips -z 32 32 icon.png --out icon.iconset/icon_16x16@2x.png
sips -z 32 32 icon.png --out icon.iconset/icon_32x32.png
sips -z 64 64 icon.png --out icon.iconset/icon_32x32@2x.png
sips -z 128 128 icon.png --out icon.iconset/icon_128x128.png
sips -z 256 256 icon.png --out icon.iconset/icon_128x128@2x.png
sips -z 256 256 icon.png --out icon.iconset/icon_256x256.png
sips -z 512 512 icon.png --out icon.iconset/icon_256x256@2x.png
sips -z 512 512 icon.png --out icon.iconset/icon_512x512.png
sips -z 1024 1024 icon.png --out icon.iconset/icon_512x512@2x.png
iconutil -c icns icon.iconsetCLI build commands
# Debug build (fast, includes debug symbols)
godot --headless --path . --export-debug "Windows Desktop" builds/windows/MyGame_debug.exe
# Release build (optimized)
godot --headless --path . --export-release "Windows Desktop" builds/windows/MyGame.exe
# All presets (run separately):
godot --headless --path . --export-release "Windows Desktop" builds/windows/MyGame.exe
godot --headless --path . --export-release "macOS" builds/macos/MyGame.dmg
godot --headless --path . --export-release "Linux/X11" builds/linux/MyGame.x86_64
godot --headless --path . --export-release "Web" builds/web/index.html
godot --headless --path . --export-release "Android" builds/android/MyGame.apk--export-debug if the platform supports it, --export-release otherwise. The preset name must match exactly what's in export_presets.cfg.
Pre-flight checklist
Before any release export:
- Version bumped in
project.godot(config/version="1.2.3") - Icon set on every platform preset
- Bundle/app ID consistent across platforms
exclude_filterstripstest/,docs/,tools/,.gdignoreprint()/print_debug()calls behind a debug flag- Logging level set to WARN or ERROR for release
- Autoloads load without errors when scene starts cold
- All addons under
addons/are licensed for distribution (some are dev-only) export_presets.cfgnot committed (or sanitized version only)- No hardcoded paths from your machine in scripts
user://paths used for save data, not absolute pathsdisplay/window/size/viewport_*matches design resolution- No shaders that crash on the lowest-spec target hardware
- Test build runs on a clean machine (not just dev box)
CI pipeline (GitHub Actions)
A real release pipeline runs tests first, then exports. A failing test must block the build, otherwise CI is just an expensive godot --export. The template below has two jobs: test (runs GUT or GdUnit4 headless on every push) and build (only on tags, only after test passes).
Reference: Command line tutorial → Running scripts. Verify the exact --script / --scene flags against godot-docs MCP for your Godot version before shipping the workflow.
.github/workflows/ci.yml — tests + builds
name: CI
on:
push:
branches: [main]
tags: ['v*']
pull_request:
branches: [main]
env:
GODOT_VERSION: 4.4.1 # bump in lockstep with project.godot config/features
jobs:
test:
name: Headless tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
lfs: true # required if setup-git-godot is in use
- uses: chickensoft-games/setup-godot@v2
with:
version: ${{ env.GODOT_VERSION }}
use-dotnet: false
- name: Import resources (warm .godot cache)
run: godot --headless --import || true
# GUT runner — preferred when addons/gut/ is present.
# If the project uses GdUnit4 instead, swap the next step for:
# godot --headless --path . res://addons/gdUnit4/bin/GdUnitCmdTool.gd -a res://test
- name: Run GUT tests
run: |
godot --headless --path . \
-s addons/gut/gut_cmdln.gd \
-gdir=res://test/unit \
-gexit \
-glog=2
- name: Upload test logs
if: always()
uses: actions/upload-artifact@v4
with:
name: test-logs
path: |
user_data/logs/*.log
test-results.xml
if-no-files-found: ignore
build:
name: Export ${{ matrix.preset }}
needs: test
if: startsWith(github.ref, 'refs/tags/v')
strategy:
matrix:
include:
- { os: ubuntu-latest, preset: "Linux/X11", output: builds/linux/MyGame.x86_64 }
- { os: windows-latest, preset: "Windows Desktop", output: builds/windows/MyGame.exe }
- { os: macos-latest, preset: "macOS", output: builds/macos/MyGame.zip }
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: chickensoft-games/setup-godot@v2
with:
version: ${{ env.GODOT_VERSION }}
use-dotnet: false
- name: Install export templates
run: godot --headless --quit --install-export-templates || true
- name: Import resources
run: godot --headless --import || true
- name: Export ${{ matrix.preset }}
run: |
mkdir -p "$(dirname '${{ matrix.output }}')"
godot --headless --path . --export-release "${{ matrix.preset }}" "${{ matrix.output }}"
shell: bash
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-${{ github.ref_name }}
path: ${{ matrix.output }}What the workflow guarantees
testruns on every push and every PR — fast feedback.buildonly runs on tag pushes (v1.2.3) and only aftertestpasses (needs: test).lfs: trueinactions/checkoutpulls Git LFS blobs (required ifsetup-git-godotis configured; otherwise binary assets resolve to LFS pointer text and the export fails with cryptic errors).godot --headless --importwarms the.godot/cache so the export step does not stall on first-run import.- Artifacts are tagged with
github.ref_name(the tag) so consecutive releases do not overwrite each other.
Required secrets / env
| Secret | When | What for |
GODOT_ANDROID_KEYSTORE_BASE64 | Android release | Base64 of the .keystore (decoded into a temp file by an extra step) |
GODOT_ANDROID_KEYSTORE_PASSWORD | Android release | Keystore password |
GODOT_ANDROID_KEY_ALIAS | Android release | Key alias inside the keystore |
GODOT_MACOS_NOTARY_APPLE_ID | macOS release | Apple ID for xcrun notarytool |
GODOT_MACOS_NOTARY_TEAM_ID | macOS release | Team ID |
GODOT_MACOS_NOTARY_APP_PASSWORD | macOS release | App-specific password |
ITCH_API_KEY | Web/desktop release if pushing to itch | butler push auth |
Inject these into the build job via env: and reference them in the matching [preset.N.options] keys (e.g. keystore/release paths) only at runtime — never commit them.
Common CI gotchas
- "Cannot import: file is corrupt" on a binary asset → almost always a missing LFS pull. Check
actions/checkouthaslfs: trueand the runner rangit lfs pull. - "Could not find export template" →
--install-export-templatesmay need a network call. Some self-hosted runners block it; pre-bake the template into the runner image. - Android signing fails silently → the keystore path in
export_presets.cfgis still the dev-machine absolute path. Override withkeystore/release="$RUNNER_TEMP/release.keystore"after decoding the secret. - macOS export hangs forever on a Linux runner →
macOSpreset must be exported on amacos-latestrunner; cross-export only works for desktop Linux/Windows. - Rate-limited template download when many parallel jobs hit GitHub mirrors → pin
chickensoft-games/setup-godotto a release that caches templates.
For mobile/web releases, use platform-specific runners (macOS for iOS, Linux for Android signing).
Common gotchas
- Build hangs on first export: usually stuck importing assets. Run
godot --headless --importfirst to warm the cache. - Web build crashes mobile browsers: too much VRAM. Reduce texture sizes, disable shadows.
- macOS unsigned build "is damaged":
xattr -cr /Applications/MyGame.appremoves the quarantine bit (for testers; ship signed builds for users). - Android signing key lost = can't update Play Store listing. Back up the keystore.
- Translation files: list
*.translationininclude_filterif you use them. embed_pck=false+ missing.pcknext to executable = silent failure. Either embed or distribute both.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

