---
title: "Pebble SDK 4.44 - Changelog"
canonical_url: https://developer.repebble.com/sdk/changelogs/4.44/
last_updated: 2026-11-04
sdk_version: 4.43
---
# Pebble SDK 4.44 - Changelog

Source: https://developer.repebble.com/sdk/changelogs/4.44/

_Release Date: November 4 2026_

This release rolls up everything that shipped in firmware 4.34 through 4.44. The headline features are microphone access for apps, phone-side plugins with manifest version 2, and larger apps on Emery and Gabbro.

### Changes to Firmware

- Text that uses styled Latin letters and digits (the Mathematical Alphanumeric Symbols, Letterlike Symbols and fullwidth forms often found in display and channel names) now renders with the plain glyphs instead of wildcard boxes.
- When the active language pack has no glyph for a character, the other installed language packs are searched before the fallback font, so for example Chinese text renders while another language pack is active.
- [`wakeup_schedule()`](https://developer.repebble.com/docs/c/Foundation/Wakeup.md#wakeup_schedule "wakeup\_schedule") now only returns `E_RANGE` when the new wakeup is within a minute of one of the calling app's own wakeups. Other apps can no longer block a time slot. Wakeups from different apps that are due at the same time are spaced out when they fire instead.
- Dictation now vibrates when it fails.
- Characters in Supplementary Private Use Area-A (U+F0000 to U+FFFFD), where icon fonts such as Nerd Fonts put their glyphs, are no longer dropped before the font lookup, so custom fonts can draw them.
- A wakeup that fires after the watch has been still for 30 minutes now takes the watch out of its low power stationary mode, so the app can vibrate and turn the backlight on as usual. Vibrations and the backlight used to stay off in these wakeups.
- The "Listening" indicator shown while an app uses the microphone has a new design. On Emery and Flint, a bar slides up from the bottom of the screen and after 3 seconds shrinks into a square in the bottom-left corner. On Gabbro, a red dome with a microphone icon rises from the bottom edge. The height the indicator reserves doesn't change when the bar shrinks, so apps laid out with the unobstructed area don't move again.
- [`layer_get_unobstructed_bounds()`](https://developer.repebble.com/docs/c/User_Interface/Layers.md#layer_get_unobstructed_bounds "layer\_get\_unobstructed\_bounds") now takes the layer's position within its parent into account. A layer that doesn't start at its parent's origin, such as a content layer below a status bar, used to get bounds that reached into the obstructed area.

### Changes to SDK

- Added the Microphone API for the Emery, Flint and Gabbro platforms. Both parts are only available to foreground watchapps (never watchfaces), and the system shows a "Listening" indicator that reduces the unobstructed area while the microphone is running. Streaming and capture can't run at the same time. The Microphone API requires firmware 4.44.3. See the new [Microphone guide](https://developer.repebble.com/guides/events-and-services/microphone.md). 
  - [`mic_stream_to_phone_start()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_stream_to_phone_start "mic\_stream\_to\_phone\_start"), [`mic_stream_to_phone_stop()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_stream_to_phone_stop "mic\_stream\_to\_phone\_stop") and [`mic_stream_to_phone_is_active()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_stream_to_phone_is_active "mic\_stream\_to\_phone\_is\_active") stream the microphone to the app's PebbleKit JS companion. The phone delivers 16 kHz, 16-bit mono PCM to JavaScript as `audiostreamstart`, `audiostream` and `audiostreamstop` events.
  - [`mic_capture_start()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_capture_start "mic\_capture\_start"), [`mic_capture_stop()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_capture_stop "mic\_capture\_stop") and [`mic_capture_is_active()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_capture_is_active "mic\_capture\_is\_active") capture 16 kHz ([`MIC_CAPTURE_SAMPLE_RATE`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#MIC_CAPTURE_SAMPLE_RATE "MIC\_CAPTURE\_SAMPLE\_RATE")) mono 16-bit PCM on the watch, delivered to the app in 20 ms frames.
  - Apps must declare `WatchMicrophone` in `usesPermissions` and use manifest version 2. Otherwise the phone refuses the request (capture returns `MicCaptureStartErrPermissionDenied`). The build now warns when an app calls [`mic_capture_start()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_capture_start "mic\_capture\_start") or [`mic_stream_to_phone_start()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#mic_stream_to_phone_start "mic\_stream\_to\_phone\_start") without that permission.
  - [`layer_get_mic_accessory_bounds()`](https://developer.repebble.com/docs/c/User_Interface/Microphone.md#layer_get_mic_accessory_bounds "layer\_get\_mic\_accessory\_bounds") returns the space next to the "Listening" indicator once it has shrunk into the corner, so apps can show their own status there, such as an elapsed time or a level meter. It is always `false` on Gabbro.
- pbws are now built with `manifestVersion` 2 by default. A version 2 app only gets the permissions and network access it declares, so the build warns when an app with PebbleKit JS declares no `usesPermissions`. Version 1 is still available, but asking for it together with `plugin`, `usesPermissions` or `configPage` now fails the build.
- Added the `pebble convert-manifest` command, which converts an existing project's `package.json` to the new manifest version 2 format. Manifest version 1 is deprecated and may stop building in a future SDK release, so we recommend converting your projects now.
- Added build support for phone-side plugins. The plugin script and bundled config page declared in the `plugin` block of `package.json` are packed into the pbw, the block is validated when the project is configured, and the new `projectType` `"plugin"` builds a plugin with no watchapp.
- Apps on Emery and Gabbro can now use more than 64 KiB of code and static data, up to the platform's 128 KiB app segment. The app header now records 24-bit load and virtual sizes. Apps that use more than 64 KiB require firmware 4.40 or later.
- C++ static constructors and destructors, ` __attribute__ ((constructor))`/` __attribute__ ((destructor))` functions and `atexit()` handlers now run in apps. Constructors run before `main()`, and destructors and `atexit()` handlers run after `main()` returns (not when calling `exit()`). Apps are now linked without the toolchain startup files.
- The build now prints the toolchain it uses.
- Added the `waf clangdb` build command, which writes the compile commands the app build runs to `build/compile_commands.json`. `pebble compile-commands` uses it from pebble-tool 5.1.1, so editors see the flags, include paths and sources the project's `wscript` sets up, including sources outside `src/` and C++.
- Fonts in the resource schema now document the `pixelHeight` key.
- Fixed rebuilds not picking up changes to `messageKeys` and timeline resources.
- Welcome Linux-aarch64! While we have been supplying toolchains for it, you couldnt use it without building your own pypkjs. Now you can!
- The SDK now requires pebble-tool 5.1.0 or later.

### Changes to Alloy

- The 60 px Leco fonts (Leco-Regular 60 and Leco-Bold 60) can now be used from Alloy.
- Fatal errors in Alloy apps, such as drawing text with a compressed `*-mask` font, now end the app and show the reason in the fatal error dialog instead of rebooting the watch. Use the uncompressed `*-alpha` fonts.
- Allocation failures in Alloy apps now raise a JavaScript exception instead of crashing the app. Previously this could leave a watchface in a reboot loop.

### Changes to Emulator

- The emulator now supports the microphone. `pebble emu-mic` feeds it audio and `pebble emu-permission` changes app permissions (both require pebble-tool 5.1.0).
