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
- With
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.
- With
-
Not Officially Supported
- While it works very well due to its interoperability with C, Zig is not officially supported on the Playdate. If you are having any issues, feel free to open a bug report here.
-
Be Mindful Of The Stack
- You only get 10KB of stack space. That's it. I have not tested much of Zig's std on the Playdate, but std was not designed for a stack this small. See how far you can get, but you might want to write a lightweight "toolbox" library, like I did for UPWARD.
std.fmt.bufPrintZ
works well, though!.
- You only get 10KB of stack space. That's it. I have not tested much of Zig's std on the Playdate, but std was not designed for a stack this small. See how far you can get, but you might want to write a lightweight "toolbox" library, like I did for UPWARD.
- Either macOS, Windows, or Linux.
- Zig compiler 0.14.0 or newer. Pulling down the latest build from master is your best bet.
- If you want to use the latest stable release of Zig, v0.13.0, please pull from the
template-for-zig-v0.13.0
tag of this repo.
- If you want to use the latest stable release of Zig, v0.13.0, please pull from the
- Playdate SDK 2.5 or later installed.
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 inmain.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.
- Make sure the Playdate SDK is installed, Zig is installed and in your PATH, and all other requirements are met.
- Make sure the Playdate Simulator is closed.
- Run
zig build run
.- If there any errors, double check
PLAYDATE_SDK_PATH
is correctly set.
- If there any errors, double check
- You should now see simulator come up and look the screenshot here.
- When you quit out to the home menu, change the home menu to view as list and you should see the "Hello Zig" program with a custom icon like here.
- Optionally, connect your Playdate to the comupter and upload to the device by going to
Device
->Upload Game to Device..
in the Playdate Simulator.- It should load and run on the hardware as well!
- You can generate a release build with either
zig build -Doptimize=ReleaseFast
orzig 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.