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.
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.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.mic_stream_to_phone_start(), mic_stream_to_phone_stop() and
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(), mic_capture_stop() and
mic_capture_is_active() capture 16 kHz (MIC_CAPTURE_SAMPLE_RATE)
mono 16-bit PCM on the watch, delivered to the app in 20 ms frames.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() or
mic_stream_to_phone_start() without that permission.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.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.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.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.__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.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++.pixelHeight key.messageKeys and timeline
resources.*-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.pebble emu-mic feeds it
audio and pebble emu-permission changes app permissions (both require
pebble-tool 5.1.0).