Convert an exported project ZIP into a native installable desktop app for macOS, Windows, or Linux using the Prometheon packaging pipeline.
When you export a project from Prometheon Studio, you get a ZIP archive containing the compiled game or simulation. The packaging scripts wrap that ZIP in an Electron shell, stage all the assets, and run electron-builder to produce a platform-native installer — a DMG on macOS, an NSIS installer on Windows, or an AppImage on Linux.
All three platform commands share the same flag syntax. You only need the platform-specific command to target the right builder configuration.
No dotnet required. The packaging pipeline is a Node.js script. You only need .NET installed if you're running C# scripts at runtime inside the exported game.
In Prometheon Studio, go to File → Export Project. This produces a .zip file containing your built game.
Pass the absolute path to your exported ZIP with the --input flag.
The output appears in dist-game/ by default, or the path you set with --output.
# macOS — produces a .dmg npm run package:game:mac -- --input /path/to/export.zip # Windows — produces an NSIS .exe installer npm run package:game:windows -- --input /path/to/export.zip # Linux — produces an AppImage npm run package:game:linux -- --input /path/to/export.zip
All three commands accept identical flags. Only the target platform and output format differ.
npm run package:game:mac -- \ --input /absolute/path/to/export.zip \ --name "My Game" \ --output dist-game/mygame \ --icon ./icons/game.icns \ --arch universal \ --app-id com.example.mygame
| Flag | Type | Description |
|---|---|---|
| --input | path * | Absolute path to the exported project ZIP. Required. |
| --name | string | Override the app display name shown in the installer and title bar. Defaults to the project name from the export. |
| --output | path | Output directory for the installer artifact. Defaults to dist-game/ in the project root. |
| --icon | path | Path to the installer icon. Must match the platform format — .icns for macOS, .ico for Windows, .png/.svg for Linux. Falls back to Electron defaults if omitted. |
| --arch | string | Target CPU architecture. x64, arm64, or universal (macOS only — fat binary that runs on both Intel and Apple Silicon). |
| --app-id | string | Reverse-DNS bundle identifier, e.g. com.example.mygame. Used by macOS for Gatekeeper and Windows for uninstall registry entries. |
| --prepare-only | flag | Stage the project into the temporary build directory but skip the electron-builder step. Useful for inspecting what will be packaged before committing to a full build. |
| --keep-stage | flag | Keep the temporary staging folder after packaging completes. By default it is deleted. Useful for debugging build output. |
* Required flag.
Produces a .dmg drag-install disk image. Code signing is skipped without a Developer ID certificate — Gatekeeper will show an unidentified-developer warning on first launch. Users can bypass via right-click → Open.
Produces an NSIS .exe installer with a standard install wizard. SmartScreen may warn on first run without a code signing certificate. Architecture defaults to x64.
Produces an .AppImage — a single portable executable. No install required; users mark it executable and run directly. Also compatible with most desktop launchers.
Cross-platform builds: macOS can only build macOS targets. Windows targets must be built on Windows (or via CI). Linux targets can be built on Linux or Windows with WSL2.
Installer icons are platform-specific formats. The running app also picks up branding from inside the export ZIP.
| Platform | Installer icon format | Runtime icon |
|---|---|---|
| macOS | .icns (Apple Icon Image) |
Build/Branding/*.png in the export ZIP, used as the dock icon |
| Windows | .ico (Windows Icon) |
Build/Branding/*.png used as the taskbar and title bar icon |
| Linux | .png or .svg |
Build/Branding/*.png used as the desktop and panel icon |
If no installer icon is supplied in the required format, packaging still succeeds using Electron's default icon. The runtime icon from Build/Branding/ is always respected if present in the export.
# Start with a 1024×1024 PNG, then:
mkdir MyIcon.iconset
sips -z 16 16 icon.png --out MyIcon.iconset/icon_16x16.png
sips -z 32 32 icon.png --out MyIcon.iconset/icon_16x16@2x.png
sips -z 32 32 icon.png --out MyIcon.iconset/icon_32x32.png
sips -z 64 64 icon.png --out MyIcon.iconset/icon_32x32@2x.png
sips -z 128 128 icon.png --out MyIcon.iconset/icon_128x128.png
sips -z 256 256 icon.png --out MyIcon.iconset/icon_128x128@2x.png
sips -z 256 256 icon.png --out MyIcon.iconset/icon_256x256.png
sips -z 512 512 icon.png --out MyIcon.iconset/icon_256x256@2x.png
sips -z 512 512 icon.png --out MyIcon.iconset/icon_512x512.png
cp icon.png MyIcon.iconset/icon_512x512@2x.png
iconutil -c icns MyIcon.iconset
A complete end-to-end example: exporting from the studio, packaging for macOS, and producing a named universal build.
# 1. Export from Prometheon Studio → produces MyGame-export.zip # 2. Package for macOS (universal — runs on Intel + Apple Silicon) npm run package:game:mac -- \ --input ~/Desktop/MyGame-export.zip \ --name "My Game" \ --output ~/Desktop/MyGame-release \ --icon ~/Desktop/icon.icns \ --arch universal \ --app-id com.mygame.app # 3. Output: ~/Desktop/MyGame-release/My Game-1.0.0-universal.dmg # 4. Package for Windows from a Windows machine or CI npm run package:game:windows -- \ --input C:\exports\MyGame-export.zip \ --name "My Game" \ --icon C:\assets\icon.ico \ --app-id com.mygame.app
Inspect before building: Use --prepare-only to stage the project without running electron-builder. Check the staged output, then run again without the flag to produce the installer.