Release Date: August 12 2026
This release rolls up everything that shipped in firmware 4.18 through 4.33. The headline features are touch support for apps, heart rate variability sampling, and a major Alloy (Moddable) update.
accel_tap_service_subscribe() subscribers no longer receive
spurious events during notifications.health_service_sum_today().tap_recognizer_create(), pan_recognizer_create() and
swipe_recognizer_create() create recognizers that report
started/updated/completed/cancelled events to a callback, with helpers to
query the tap point (tap_recognizer_get_tap_point()), pan deltas and
velocity (pan_recognizer_get_total_delta(),
pan_recognizer_get_delta_since_start(),
pan_recognizer_get_delta_since_prev(),
pan_recognizer_get_velocity()) and swipe direction and velocity
(swipe_recognizer_get_direction(), swipe_recognizer_get_velocity()).
Recognizers are attached to a window with window_attach_recognizer(),
and recognizer_set_simultaneous_with() / recognizer_set_fail_after()
control how multiple recognizers interact.app_touch_navigation_enable() so apps can opt in to system touch
navigation (existing apps are opted out by default), and
window_set_touch_bridge_disabled() to keep the system from bridging
touches to button events on a window that handles its own touch input.TouchEvent gained a non_navigational flag, set on touches that
arrive while no interaction session is active.HealthEventHRVUpdate event,
health_service_peek_hrv_ppi_ms() to read the latest peak-to-peak
interval, and health_service_set_hrv_sample_period() to request HRV
sampling. HRV and heart rate sample periods are independent requests that
share the app's sensor subscription.alarm_service_peek_next() to query the next scheduled system
alarm, e.g. for an alarm indicator on a watchface.ACTION_BAR_WIDTH on Gabbro changed from 34 to 40 pixels. Apps that
derive layout from this constant will adapt automatically when rebuilt.ScrollLayer (and by extension MenuLayer) carries internal touch
navigation state; sizeof(ScrollLayer) grows when recompiling apps that
embed one by value.snprintf, strftime, etc.) is now picolibc.using declarations,
Symbol.dispose, DisposableStack and SuppressedError are now
available. Every closable Alloy class (buttons, sensors, messages, files,
network clients and more) aliases Symbol.dispose to its close()
method, so they can be managed with using.pebble/health module, a JavaScript interface to the Health
service: read current metrics (Health.metric.get()), query sums and
averages over time ranges (Health.metric.query()), check availability
and permissions (Health.metric.accessible()), register metric
threshold alerts (Health.metric.Alert), inspect activities
(Health.activity.get() / iterate()), control the heart rate
sample period (Health.heartRate.samplePeriod) and read
minute-by-minute history (Health.history.byMinute())."health" event on the watch global, delivering
"significant", "movement", "sleep", "metric",
"heart rate" and "heart rate variability" updates.pebble/button now supports click recognizers: configure single
(with an optional repeat interval), long (with an optional delay),
multi (with click count and timeout options) or raw handling per
button, and the onPush callback now also reports which recognizer
fired, the click count and whether it is a repeat. Existing code using
the previous press/release behavior continues to work unchanged (raw
is the default).trace() output now goes to the app log when the xsbug debugger is not
connected, so it shows up in pebble logs.