Export And Ship logo

Export And Ship

Organization
SummerEngine
export-and-ship

Prepare a game export: check templates and targets, validate release assets, build after approval.

Overview

PublisherSummerEngine
Repositorysummer
Skill nameexport-and-ship
Stars
91
Forks
8
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by SummerEngine on GitHub. Read the source before you install it.

Installation

Install the Export And Ship AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/SummerEngine/summer/tree/main/library/skills/export-and-ship
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/SummerEngine/summer.git /tmp/summer
mkdir -p .claude/skills
cp -r /tmp/summer/library/skills/export-and-ship .claude/skills/export-and-ship
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Export And Ship in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Export And Ship on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Export And Ship is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

/export-and-ship — Export and Prep Distribution

Overview

Shipping is a checklist, not a creative act. This skill first inventories the export templates and targets actually present in the installed Summer Engine build. It can then validate platform-specific assets and configuration and produce a local build for an available target after approval. It does not upload, host, submit, or promise a target that is absent from the installation.

Core principle: prove the target is locally available, then read its list, satisfy the list, and build. Treat store submission and hosting as separate user-controlled workflows.

Steps

1. Prove local export capability

Do this before presenting destinations, writing presets, or constructing an export command.

  1. Read engineBinaryPath from summer_get_project_context.
  2. Resolve the matching export-template directory for that exact Summer technical base.
  3. Inventory the installed templates (summer_export_templates lists them and installs Summer's macOS, Windows and web templates) and any custom_template/release paths already configured in export_presets.cfg.
  4. Build a capability table with available, missing prerequisite, or impossible on this build for every requested target.

A stock Summer Mono install ships only the macOS template. Web export is incompatible with that Mono build. Run summer_export_templates before marking another target missing: it installs Summer's macOS and Windows templates. Linux, Android, and iOS require a matching custom template or an external CI/build environment, plus their platform toolchains where applicable.

Hard gate: an absent template or toolchain means the target is unavailable. Do not create its preset, recommend it as a local option, or invoke an export command. Route it to an explicitly configured external CI job or stop and tell the user which prerequisite is missing. An export pack is not a runnable platform build and must not be presented as one.

2. Pick among proven destinations

Offer only targets marked available by step 1. Record other requested destinations as blocked follow-ups with their exact prerequisite.

Locally proven targets: macOS. Requested but blocked: Windows (install the template with summer_export_templates), Web (non-Mono build), Android (template + Android toolchain). Which proven target should I prepare?

Each destination has a different list. Multiple destinations = multiple lists. Don't shortcut — the iOS list does not satisfy the Steam list.

3. Run the pre-flight checklist

Always do this first, regardless of destination.

Preferred (Summer MCP):

summer_get_diagnostics            # any errors? if yes, abort.
summer_get_console                # any "import failed" warnings?
summer_get_scene_tree             # is the main scene set?

Fallback (no MCP): ask the user to confirm in Summer Engine: Project → Project Settings → Application → Run → Main Scene is set, and the Output panel has no errors.

Pre-flight blockers (any one = stop)
CheckHowBlocker because
Main scene is setproject.godot has application/run/main_sceneGame launches to nothing without it
No script errorssummer_get_script_errors cleanWon't compile in export
No print() debug spam in hot loopsGrep "print(" -- "**/*.gd"Spammy console for users
No hardcoded debug pathsGrep "user://debug" or "/Users/" or "C:\\\\"Breaks on user machines
.gitignore excludes .godot/, .import/, *.tmpRead .gitignoreBuild artifacts in repo
LICENSE file presentRead LICENSE at repo rootSteam + itch require licensing clarity
attribution.md for community assetsRead attribution.md or equivalentCC-BY assets need credit; missing = takedown risk
Version number setapplication/config/version in project.godotRequired by Steam, useful everywhere
Game name setapplication/config/nameWindow title, build artifact name

If any check fails, list them in one message and ask:

Pre-flight failed on N items: . Fix these before exporting? I can take them one by one.

4. Per-platform distribution requirements

These lists describe distribution requirements only. They do not establish local export capability. Walk a list only after step 1 proves its target or the user has selected an external build environment that does.

a) Steam
AssetResolutionFormatPath / use
Game icon256×256PNG, transparentUsed in Steam library, taskbar
Library capsule600×900PNG"Box art" in library grid
Library hero3840×1240PNGWide banner at top of game's library page
Library logo1280×720, transparent BGPNGTitle overlay on hero
Header capsule460×215PNGStore search results, friend activity
Main capsule616×353PNGFront-page features
Small capsule231×87PNGSidebar
Page background1438×810JPGBehind store page content
Screenshots≥ 1280×720, 16:9PNG/JPGAt least 5
Trailer1080p, MP4, ≤ 2 minMP4Required for Coming Soon → Released
Steam page textEnglish required + any localizedMarkdown / plaintextShort description (300 chars), full description, controls

Build config for Steam:

  • Export only the platform builds proven in step 1. Additional Steam platforms require their own matching template or external build job.
  • Export options: Embed PCK = true for single-EXE distribution.
  • Steam SDK integration: GodotSteam (https://godotsteam.com) is the standard. Add the GDExtension before exporting.
  • App ID must be set in the Steam SDK init code.
  • Build separately for each platform; Steam Pipe uploads handle distribution.
b) itch.io

Lower bar than Steam. itch is forgiving.

AssetResolutionRequired?
Cover image630×500Yes
ScreenshotsAny 16:9At least 3
Game title + taglinetextYes
DescriptionMarkdownYes
Build filesZIP per platform OR butler uploadYes

Build config:

  • Package each proven platform build as a ZIP.
  • Or use butler push (itch's CLI) for atomic versioning and patches.
  • A browser build is optional and requires a separately proven non-Mono Web export environment.
c) Web (HTML5) — unavailable on the stock Mono build

Do not recommend or attempt this target from the stock Mono installation. Route it to a verified non-Mono Summer-compatible build environment first. Once that prerequisite is proven, these browser constraints apply:

  • No threading without cross-origin-isolated headers (most hosts don't set them).
  • No ENet — use WebSocket / WebRTC if multiplayer.
  • Long initial load — first-paint is critical. Add a loading screen.
  • File size matters — strip unused features in export preset (no encryption, no debugging, no JavaScript eval if not needed).

Build config:

  • Export preset: Web.
  • Output .html + .wasm + .pck + .js.
  • Disable: "Variant: Editor support", "Encryption".

Known traps:

  • Audio: Chrome blocks autoplay. First user click must trigger audio context resume.
  • Local saves: use user:// (maps to IndexedDB on web). Test that saves persist across reload.
d) iOS App Store
AssetResolution / Format
App icon1024×1024 PNG (Apple generates the rest)
Launch screenStoryboard (the engine generates it)
Screenshots6.5" iPhone: 1242×2688 / 2688×1242 (≥ 3); 12.9" iPad if iPad-eligible
App Store descriptiontext per locale, ≤ 4000 chars
Keywords≤ 100 chars, comma-separated
Support URLrequired
Privacy policy URLrequired (any data collection)

Build config:

  • Export preset: iOS.
  • Bundle ID: com.<your-org>.<game-name>. Must match Apple Developer portal.
  • Apple Developer account required ($99/year).
  • Code signing: distribution certificate + provisioning profile.
  • Build via macOS only (Xcode toolchain).
  • TestFlight first (always). Don't go straight to App Store review.
e) Google Play (Android)
AssetResolution / Format
App icon512×512 PNG (32-bit, transparent)
Feature graphic1024×500 PNG
Phone screenshots16:9 or 9:16, ≥ 1080p, ≥ 2
Tablet screenshotsoptional but boosts visibility
App descriptiontext per locale, ≤ 4000 chars
Short description≤ 80 chars

Build config:

  • Export preset: Android.
  • Build as AAB (Android App Bundle), NOT APK — Play Store requires AAB since 2021.
  • Signing: Play App Signing (Google holds the key) + an upload key.
  • Target API level: latest required by Play Store policy (typically the previous year's API level).
  • Test on real device + emulator before submission.
f) macOS DMG (outside Steam)
  • Export preset: macOS (universal binary).
  • Codesign + notarize via Apple — unsigned builds get a Gatekeeper warning users can't easily bypass.
  • Notarization requires Apple Developer account ($99/year).
  • DMG packaging: create-dmg CLI or hdiutil.
g) Windows installer (outside Steam)
  • Export preset: Windows Desktop (x86_64).
  • Code-signing certificate ($75–$300/year from a CA) — without it, SmartScreen flags the EXE.
  • Installer: NSIS or InnoSetup are the standards. Or just ship a ZIP.

5. Build config consistency check

Before producing builds, verify export_presets.cfg for each target:

Read export_presets.cfg

For each preset:

FieldProduction valueWhy
binary_format/embed_pcktrueSingle EXE per platform
texture_format/etc2_astctrue for mobileSmaller texture compression
application/short_versionmatches application/config/versionSteam reads it
script_encryption_key in export_credentials.cfgset only when the user explicitly chooses script encryptionThe similarly named preset field does not exist
application/iconpath to your .ico / .icns / .pngOtherwise the default engine icon ships

6. Propose the build sequence

Capability proof: macOS available locally; Windows needs its template (summer_export_templates); Linux requires external CI; Web is unavailable on this Mono build. Pre-flight is clean for the macOS preset. May I produce that one proven build now?

7. Produce a proven build

CLI export is the standard scripted path. Get the binary from summer_get_project_context → engineBinaryPath. Do not type an engine binary name from memory:

  • There is no godot on a Summer user's machine.
  • summer is the npm CLI, not the engine. It takes subcommands and would never accept --export-release.
  • On macOS the engine is /Applications/Summer.app/Contents/MacOS/Summer; on Windows, %LOCALAPPDATA%\Summer\current\Summer.exe.

After step 1 has marked a preset available, substitute only that exact proven preset and output:

bash
ENGINE=<engineBinaryPath>
PROJ=<absolute project dir>
PROVEN_PRESET=<exact available preset name>
PROVEN_OUTPUT=<output path valid for that target>

"$ENGINE" --headless --path "$PROJ" --export-release "$PROVEN_PRESET" "$PROVEN_OUTPUT"

--path is not optional in a script — without it the export targets the current working directory.

The quoted preset name must match a name= in export_presets.cfg exactly. That file is plain text you can write yourself if it is missing: a hand-written preset plus this command was measured producing a runnable 144 MB .app, exit code 0.

To enable another target, prove one of these before returning to step 2:

  • a matching installed export template;
  • a valid custom_template/release="<path>" for the current technical base;
  • an external CI/build job with the matching template and platform toolchain.

Export-option cautions

  • script/encryption_key does not exist. The real key is script_encryption_key, and it lives in a separate export_credentials.cfg, not export_presets.cfg. Writing the wrong name produces an unencrypted build with no error at all.
  • There is no debug field in a preset. Debug versus release is chosen by --export-debug versus --export-release, nothing else.

On Apple Silicon, binary_format/architecture="arm64" is the natural guess, and it fails leaving a 0-byte .app that looks like success. Only "universal" ships.

See headless-scripting for the wider pattern this is one instance of.

If the user is on a CI system (GitHub Actions etc), point them at a cross-compile workflow: the engine can export Windows and Linux from a Linux runner.

8. Verify each build

For each build:

  • Launch it. Confirm the title screen renders.
  • Run for 30 seconds. Confirm no console errors.
  • Check the file size (anything over 500 MB needs justification — usually unstripped textures or unused assets).
  • For mobile: install on a real device, not just the emulator.

9. Hand off distribution

Per platform, point the user at the correct upload path:

  • summer.games: summer_export_game writes the summer.games .zip; store.upload_file uploads it to the game's store listing after the user confirms the exact game, file and version (needs summer login --store; through summer_call when your client does not list it). If the store refuses this machine's sign-in, the user uploads the .zip in Studio instead. The publish-your-game skill takes it from there to store.publish.
    • Per platform, the store takes: iPhone, Android, macOS and Windows in the Summer apps = one summer.games bundle (summer_export_game targets, format bundle; no template, no signing; with or without a server). Web = an HTML5 .zip on Summer's WebGPU Forward+ template (targets:["web"]; the project must render with Forward+ or Mobile). A macOS or Windows download for the store page = targets:["macos"] or ["windows"] with format download. Download exports need the template: summer_export_templates install fetches it from Summer's CDN.
    • Hosted games: if summer_export_game fails with "… is in the source graph's authority_engine domain, which the client pack leaves out", an authority root in source-domains.json holds a file the client loads (often the composition .tres). Narrow that root to the server-only files, or move the shared file under a shared path, then export again. Every exporter message is in the multiplayer-publish skill's export-errors.md; the folder rules are in multiplayer-project.
    • Every summer.games bundle: export with the released Summer editor from the download page, never a development build, and export again after updating Summer. Otherwise its scripts can fail to compile on players' devices and the game opens to an empty window, though every upload check passes. release-readiness check 7 proves it.
    • Every file the game reads by path at run time (FileAccess, DirAccess, load_from_file) that Summer doesn't import, such as a .bin or .json, must match the summer.games preset's own include_filter (Resources > Filters to export non-resource files/folders); a filter on another preset doesn't carry over. A left-out file is no export error, it is just missing on players' devices. Never use SystemFont for phone text: on iPhone it draws every glyph as a box. release-readiness check 8 lists the pack.
    • iPhone and Android bundles: the Summer Games apps start only exports on their Summer version line (same MAJOR.MINOR, patch no newer). Export with the current Summer release and export again after every Summer minor update, or players see "The game could not start" on phones while desktop works. release-readiness check 9.
    • Hosted games, before the upload: a clean export does not prove players can join. Run release-readiness on the .zip: the bundle's server.pck, started with no scene, must load the authority scene (the server preset needs the summer_authority custom feature), and Summer.initialize must pass no hard-coded Game ID. Otherwise every online join fails with world_start_timeout.
    • Store page art: key art, covers and icons carry no text, logos or UI (the store page shows the title). Screenshots are real gameplay and may show the game's own HUD; add no captions, logos or overlays. Capture them with summer_capture_gameplay (offscreen, no editor needed; resolution 1920x1080, or 1080x1920 for portrait; get past a title menu with the game's own flags in args, e.g. ["--autostart"], or steps such as [{"press":"Play"},{"wait":3000},{"shot":true}]), or summer_screenshot target game while the editor runs the game.
  • Steam: steamcmd + Steam Pipe (builder_app_xxx.vdf). Set up depots first in Steamworks.
  • itch.io: butler push <path> <user>/<game>:<channel> (e.g. butler push build/win <user>/mygame:windows).
  • Web (itch hosted): zip + drop into itch upload UI as "playable in browser".
  • iOS: Archive in Xcode → upload via Xcode Organizer → TestFlight → App Store.
  • Android: Play Console → Internal testing → Closed → Open → Production.

Skill does NOT execute these uploads itself. It produces the builds and points at the right command.

Pre-flight checklist (master)

Use this as a one-shot grep before any export:

CheckPass condition
Main scene setproject.godot has application/run/main_scene = "res://..."
No script errorssummer_get_script_errors empty
No debug print() spamGrep returns < 20 hits across project (or each is intentional)
No hardcoded user pathsGrep for /Users/, C:\\, /home/ returns 0 hits
Version number setapplication/config/version = "1.0.0" (or higher)
Game name setapplication/config/name = "<actual name>"
Icon assets presentPer-platform icon files exist at the paths referenced in export_presets.cfg
LICENSE fileExists at repo root
Attribution fileExists if any community assets used
Release mode selectedBuild invocation uses --export-release
Export preset embed_pck = trueFor all desktop release presets
.gitignore excludes build artifactsbuild/, .godot/, .import/, *.tmp listed
Screenshots ≥ minimum count for platform3 for itch, 5 for Steam, 2 for Play
No leftover dev assets in res://No _test_, _old_, _temp_ files in the export paths

Common mistakes

Don'tDoWhy
Ship debug builds to SteamUse --export-release after capability proofDebug builds leak paths and run slower
Use 256×256 icon for iOS1024×1024 (Apple downscales)iOS rejects undersized icons
Skip Steam trailerRecord at least 30 sec gameplay before launchSteam blocks the release without it
Ship APK to Play StoreBuild AABPlay requires AAB since 2021
Skip code-signing on macOS / WindowsGet a cert; without it, users can't run the buildGatekeeper / SmartScreen blocks unsigned binaries
Skip notarization on macOSNotarize after signingQuarantined apps can't run on most modern macOS
Ship without LICENSEAdd MIT or commercial license to repo rootSteam + itch + most platforms require it
Forget attribution for CC-BY assetsattribution.md listing each asset's source + licenseOtherwise = takedown notice + ban
Auto-upload via skillProduce builds; user uploadsUploads have side effects (versioning, refunds, metadata changes)
Push 1.0.0 firstPush 0.9.0 internal first, then 1.0.0 to publicInternal testing catches the embarrassing-launch-day bugs
Same build for all storesPer-store metadata + separate uploadSteam wants .exe, Play wants .aab, web wants .html

Anti-patterns

  • "Just enable all export options." Encryption + JS eval + edit-time features bloat the binary. Disable what you don't use.
  • "I'll fix the icon later." Apple and Google reject submissions with placeholder icons. They'll take a week to re-review.
  • Unsigned macOS builds outside Steam. Apple Gatekeeper is strict. The user-facing workaround ("right-click → Open → confirm") is bad UX.
  • Embed PCK = false on desktop. Splits the binary into multiple files; users delete the PCK by accident; bad first-run experience.
  • Trailer is a slideshow. Steam's algorithm down-weights gameplay-less trailers. Show actual gameplay in the first 5 seconds.

Collaborative protocol

This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into build/. OK?". See summer_docs_read id reference/collaborative-protocol.

Want a working starter?

No template — this is a workflow. Each project's export config and store assets are project-specific.

See also

  • summer_docs_read id reference/mcp-tools-reference — full MCP tool list
  • summer_docs_read id reference/godot-version — Summer compatibility and export-template versioning
  • summer_docs_read id reference/collaborative-protocol — "May I write" pattern
  • headless-scripting — the headless CLI pattern the export command follows
  • tune-performance — pre-ship performance pass

From a shell

No Summer MCP tools in this session? Run each one as a command; when summer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.

In this skillCommand
summer_docs_readsummer docs read
summer_capture_gameplaysummer engine capture-gameplay
summer_export_gamesummer engine export-game
summer_export_templatessummer engine export-templates
summer_get_consolesummer engine get-console
summer_get_diagnosticssummer engine get-diagnostics
summer_get_project_contextsummer engine get-project-context
summer_get_scene_treesummer engine get-scene-tree
summer_get_script_errorssummer engine get-script-errors
summer_inspect_nodesummer engine inspect-node
summer_project_settingsummer engine project-setting
summer_screenshotsummer engine screenshot
store.publishsummer store publish
store.upload_filesummer store upload-file

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Export And Ship AI skill do?

Prepare a game export: check templates and targets, validate release assets, build after approval.

Why use Export And Ship on TypingMind?

Because you install it once and use it with any model. Export And Ship is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Export And Ship in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/SummerEngine/summer/tree/main/library/skills/export-and-ship. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Export And Ship?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Export And Ship?

As many as you like. As long as a model supports skills, you can use Export And Ship with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Export And Ship AI skill free?

Yes. It is published on GitHub by SummerEngine under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇