Docs ▸ Start
gameshipper.json
init writes every field with its default. The main ones:
{
"name": "Spinning Cube",
"version": "1.0.0",
"game": { "dir": ".", "entry": "index.html", "buildCommand": null, "outputDir": null },
"icon": "icon.png",
"keyArt": "art/key-art.png",
"logo": "art/logo.png",
"targets": ["windows", "mac", "linux"],
"window": { "width": 1280, "height": 720, "fullscreen": true, "resizable": true },
"steam": { "appId": 480, "user": null, "sdk": null, "overlay": "auto" },
"mobile": { "bundleId": null, "orientation": "landscape" },
"itch": { "project": null },
"github": { "repo": null },
"plugins": []
}Builds start fullscreen when window.fullscreen is true, and always on Steam Deck. npx gameshipper help --json includes the full schema.
Builds package the game folder (game.dir, or game.outputDir when there's a buildCommand) except .env files, .git, .DS_Store, Thumbs.db, steam_appid.txt and the Steamworks SDK anywhere in it, and every dot file and folder at its top; only when the game folder is the project folder itself are the project's own top-level files skipped too (out/, node_modules/, gameshipper.json, gameshipper.lock, CLAUDE.md, AGENTS.md and package-manager lockfiles), so a dist/ folder keeps its own node_modules/ or out/.
Files
| Path | |
|---|---|
gameshipper.json |
The config. Commit it. |
gameshipper.lock |
The URL and SHA-256 of every downloaded CDN file. Commit it. When a CDN file changes, build warns with CDN_CHANGED and updates the lock; --frozen-lock makes that an error. |
out/<target>/ |
The builds. |
out/store/ |
The store images; out/store/screenshots/ holds the screenshots from F12 and play --screenshot. |
.sdk/ |
Your Steamworks SDK zip. Don't commit it (init adds it to .gitignore). |
.gameshipper/logs/ |
Run logs (the newest 50 of each command), plus the events logs and smoke summaries of play runs (the newest 20). |
.gameshipper/last/ |
The last result of each command, which status reads. |
.gameshipper/check/ |
The last check: report.json and the Deck-size frame.png. |
.gameshipper/steam/ |
The last publish to Steam: the SteamPipe build scripts, and SteamCMD's build logs in output/. |
Environment variables
| Variable | |
|---|---|
GAMESHIPPER_CACHE |
Gameshipper's download cache (CDN files, Steamworks SDK libraries, native Steam bridges). Default: the OS's user cache folder. |
GAMESHIPPER_STEAM_SDK |
Your Steamworks SDK zip or folder (see Steam). |
GAMESHIPPER_NPM_REGISTRY |
The npm registry that other OSes' native Steam bridges (@koromix/koffi-*) are downloaded from. Default: npm_config_registry, then https://registry.npmjs.org. Downloads are checked against pinned hashes. |
GAMESHIPPER_SOFTWARE_GL |
Set to 1 on machines without a GPU, such as hosted CI runners, so games may render WebGL in software. Only play, smoke runs and check use it: a player's launch of a shipped game ignores it. The ci init workflow sets it. |
GAMESHIPPER_MAC_IDENTITY |
The Developer ID Application identity Mac builds are signed with (see Mac signing and notarization). Unset: ad-hoc signing. |
GAMESHIPPER_NOTARY_PROFILE, GAMESHIPPER_NOTARY_KEYCHAIN |
The notarytool keychain profile (and, optionally, the keychain holding it) Mac builds are notarized with. |
GAMESHIPPER_NOTARY_KEY, GAMESHIPPER_NOTARY_KEY_ID, GAMESHIPPER_NOTARY_ISSUER |
For CI instead of a profile: an App Store Connect API key (.p8 path), its ID and its issuer ID. |
GITHUB_TOKEN, GH_TOKEN |
publish: a token that can write to the GitHub repository (GH_TOKEN is read when GITHUB_TOKEN isn't set). The gh CLI's login is never used. |
BUTLER_API_KEY |
publish: an itch.io API key for butler, for CI, instead of butler's own login. |
GAMESHIPPER_GITHUB_API |
publish: the GitHub API to use, for GitHub Enterprise. Default: https://api.github.com. |
GAMESHIPPER_STEAMCMD, GAMESHIPPER_BUTLER |
publish: a SteamCMD or butler to run instead of the ones Gameshipper downloads. |
help --json lists them all under environment. Apple credentials and tokens are only ever read from these variables and your keychain, never from gameshipper.json.
TypeScript
/// <reference types="gameshipper/types" />This types window.steam and window.gameshipper (both undefined in a normal browser).