>[!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