Write your Playdate game in Zig! Use this template as a starting point to write your games in Zig. The build.zig
will allow you to generate a Playdate .pdx
executable that will work both in the simulator and on hardware.
Not Everything Has Been Tested
zig translate-c
and a bunch of customization by hand, I converted the C API of the Playdate SDK to Zig. While I have battle tested a lot of the APIs in my upcoming Pictoblox game and in my port of UPWARD, there is much of the API here that has not been tested — especially, the Sprite, JSON, Synth, and Sound Effect APIs. If something isn’t working, please check against the headers in the Playdate SDK C API and make sure the APIs match. Please open a bug report if the APIs don’t match.Not Officially Supported
Be Mindful Of The Stack
std.fmt.bufPrintZ
works well, though!.build.zig
— Prepopulated with code that will generate the Playdate .pdx
executable.src/playdate_api_definitions.zig
— Contains all of the Playdate API code. This is 1-to-1 with Playdate’s C APImain.zig
— Entry point for your code! Contains example code that draws the Zig logo and inverts the screen colors when “A” is held.panic_handler.zig
— The default Zig panic handler will cause the simulator and hardware to crash without any error message. I wrote my own handler, so panics should now be handled gracefully with proper error messages.pdxinfo
— This contains all of the metadata for your game. Panic provides documentation for this file here.assets/
— This folder will contain your assets and has an example image that is drawn to the screen in the example code in main.zig
.vs-code-launch-config
— This contains instructions and starter configuration files for running and debugging your game on Visual Studio Code. I also made a video on how to do this as well.Zig natively supports cross-compilation. This is leveraged to not only generate an executable that runs on the Playdate hardware, but also to generate a PDX that works across all supported OSs regardless of what OS the game is compiled on. So, any PDX generated by this template should run on the Playdate Simulator on either macOS, Windows or Linux, and also run on Playdate hardware.
NOTE for Intel Mac users: PDXs generated by this template on Windows, Linux, and M1 Macs will only run on M1 Macs. However, if you compile on an Intel Mac, it will generate a PDX that runs on Windows, Linux, and Intel Macs. But it will not run on M1 Macs. When compiling on an Intel Mac, change FORCE_COMPILE_M1_MAC
in build.zig
to force the template to generate that run M1 Macs instead of Intel Macs. Of crucial note: if a PDX runs on an M1 Mac, it will not run on Intel Mac, and vice versa.
zig build run
.
PLAYDATE_SDK_PATH
is correctly set.Device
-> Upload Game to Device..
in the Playdate Simulator.
zig build -Doptimize=ReleaseFast
or zig build -Doptimize=ReleaseSafe
for a slightly slower build than ReleaseFast but with safety checks like array out-of-bounds checking. For a Playdate game, you probably want ship a ReleaseFast.