Coffee GB 1.7.15 is a major state, netplay, desktop, packaging, SGB, and cartridge-compatibility release.
Highlights
- Introduces a bounded portable state format, immutable machine snapshots, crash-safe state and battery persistence, managed save-state browsing and recovery, and more efficient rewind snapshots.
- Advances netplay with authenticated invitations, consent-based bounded transfers, portable rollback checkpoints, safer lifecycle handling, diagnostics, and opt-in LAN discovery.
- Delivers the Desktop 2.0 foundations: typed settings, input/audio/display/save preferences, resizable high-DPI fullscreen output, safer ROM and archive opening, drag-and-drop and file associations, camera selection, and persistent window sizing.
- Adds self-contained native packages for Linux x86-64, Windows x86-64, macOS x86-64, and macOS arm64, with release-gated cross-platform validation, SBOMs, checksums, and provenance checks.
- Expands SGB and hardware-profile accuracy with practical SGB commands, independent four-player input, exact SGB2 behavior, and a Game Boy Pocket profile.
- Fixes compatibility for Sachen multicarts, Mighty Mix, Vast Fame VF001 titles, Li Cheng cartridges, Xploder GB, Makon multicarts, Zook Z, Yinghan Zidian, and related unlicensed hardware.
Additional direct changes
- Redesign Coffee GB application icon by @trekawek.
- Run native package CI only for releases by @trekawek.
- Fix release SBOM generation by @trekawek.
Merged pull requests
- #364 Harden legacy state and netplay payload boundaries by @trekawek
- #365 Add immutable machine state model by @trekawek
- #366 Add portable StateFile v1 codec by @trekawek
- #367 Integrate portable local disk snapshots (#323A) by @trekawek
- #382 Use portable StateFile in netplay protocol v8 by @trekawek
- #383 Make snapshots and battery saves crash-recoverable by @trekawek
- #384 Use immutable structurally shared snapshots for rewind by @trekawek
- #385 Retire legacy serialization from runtime state by @trekawek
- #386 Establish deterministic SGB conformance baselines by @trekawek
- #387 Complete and validate practical SGB commands by @trekawek
- #388 Implement independent 1–4 player SGB input by @trekawek
- #389 Introduce immutable hardware profiles and session clocks by @trekawek
- #390 Add exact SGB2 hardware profile and timing by @trekawek
- #392 Add immutable Game Boy Pocket hardware profile by @trekawek
- #393 Freeze netplay v9 and Mobile Adapter clean-room contracts by @trekawek
- #394 Implement protocol v9 transport foundation by @trekawek
- #395 Implement protocol v9 invitation and authentication boundary by @trekawek
- #397 Fix CGB netplay checkpoint profile metadata by @trekawek
- #396 Implement protocol v9 manifest pairing boundary by @trekawek
- #398 Implement protocol v9 consent and bounded transfers by @trekawek
- #401 Fix v8 transferred CGB checkpoint ownership by @trekawek
- #402 Implement v9 portable state transport and rollback by @trekawek
- #403 Add bounded netplay diagnostics and trusted-LAN discovery by @trekawek
- #404 Establish Desktop 2.0 CLI and settings contracts by @trekawek
- #405 Add desktop preferences and keyboard mapping by @trekawek
- #406 Add gamepad and audio preferences by @trekawek
- #407 Add resizable high-DPI fullscreen display by @trekawek
- #408 Build safe ROM loading and persistence foundations by @trekawek
- #409 Unify safe desktop ROM opening by @trekawek
- #410 Complete managed state and recovery UX by @trekawek
- #411 Build self-contained native application packages by @trekawek
- #412 Add cross-platform native package validation by @trekawek
- #414 Polish Desktop 2.0 controls and preferences by @trekawek
- #415 Fix macOS Maven test temp paths by @trekawek
- #416 Restore invalid-header homebrew ROM loading by @trekawek
- #417 Dismiss link loading overlay after startup by @trekawek
- #418 Route macOS Dock quit through desktop shutdown by @trekawek
- #419 Restore safe 7z ROM loading by @trekawek
- #420 Persist desktop window size by @trekawek
- #422 Detect the Super 21 in 1 Makon multicart by @trekawek
- #426 Preserve the Yinghan Zidian title screen by @trekawek
- #421 Support Li Cheng unlicensed cartridge banking by @trekawek
- #424 Support Super Donkey Kong 5 multicart registers by @trekawek
- #423 Add Xploder GB pass-through mapper support by @trekawek
- #428 Add camera selection to Preferences by @trekawek
- #425 Add Zook Z VF001 challenge-response support by @trekawek
- #427 Add general Vast Fame VF001 protection by @trekawek
- #429 Fix Mighty Mix second menu page by @trekawek
- #430 Fix Sachen multicarts with skipped boot by @trekawek
Fixed issues
- #234 4 in 1 (Europe) all the menus are messed up
- #171 31-in-1 Mighty Mix fails to load
- #375 Zhihuan Wang 2 fails to load
- #373 Yinghan Zidian is missing the title screen
- #376 Zook Z fails to load
- #380 Super 21 in 1 only loads Alleyway
- #368 Xin Guangming Yu Hei'an 2 fails to load
- #381 Super Donkey Kong 5 Rumble Version fails to load
- #371 Xploder GB v1.2.3E fails to load
- #307 Add drag-and-drop ROM loading
- #339 Add cross-platform package CI and release validation
- #338 Build self-contained native packages
- #334 Add preferences for input, audio, display, and saves
- #337 Add state browser, autosave recovery, and screenshots
- #336 Unify ROM opening, archives, recents, associations, and drag-and-drop
- #335 Implement resizable, fullscreen, aspect-correct high-DPI display
- #350 Add netplay diagnostics and opt-in LAN discovery
- #349 Integrate portable netplay state transport and validate rollback
- #400 Fix CGB transferred-ROM checkpoint identity rejection
- #348 Add netplay invitations, pairing, manifests, and transfer consent
- #347 Implement bounded netplay framing and capability negotiation
- #346 Specify netplay and Mobile Adapter fixtures
- #345 Add a Game Boy Pocket profile and document profile extension
- #344 Add evidence-backed SGB2 timing and model behavior
- #343 Introduce immutable hardware profiles and per-session clocks
- #342 Implement independent 1–4 player SGB input
- #341 Complete and validate the practical SGB command set
- #340 Establish SGB conformance and deterministic baselines
- #326 Retire legacy serialization from normal paths
- #325 Optimize rewind snapshots with copy-on-write memory
- #324 Add crash-safe atomic state and battery writes
- #323 Integrate the portable state codec with disk and netplay
- #322 Implement the portable bounded state codec
- #321 Define the complete immutable machine-state model
- #320 Harden legacy deserialization and payload limits
Native package signing evidence
- Linux x86-64: unsigned
- Windows x86-64: unsigned
- macOS x86-64: unsigned
- macOS arm64: unsigned
Known platform limitation
On macOS, game controllers require a compatible system SDL2 installation; keyboard input and emulation remain usable without it.
Thanks to @trekawek for all contributions in this release.
Full changelog: coffee-gb-1.7.14...coffee-gb-1.7.15