{"id":13633039,"url":"https://github.com/cranksters/playdate-reverse-engineering","last_synced_at":"2025-04-18T10:33:49.039Z","repository":{"id":40393589,"uuid":"464687607","full_name":"cranksters/playdate-reverse-engineering","owner":"cranksters","description":"Panic Playdate reverse-engineering notes/tools - covers file formats, server API and USB commands","archived":false,"fork":false,"pushed_at":"2024-07-16T10:52:55.000Z","size":122,"stargazers_count":233,"open_issues_count":0,"forks_count":16,"subscribers_count":14,"default_branch":"main","last_synced_at":"2024-08-01T23:30:51.892Z","etag":null,"topics":["file-formats","playdate","playdate-reverse-engineering","reverse-engineering","usb-serial"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cranksters.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"jaames"}},"created_at":"2022-03-01T00:16:48.000Z","updated_at":"2024-08-01T23:30:55.836Z","dependencies_parsed_at":"2022-08-09T19:10:27.991Z","dependency_job_id":"8a3d16dd-bca8-4e71-b85d-29c34238ba54","html_url":"https://github.com/cranksters/playdate-reverse-engineering","commit_stats":null,"previous_names":["cranksters/playdate-reverse-engineering","jaames/playdate-reverse-engineering"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cranksters%2Fplaydate-reverse-engineering","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cranksters%2Fplaydate-reverse-engineering/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cranksters%2Fplaydate-reverse-engineering/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cranksters%2Fplaydate-reverse-engineering/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cranksters","download_url":"https://codeload.github.com/cranksters/playdate-reverse-engineering/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249479043,"owners_count":21279184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["file-formats","playdate","playdate-reverse-engineering","reverse-engineering","usb-serial"],"created_at":"2024-08-01T23:00:25.505Z","updated_at":"2025-04-18T10:33:49.004Z","avatar_url":"https://github.com/cranksters.png","language":"Python","funding_links":["https://github.com/sponsors/jaames"],"categories":["Game Development","Game \u0026 Studio Tools"],"sub_categories":["Programming Frameworks \u0026 Languages","Panic"],"readme":"Unofficial Playdate reverse-engineering notes/tools - covers file formats, server API and USB serial commands\n\n\u003e ⚠️ This documentation is unofficial and is not affiliated with Panic. All of the content herein was gleaned from reverse-engineering Playdate tools and game files, and as such there may be mistakes or missing information. \n\n## Documentation\n\n- **File Formats**\n  - **Playdate game formats**\n    - [**pdex.bin**](formats/pdex.md) - Executable code\n    - [**.luac**](formats/luac.md) - Lua bytecode\n    - [**.pdz**](formats/pdz.md) - File container\n    - [**.pda**](formats/pda.md) - Audio file\n    - [**.pdi**](formats/pdi.md) - Image file\n    - [**.pdt**](formats/pdt.md) - Imagetable file\n    - [**.pdv**](formats/pdv.md) - Video file\n    - [**.pds**](formats/pds.md) - Strings file\n    - [**.pft**](formats/pft.md) - Font file\n  - **Other formats**\n    - [**.fnt**](formats/fnt.md) - Font source file\n    - **.strings** - Strings source file (TODO)\n- **Server**\n  - [**Playdate API**](server/api.md) - Main Playdate server API\n- **Misc**\n  - [**USB**](usb/usb.md) - USB serial interface\n  - [**Streaming**](usb/stream.md) - Video/audio streaming protocol (via USB serial), used by Playdate Mirror\n\n## Tools\n\n- [**`pdz.py`**](tools/pdz.py) - Unpacks all files from a `.pdz` file container.\n- [**`pdex2elf.py`**](tools/pdex2elf.py) - Converts a `pdex.bin` to an ELF file that can be analyzed in tools such as readelf, objdump or Ghidra, or compiled back to the same original `pdex.bin` by `pdc`.\n- [**`usbeval.py`**](tools/usbeval.py) - Uses the Playdate's USB `eval` command to evaluate a Lua script over USB. Has access to the Lua runtime of the currently loaded game, except for system apps.\n\n## Related Projects and Resources\n\n- [**pd-usb**](https://github.com/jaames/pd-usb) - JavaScript library for interacting with the Playdate's serial API from a WebUSB-compatible web browser.\n- [**unluac**](https://github.com/scratchminer/unluac) - Fork of the unluac Lua decompiler, modified to support Playdate-flavoured Lua.\n- [**lua54**](https://github.com/scratchminer/lua54) - Fork of Lua that aims to match the custom tweaks that Panic added for Playdate-flavoured Lua.\n\n## Special Thanks\n\n - [Zhuowei](https://github.com/zhuowei) for this [script for unpacking Playdate .pdx executables](https://gist.github.com/zhuowei/666c7e6d21d842dbb8b723e96164d9c3), which was the base for `pdz.py`\n - [Scratchminer](https://github.com/scratchminer) for their further reverse-engineering work on the Playdate's [file formats](https://github.com/scratchminer/pd-emu), streaming protocol and [Lua implementation](https://github.com/scratchminer/lua54).\n - [Simon](https://github.com/simontime) for helping with some ADPCM audio data reverse engineering\n - The folks at [Panic](https://panic.com/) for making such a wonderful and fascinating handheld!\n\n ----\n\n 2022-2023 James Daniel\n\n Playdate is © [Panic Inc.](https://panic.com/) - this project isn't affiliated with or endorsed by them in any way.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcranksters%2Fplaydate-reverse-engineering","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcranksters%2Fplaydate-reverse-engineering","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcranksters%2Fplaydate-reverse-engineering/lists"}