>[!note] >This is purely for my own reference as I can't remember these for the life of me. The internal structures here are likely incomplete, but are a decent starting point. # `.pbw` = watchfaces & apps `.pbw` files are the most commonly encountered format, used for watchfaces and applications. They are a ZIP archive that can be extracted to view the contents of. ### Internal Structure - `appinfo.json` - Metadata about the app - **Platform directories** (e.g. `aplite/` `basalt/`, `chalk/`) - `app_resources.pbpack` - The app's resources (icons, fonts, etc.) - `manifest.json` - Metadata about the app binary and resources - `pebble-app.bin` - The compiled C code - `pebble-js-app.js` - PKJS code, including any node.js libraries which are used - `pebble-js-app.js.map` - Maps the minimized JS code back to its original source # `.pbl` = language packs Language packs are a [`.pbpack`]([[#`.pbpack` = generic resources file]]) in disguise! They allow for installing custom character sets. These can include different alphabets/writing systems, emoji, and probably more. # `.pbz` = firmware Most users (and even developers) will never need to interact with a `.pbz` file as the Pebble app will automatically manage updates for them. Note that some firmware updates may require migration firmware to be flashed first! ### Internal Structure - `js_tooling.js` - Build/patch helper used to prepare resources for the firmware - `layouts.json.auto` - Map of where resources are??? Not really sure. - `LICENSE` - This will vary and probably isn't required... - Versions from Pebble Technology will refer to their copyright and terms of use. - Versions of the original firmware distributed by Rebble will add a note about being under a special license from Fitbit. - Open source PebbleOS variants should have a copy of the Apache 2.0 license. - `manifest.json` - Metadata about the firmware image. - This is likely how the app checks if the firmware is compatible with the connected device. - Additional safety checks are likely performed by the device before flashing. - Points to the firmware and resources binaries. - Includes version info. - `system_resources.pbpack` - Resources for the operating system (icons, fonts, images, etc.) - `tintin_tw.bin` - The compiled firmware code - This is named the same regardless of the platform being built for. # `.pbpack` = generic resources file The `.pbpack`is also known as a Pebble Resource File. It's a proprietary format used throughout the entire Pebble software ecosystem. As shown above, it's used in (or just is) all three. They can serve as containers for: - Images - Fonts - Binary assets needed by apps/watchfaces - Resource metadata Tools like [pbpack_tool](https://github.com/xndcn/pebble-firmware-utils/blob/for-language-pack/pbpack_tool.py) exist to manually pack and unpack these archives. #pebble