playdate-rs

crates.io docs workflow-status

Note: Prior to reaching v0.1.0, this is a work in progress. The API is incomplete, and breaking changes can occur frequently across versions.

Safe binding for the Playdate SDK C-API that:

  1. Is easy to use and well documented.
  2. Does not require the Rust nightly toolchain.
  3. Is designed with memory safety in mind.

Only works on Linux/macOS with the playdate simulator for now.

Getting Started

  1. Ensure that the environment variable PLAYDATE_SDK_PATH is correctly set.
  2. Install the CLI tool: cargo install playdate-cli
  3. Create a new project: cargo playdate new hello-world
  4. Run the project: cd hello-world && cargo playdate run

Please refer to Playdate CLI docs for all the available CLI commands.

Application Bundling

The cargo playdate build command will automatically create a target/<profile>/<package_name>.pdx folder that can run on the simulator. For the device build, it will be located at target/thumbv7em-none-eabihf/<profile>/<package_name>.pdx.

Game assets bundling

Please put all assets files under the assets folder in the project's root directory (the folder containing Cargo.toml). The CLI will automatically copy all contents to the .pdx folder. All supported resources will be transformed by the pdc compiler.

For more details, please refer to the examples/hello-world project.

pdxinfo generation and bundling

The CLI will automatically generate a pdxinfo file under the .pdx folder. There are two ways to set the content of the pdxinfo file:

  1. Create a pdxinfo file in the project's root directory (the folder containing Cargo.toml). The CLI will automatically pick it up.
  2. Create a [package.metadata.pdxinfo] section in Cargo.toml:

toml [package.metadata.pdxinfo] name = "Your game name" # Default value: package.name author = "Your Name" # Default value: package.authors description = "Your game description" # Default value: package.description bundle_id = "com.your-game.bundle-id" # Default value: "com.example." + package.name image_path = "image/path" # Default value: empty string launch_sound_path = "launch/sound/path" # Default value: empty string content_warning = "Content warning" # Default value: empty string content_warning2 = "Content warning 2" # Default value: empty string

Note that all fields in [package.metadata.pdxinfo] are optional. The default value will be derived from other fields in Cargo.toml. Please refer to the # Default value comments above.

Example: examples/hello-world/Cargo.toml.

TODO