Start playing with GamePKG.
Inspect the creator and permissions, build the game on your machine, then play through the host’s scoped runtime.
Inspect the source and declared permissions before building. Creators host their packages; GamePKG verifies the packages you choose and builds them in isolation.
Set up the host
Play opens each game in its own process and window. Closing the library leaves running games open; closing a game finishes its session and saves progress.
Download the Linux or Windows CLI and desktop app, verify its checksum and extract it. Follow the installation instructions to install Rust, the Wasm target, isolation tools and the pinned Slang compiler. Windows uses a matching Linux compiler in WSL 2; follow the Windows setup guide.
./bin/gamepkg-gui
To build the host from source instead, follow the repository build instructions.
In Settings, enter your Slang 2026.19 installation folder. Native C-based source ports need Clang 18 and lld-18. Their separate Wasm build also needs wasi-libc and the Clang 18 Wasm runtime. A separate WASI installation can be selected with C/WASI build tools folder; check the tools and save settings. New configurations use Vulkan with WGSL shader output. OpenGL can be chosen explicitly. Set your library folder, memory ceiling, sound volume, and update-check interval, then choose Save settings.
Try the signed demos
Choose Add in Library, enter the demo catalog URL, and choose Import .gamepkglist. It adds signed sample packages as Not downloaded. Select a game, approve its creator, then Build and Play. Some packages require player-provided ROM files; review their requirements before playing. Players need no signing key. The portable demo store includes signed packages for offline import.
Click a game’s name or icon to open its page for Play, Build, ROM files, updates, integrity checks and package details. On Linux, Build compiles for the local CPU only; Build Wasm and Play Wasm are separate actions. Games that do not use shaders do not need Slang for their native build. Click a ROM file field to open the system file picker; the selected location is remembered for that game. Cancelling keeps your previous choice.
Follow the package’s controls when playing. Choose Back to game to return to its page, then Back to library to browse your games. The signed demo manifests include working update URLs.
Drop a package or game list
Drag one .gamepkg or .gamepkglist file from your file manager anywhere into the library window. A package is verified and shown for creator review before installation; Cancel package review discards it. A list adds Not downloaded entries without fetching games. Finish or cancel a review before dropping another file, and return to Library first when playing.
Inspect, install, build, play
- In Library, enter a local
.gamepkgpath or a creator’s HTTPS download URL. Choose Download / inspect. - Review the verified creator fingerprint, version, permissions, resource limits, and ROM requirement. You do not need to enter a signing key. Confirm the creator before choosing Trust this creator and install.
- Choose Build in the game’s row. Compilation runs in an isolated environment. A failed initial build leaves the game unbuilt and displays an error. A failed rebuild preserves the earlier build.
- Choose Play when the build succeeds. Use Rebuild after changing build options or shader backend.
A signature proves key ownership and integrity; it does not prove the creator’s real-world identity or guarantee harmless code. Games receive scoped host operations, not general access to your folders or network.
Games that need your ROM
Choose ROM files on the game’s row and enter each named file location in manifest order. Games can require up to eight files. Only read-only session snapshots are shared; the host does not fetch ROMs or grant folder access. Locations are remembered separately for each game across app restarts. Updates with the same ROM requirements retain them. Different creators, libraries or ROM requirements use separate selections. Missing files must be selected again. In the CLI, repeat --rom FILE for each required file.
Add several games
For the published port catalog, choose Add in Library, then Import official ports library. The list is remembered for future refreshes, and no games are downloaded. Or download ports.gamepkglist and drag it into the desktop library. Review each entry’s host and user-file requirements before downloading.
Import a .gamepkglist to add catalog entries without downloading games. Choose a game’s Download / inspect action when ready. Catalog claims remain unverified until its package is checked.
For a .gamepkgstore, choose Inspect .gamepkgstore bundle, review the listed games and creator keys, then approve installation. A store bundle includes its required shared assets. Inspection and cancellation install nothing.
Updates and Tor
GamePKG checks for app updates when the library opens and notifies you if a newer stable release is available. You can turn off Check for app updates when GamePKG opens in Settings and save; manual checks remain available. To update GamePKG itself, open Settings → GamePKG updates, check for a new stable release, and choose Download and install GamePKG update. Select a writable folder, then restart into the verified new copy after closing running games. Your library and settings stay in place. The previous portable version is kept for rollback; update your shortcuts to the new copy. App updates need no Python, WSL or administrator access.
Use Check for updates or enable periodic checks in Settings. Checks verify candidate updates while the library is idle; updates require your installation choice and must keep the game’s approved creator key.
For onion URLs, run Tor separately and enter its loopback SOCKS proxy in Settings. DNS resolves through the proxy. Missing Tor connectivity fails the download; it never falls back to a direct connection.
Dependency-free game source
Game packages cannot declare Cargo dependencies, including gamepkg-* crates. The host provides the scoped gamepkg:: API. Creator approval verifies who signed a package; it cannot allow dependencies or bypass source checks. There are no crate approval switches in Settings.
Creators: follow the developer instructions for Cargo files, API examples and migration from older dependency-based packages.
Try a source example
Creators can build a local example into a signed source package. Keep the private key private; players need no key entry.
./target/release/gamepkg keygen -o creator.key
./target/release/gamepkg build examples/minimal \
-o /tmp/example.gamepkg --key creator.key
Inspect /tmp/example.gamepkg in the desktop library, then follow the install, build, and play steps above. The creator build checks compilation before publishing the package; it does not install it automatically.
Download from a GitHub project
Enter https://github.com/owner/repository to download its latest published stable release. The release must contain exactly one .gamepkg file. A /releases/tag/version link selects a specific release; use a direct asset link when the project hosts multiple packages. GitHub project links also work in game catalogs and signed update URLs. For list or store imports, the app selects one matching .gamepkglist or .gamepkgstore release file. Package signatures, creator approval, and update checks still apply.
Integrity checks and repair
Use Check integrity in Library to verify signed package contents, shared assets and compiled game checksums. Fix / rebuild recompiles verified source. Damaged archives can be restored from the verified local recovery copy. If that copy is missing or damaged, supply a verified replacement original. Player saves and history are preserved.
For missing or damaged shared assets, enter the original local .gamepkgstore path in the package field and choose Repair assets. The host requires the exact signed package before restoring its blobs. The CLI equivalent is gamepkg integrity-fix GAME_ID --store original.gamepkgstore.