Build and hand off
Lives in: author player → F12 → Build
Turn the open project into a folder (or install file) you can give to players. Player builds do not include the author overlay or F1–F12 author shortcuts.
Overlay tabs and prefs: Author tools.
Before you build
- Set identity in
game.json—title,version, optionalicon/splash/android— Title, icon, splash · Platforms - Press F12 → Validation and fix errors
- Play through critical paths once
Build tab
- Choose Target (self / linux / windows / macos / web / Android APK / Android Play — whatever your author kit ships).
- Choose Mode:
pck(default) orfolderwhere offered. Web and Android always usepck(Android embeds the pack inside the APK/AAB). - Set an output folder (absolute path), or Use CWD / Pick….
- Leave Filter unused assets and Run prebuild checks on unless you have a reason not to.
- For Android Play (AAB): set signing fields (release keystore). For Android APK (itch/sideload), signing can stay empty — Build uses a debug keystore automatically. Install JDK 17 or 21 so
javaworks on PATH; the Build tab warns if it is missing. - Press Run Build.
- Use Open Folder, Copy Path, or Copy Log as needed.
Output lands in {game-slug}-{platform}-v{version}/ under the path you chose (title and version come from game.json). That folder is flat: player binary + game data side by side. Building again to the same name replaces the folder, so you never end up with both data.pck and assets/ from two modes.
Prefs are remembered in vn-mikro-debug.cfg next to the player.
What to give players
Give players the build folder contents except BUILD_INFO.json. That file is an author working receipt (kit version, mode, paths) — leave it out of zips, itch uploads, and store packages.
| In the build folder | Ship to players? |
|---|---|
Player binary (.exe / binary / {slug}.app / web shell) | Yes — named from game.json → title (slug). macOS Finder label uses the title |
{slug}.apk or {slug}.aab (Android) | Yes — one file; game data is already inside |
data.pck or assets/ | Yes (desktop/web; not left beside Android APK/AAB after a successful stamp) |
Linux icons/ + .desktop (Linux builds) | Yes |
| Leftover macOS player zip / extensionless zip copy | No — Build removes it after expanding {slug}.app |
BUILD_INFO.json | No — author-only working file |
| Mode | Result |
|---|---|
| pck (default) | Player binary + a packed data.pck (game data in one file) |
| folder | Player binary + an assets/ tree (readable files next to the exe) |
Web: copies the kit’s web shell into the build folder and always writes sibling data.pck. Serve that folder over HTTP (not file://). Splash / favicon: Title, icon, splash. Omit BUILD_INFO.json when you upload the web folder too.
Android: needs game.json → android (package_id, optional version_code) and JDK 17 or 21 with java on PATH — Platforms. APK (itch/direct) can omit Build signing prefs (debug-signed). Play AAB needs your release keystore in prefs. Two targets write separate folders (…-android-v… and …-android-play-v…). Keystore passwords stay in local prefs — do not commit them with the story.
Filter and checks
Prebuild checks fail early if there is no story (script.txt or story.json) or other required pieces are missing.
Filter unused assets (on by default) keeps known runtime folders (themes/, story/, characters/, audio/, backgrounds/, sprites/, animations/, shaders/, ui/, fonts/, extensions/) plus root config JSON and any folder that holds a declared native extension entry. It is not a full “referenced file” scan — turn the filter off if something you need is still getting skipped.
A successful build is a player package: no debug overlay, no project picker, no author F-keys. Players run the binary; they do not edit your source folder.
Usually you need
| Want | Do |
|---|---|
| Desktop demo | Build your OS → zip folder minus BUILD_INFO.json |
| itch web | Build web |
| Sideload Android | Build Android APK (JDK on PATH) |
| Play Console | Build Android Play + keystore + bump version_code |
Related
Author tools · Title, icon, splash · Platforms · Native extensions · Runtime version