---
title: "<code class=\"docutils literal notranslate\"><span class=\"pre\">pbl</span> <span class=\"pre\">bundle</span></code>"
canonical_url: https://developer.repebble.com/pebbleos/docs/pbl/bundle/
last_updated: 2026-10-21
sdk_version: 4.33.1
---
# <code class="docutils literal notranslate"><span class="pre">pbl</span> <span class="pre">bundle</span></code>

Source: https://developer.repebble.com/pebbleos/docs/pbl/bundle/

Package the firmware and its resources into a `.pbz` bundle, the format the Pebble mobile app installs.

```
pbl bundle
```

The bundle is written to the build directory as `<variant>_<board>_<version>.pbz`, with a `_slot<n>` suffix when the board has more than one firmware slot.

## Sideloading with the Pebble app

Transfer the `.pbz` to the phone paired with the watch. In the Pebble app, enable `Settings -> Show debug options`, go back to the Devices tab, tap your watch, then `Firmware Update Debug -> Sideload FW`, and select the file. The app starts the update and shows its progress on the watch card.

## Sideloading over adb

On Android, repeated installs are better scripted over adb, which installs without asking. The broadcast needs an adb shell, which holds the `android.permission.DUMP` it requires, and `Show debug options` on in the app. `$PBZ` is the bundle:

```
adb push $PBZ /data/local/tmp/firmware.pbz
adb shell am broadcast -a coredevices.pebble.SIDELOAD_FIRMWARE \-n coredevices.coreapp/coredevices.pebble.firmware.FirmwareSideloadReceiver \--es path /data/local/tmp/firmware.pbz
```

The app waits up to a minute for the watch to be connected, then starts the update and shows its progress on the watch card in the Devices tab.

Not every Android version lets an app read `/data/local/tmp`. If the app reports the file as missing, create `/sdcard/Android/data/coredevices.coreapp/cache` and push it there instead.

## Sideloading with the `pebble` tool

With the [Developer Connection](https://developer.repebble.com/guides/tools-and-resources/developer-connection.md) enabled in the Pebble app, the [`pebble` tool](https://developer.repebble.com/sdk.md) installs the bundle over Bluetooth through the phone:

```
pebble fw install build/normal_asterix_<version>.pbz --phone <phone-ip>
```

Use `--cloudpebble` instead of `--phone` when the phone is connected through the CloudPebble proxy. `--slot 0|1` picks the slot for multi-slot bundles.

## Options

```
pbl bundle [-h] [-b DIR] [--dry-run]
```

Generated from PebbleOS [3a7b71785](https://github.com/coredevices/pebbleos/commit/3a7b71785fd439666c4a8bc116f561140e8dec01). This page is maintained in the pebbleos repository: [docs/pbl/bundle.md](https://github.com/coredevices/pebbleos/blob/3a7b71785fd439666c4a8bc116f561140e8dec01/docs/pbl/bundle.md).
