Releases: Djunichi/gopdsdk
Release list
gopdsdk v0.9.0 - Complete Offline Sound
gopdsdk v0.9.0
This release completes gopdsdk’s offline Playdate sound surface.
Highlights
- Owned audio samples with loading, reloading, borrowed data inspection, copying, decompression, playback ranges, and loop callbacks
- Streaming file-player buffering, loop ranges, reload, and underrun controls
- Explicit audio channels, routing, volume, pan, effects, and modulation
- Headphone, headset-microphone, and speaker-output state and control
- Wavetable and custom-generator synthesis
- Envelope controls, LFOs, control signals, instruments, tracks, and sequences
- Bounded update-thread PCM and custom-generator callbacks
- Fixed native callback pools and 4,096-frame rings that prevent Go re-entry from the audio thread
- Sequence, track, note, signal, and controller introspection
Raw generator userdata/function pointers remain intentionally omitted in favor
of bounded portable Go contracts. setMP3StreamSource is also omitted because
Playdate SDK 3.1.1 does not document a shipping-device contract for it;
packaged MP3 playback remains available through FilePlayer.
Compatibility and verification
The verified Windows profile uses:
- Go 1.26.5
- Playdate SDK 3.1.1
- TinyGo 0.41.1 with LLVM 20.1.1
- Arm GNU Toolchain GCC 15.3.1
The release checkout passes the full Go test and vet suites, formatting and
diff checks, Simulator c-shared compilation and packaging, and conservative
hard-float device compilation, linking, relocation checks, and packaging.
Final P9 acceptance covers routing, headphone states, samples, wavetable and
custom synthesis, callbacks, underruns, lifecycle cleanup, conservative-GC
soak, bounded memory growth, and unchanged post-run device logs.
macOS and Linux native Go CI remain supported; official SDK, Simulator, device
build, USB, and physical-device integration on those hosts remain unverified.
See CHANGELOG.md, API.md, MIGRATING.md, and COMPATIBILITY.md for the
complete contracts and evidence.
gopdsdk v0.8.0 - Complete Sprites and Collisions
gopdsdk v0.8.0 completes the offline Playdate sprite and collision surface.
Highlights
- Added sprite geometry and presentation controls:
- center, bounds, and position getters
- image flip, draw mode, and opacity
- stencil images and patterns
- clip rectangles and draw-offset policy
- deterministic update and collision enablement
- Added explicitly owned native sprite tilemaps with validated attachment, access, and lifetime behavior.
- Added line and detailed-hit queries, non-mutating collision checks, sprite count, bulk membership operations, remove-all synchronization, and collision-world reset.
- Added bounded per-sprite draw, update, and pair-specific collision-response callbacks.
- Callback registration is limited to 64 slots per context, with deterministic cleanup and suppression after lifecycle termination.
- Expanded
examples/spritepresentationinto the repository-owned acceptance scene.
All additions are backward-compatible with v0.7.0.
Verification
The release passed:
- formatting,
go test ./...,go vet ./..., andgit diff --check - native CI on Windows, macOS, and Linux
- Linux race detector
- external-consumer CLI checks
- official Playdate SDK 3.1.1 Simulator integration on Windows
- conservative hard-float device build
- USB installation and physical Playdate execution
- the complete presentation, query, collision, and callback acceptance matrix
- the required 60-second conservative-GC soak
- bounded memory-growth and unchanged post-run device-log checks
The accepted device artifact uses:
- 283,104 bytes of static RAM
- 1,479,780-byte ELF
- 73,656-byte PDX
Verified toolchain
- Go 1.26.5
- Playdate SDK 3.1.1
- TinyGo 0.41.1 with LLVM 20.1.1
- Arm GNU Toolchain GCC 15.3.1
Official SDK, Simulator, device-build, USB, and physical-device integration remain verified on Windows. macOS and Linux are covered by native CI, but their official SDK and device integration remain unverified.
See CHANGELOG.md, API.md, MIGRATING.md, and COMPATIBILITY.md for the complete contracts and evidence.
gopdsdk v0.7.0 - Complete Graphics and Display
gopdsdk v0.7.0 completes the P7 graphics and display scope.
Highlights
- Advanced drawing state:
- filled polygons
- rounded rectangles
- line-cap styles
- background color
- screen-coordinate clipping
- Owned bitmap data access with explicit callback and dirty-tracking contracts
- Bitmap copying, in-place loading, tables, masks, collision, and rotation
- Persistent display-buffer snapshots
- Bounded text layout with wrapping, alignment, tracking, and leading
- Font metrics, glyph access, advance, and kerning
- Display width, height, nominal refresh rate, and measured FPS introspection
- Additive public API: existing v0.6 applications can upgrade unchanged
Verification
The acceptance scenes passed deterministic tests and official Playdate SDK
3.1.1 Simulator execution on Windows.
Conservative-GC hard-float device builds, USB installation, and physical
Playdate execution also passed. The physical soak, bounded-memory,
memory-growth, and post-run device-log checks completed successfully on
2026-08-08.
Full graphics performance regression and isolated visual assertions for every operation remain unverified and are not claimed by this release.
Verified toolchain
- Go 1.26.5
- Playdate SDK 3.1.1
- TinyGo 0.41.1
- Arm GNU Toolchain GCC 15.3.1
See CHANGELOG.md
for the complete change list and
MIGRATING.md
for upgrade guidance.
gopdsdk v0.6.0 - Advanced Graphics, Video, and Diagnostics
gopdsdk v0.6.0
This release completes P6 with advanced graphics composition, display and
sprite redraw controls, optional PDV video playback, and bounded external-game
diagnostics.
Highlights
- Added
playdate.BitmapCompositorfor rotated and scaled bitmap drawing. - Added callback-scoped stencil composition with validated ownership and
graphics-state restoration. - Added optional physical-display presentation controls.
- Added global dirty-region policy and per-sprite redraw invalidation.
- Added explicitly owned PDV video players with metadata, frame stepping,
looping, and screen or offscreen targets. - Added the allocation-free
playdate/diagnosticscollector for frame-time
distributions, live-heap growth, and owned native-resource counts. - Added deterministic composition, sprite-redraw, and video acceptance scenes.
- Embedded project-owned Simulator and device bridge sources as package assets.
- Preserved the existing
playdate.Contextcontract through optional
capability interfaces.
Acceptance and verification
The P6 feature set passed:
- Native Go tests and generated Simulator/device ABI regression tests.
- Official Playdate SDK 3.1.1 packaging and Windows Simulator acceptance.
- Conservative hard-float device builds.
- USB deployment and physical Playdate acceptance.
- Comparative full-redraw and dirty-region checks.
- Bounded-memory and native-resource regression checks.
- Physical-device soak and post-run device-log inspection.
- External
gopdsdkgamediagnostics runs in the Simulator and on hardware.
The verified toolchain remains:
- Go 1.26.5
- Playdate SDK 3.1.1
- TinyGo 0.41.1 with LLVM 20.1.1
- Arm GNU Toolchain 15.3.1
macOS and Linux native Go CI is covered. Official SDK, Simulator, device-build,
USB, and physical-hardware execution on those hosts remains unverified.
Upgrade
Existing v0.5 applications can update without changing their base
playdate.Context usage:
go get github.com/Djunichi/gopdsdk@v0.6.0gopdsdk v0.5.0 - Advanced Audio and Microphone Support
Highlights
gopdsdk v0.5.0 completes the P5 advanced audio and music milestone.
This release adds advanced playback controls, audio routing and modulation, synthesizers, instruments, sequencing, effects, permission-gated microphone input, WAV recording, and playback of captured PCM audio.
What’s new
Advanced sample playback controls, fades, and completion callbacks
Owned audio channels and routing graphs
Waveform synthesizers and modulation signals
Instruments, tracks, sequences, and typed audio effects
Permission-gated microphone recording
Separate microphone and audio error domains
Callback-scoped microphone sample access with bounded copying
Device microphone delivery through a bounded native FIFO
Creation of native-owned PCM players from signed 16-bit mono samples
Microphone example with live peak monitoring, recording controls, WAV persistence, and audible playback
Compatibility
Existing v0.4 applications can upgrade without changes. The new functionality is exposed through optional capabilities and does not widen the base playdate.Context interface.
gopdsdk remains pre-v1. Minor releases may contain intentional API changes documented in the release notes and migration guide.
Validation
The release passed:
Full Go test suite
Go vet
Public API and generated ABI regression tests
Official Playdate Simulator microphone acceptance on Windows
Physical Playdate microphone recording, stop/start, WAV saving, and audible PCM playback
Physical-device acceptance for the advanced P5 audio features
The accepted microphone example used 282,824 bytes of static RAM and produced a 50,601-byte hard-float PDX.
See MIGRATING.md for upgrade guidance and COMPATIBILITY.md for detailed evidence and remaining validation boundaries.
gopdsdk v0.4.0 - Persistence and Playdate System Integration
Highlights
gopdsdk v0.4.0 adds durable game state and the Playdate system facilities needed by a complete offline game.
Persistence
- Owned Playdate filesystem operations with portable error classification
- Bounded, checksummed, versioned stores
- Atomic replacement with backup recovery
- Explicit step-by-step save migrations
- Deterministic corruption and failed-write handling
Playdate system integration
- Owned action, checkmark, and options System Menu items
- System language and localized string lookup
- Accelerometer support with explicit enablement
- Battery, power, volume, timezone, clock-format, and reduce-flashing status
- Exit to Launcher through the normal lifecycle path
Optional facilities
- Bounded asynchronous scoreboards API
- Simulator and serial debug-message FIFO
- Callback cleanup and suppression after termination
Integrated acceptance game
Crank Caverns now integrates the complete P1–P4 surface using only public gopdsdk APIs:
- Persistent settings, progress, score, and best time
- Explicit save/load checkpoints
- Continue Run and Start New flows
- Four generations of save-schema migration
- Localized System Menu settings
- Battery status and Launcher exit
- Simulator and physical-device packaging/deployment
Compatibility changes
- Tile-map draw failures continue to classify as both
playdate.ErrTileMapDrawand their underlying cause, but no longer concatenate arbitrary cause text. - Store migration failures continue to classify as
store.ErrMigration; their direct cause is also available througherrors.Is. - Device validation now distinguishes unsupported channel operations from safe
runtime.chanLenandruntime.chanCaphelpers retained by TinyGo reflection tables.
Applications must not parse error strings. Use errors.Is or concrete error types.
Verified profile
- Go 1.26.5
- Playdate SDK 3.1.1
- TinyGo 0.41.1 with LLVM 20.1.1
- Arm GNU Toolchain GCC 15.3.1
- Windows Simulator and conservative-GC device build
- USB installation and device launch through COM3
macOS and Linux native Go behavior is covered by CI. Official SDK, Simulator, and physical-device execution on those hosts remains unverified.
Extended physical-device soak, memory-growth measurement, live configured scoreboards, and injected power-loss testing remain outside this release’s verified evidence.
Upgrading
Existing v0.3 applications can upgrade without adopting the new optional capabilities.
See:
gopdsdk v0.3.0 - Production-capable 2D rendering and game worlds
gopdsdk v0.3.0 completes the P3 scope, providing the public graphics and world-building capabilities required for conventional 2D Playdate games.
Highlights
- Immediate-mode lines, rectangles, ellipses, and triangles, including filled variants.
- Solid, XOR, and value-owned 8×8 pattern paints.
- Clipping, draw offsets, and bitmap draw modes.
- Callback-scoped, zero-copy framebuffer access with explicit dirty-row reporting.
- Drawing into explicitly owned offscreen bitmaps with automatic drawing-context restoration.
- Copied-data tile maps and clamped cameras with rendering work bounded to visible cells.
- Static tile overlap queries kept separate from sprite collision.
- Explicit scene-local resource ownership, initialization rollback, and deterministic cleanup.
playdate.Launchersupport through the officialexitToLauncherpath.- Launcher artwork packaging through
pdxinfo.imagePath. - New focused examples for primitives, framebuffer drawing, tile maps, cameras, and application navigation.
Integrated acceptance game
Crank Caverns is the external P3 acceptance game. Its repository is currently private, but the link is retained as the canonical reference.
The game uses only the public gopdsdk API and combines:
- lifecycle and input handling;
- crank controls;
- owned bitmaps and offscreen drawing;
- sprites and collision queries;
- bitmap-table animation;
- sound effects and streaming music;
- custom-font UI;
- primitives and graphics state;
- direct framebuffer access;
- tile maps and camera movement;
- in-process menu transitions and Launcher exit.
Compatibility
The verified Windows toolchain profile remains:
- Go 1.26.5
- Playdate SDK 3.1.1
- TinyGo 0.41.1
- Arm GNU Toolchain GCC 15.3.1
The complete Go test suite, vet checks, external-game tests, Simulator SDK probe, and hard-float device-build/package probe passed for this release candidate.
Official SDK, Simulator, and physical-device execution on macOS and Linux remain unverified. Fixed frame-time, bounded-heap, extended physical-device soak, termination cleanup observation, and post-run device-log measurements for the integrated game also remain unverified.
See CHANGELOG.md and COMPATIBILITY.md for the complete changes and evidence levels.
Install
go run github.com/Djunichi/gopdsdk/cmd/gopdsdk@v0.3.0 doctor
go run github.com/Djunichi/gopdsdk/cmd/gopdsdk@v0.3.0 init --module example.com/my-game ./my-gamegopdsdk v0.2.0 - Sprites, Collisions, Animation, Audio, and Fonts
gopdsdk v0.2.0
This release completes the P2 scope and expands the portable Playdate API with sprites, collisions, animation, audio, and custom fonts.
Highlights
- Explicitly owned sprites with display-list management, positioning, visibility, and z-index.
- Collision rectangles, resolved movement, four response modes, and spatial queries.
- Owned bitmap tables and allocation-free delta-time animation.
- Short sound effects and streaming file players with volume, state, lifecycle handling, and explicit cleanup.
- Custom-font loading, native text measurement, and selected-font drawing.
- An exported API snapshot test that makes future public API changes explicit.
- New playable examples for sprites, collisions, animation, audio, and custom-font UI.
Compatibility
The verified toolchain profile remains:
- Go 1.26.5
- Playdate SDK 3.1.1
- TinyGo 0.41.1
- Arm GNU Toolchain GCC 15.3.1
Windows remains the verified host for official SDK and physical-device workflows. macOS and Linux are covered by native CI, but official Simulator, device build, and USB execution remain unverified on those hosts.
See API.md, COMPATIBILITY.md, and CHANGELOG.md for the complete API contract, evidence levels, and release details.
This module remains pre-v1. Minor releases may intentionally change the public API when documented in the release notes.
gopdsdk v0.1.1 - First Public Release
gopdsdk v0.1.0 - First Public Release
gopdsdk v0.1.0
The first public release of gopdsdk — an independent, cross-platform Go SDK and toolchain for building Playdate applications.
Highlights
- Common Go application model for Simulator and physical Playdate
- Lifecycle events: pause, resume, lock, unlock, terminate, and low power
- Buttons, crank angle and delta, dock transitions, and frame delta time
- Text and bitmap graphics
- Packaged resources through
resources/images - Explicit bitmap ownership, rollback, and deterministic cleanup
- TinyGo conservative GC with a checked 256 KiB device heap
- Hard-float Cortex-M7 device builds
- Build, package, install, and run workflows for Simulator and device
- Version-aware
gopdsdk init - External crank-controlled playable consumer with deterministic tests
Getting started
Check your environment:
go run github.com/Djunichi/gopdsdk/cmd/gopdsdk@v0.1.0 doctor