Skip to content

Releases: Djunichi/gopdsdk

gopdsdk v0.9.0 - Complete Offline Sound

Choose a tag to compare

@Djunichi Djunichi released this 12 Aug 10:37
b6e38fc

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

Choose a tag to compare

@Djunichi Djunichi released this 09 Aug 11:05
8f81029

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/spritepresentation into the repository-owned acceptance scene.

All additions are backward-compatible with v0.7.0.

Verification

The release passed:

  • formatting, go test ./..., go vet ./..., and git 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

Choose a tag to compare

@Djunichi Djunichi released this 08 Aug 21:18
644518d

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

Choose a tag to compare

@Djunichi Djunichi released this 08 Aug 14:45
5d2add2

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.BitmapCompositor for 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/diagnostics collector 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.Context contract 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 gopdsdkgame diagnostics 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.0

gopdsdk v0.5.0 - Advanced Audio and Microphone Support

Choose a tag to compare

@Djunichi Djunichi released this 03 Aug 14:56
5374c3c

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

Choose a tag to compare

@Djunichi Djunichi released this 02 Aug 19:39
4d9bfe4

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.ErrTileMapDraw and 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 through errors.Is.
  • Device validation now distinguishes unsupported channel operations from safe runtime.chanLen and runtime.chanCap helpers 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

Choose a tag to compare

@Djunichi Djunichi released this 02 Aug 15:58
b3c8bd7

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.Launcher support through the official exitToLauncher path.
  • 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-game

gopdsdk v0.2.0 - Sprites, Collisions, Animation, Audio, and Fonts

Choose a tag to compare

@Djunichi Djunichi released this 01 Aug 20:41
879cf18

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

Choose a tag to compare

@Djunichi Djunichi released this 01 Aug 16:37
9961f13

What's Changed

Full Changelog: v0.1.0...v0.1.1

gopdsdk v0.1.0 - First Public Release

Choose a tag to compare

@Djunichi Djunichi released this 01 Aug 16:25
743402a

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