Elm Pebble
Pebble watch displaying an Elm Pebble watchface
A nicer way to build Pebble watch faces.

Pebble watch faces & apps in Elm.

Elm Pebble gives Pebble developers a real language and a tight feedback loop: model your app in Elm, see it on a tiny round screen, and keep the logic understandable as the interface evolves.

Beta notice: Elm Pebble is still evolving. The compiler, IDE, runtime packages, and public APIs can change while the project settles.

Why bother (in a good way)

Sketch a face quickly

Elm keeps UI experiments readable, so you can try a layout, adjust it, and keep moving without a pile of mystery state.

Fewer “wait, why did that crash?” moments

Typed messages and explicit updates make small watch apps easier to reason about as they grow.

Make something people can wear

Tweak colors, complications, and interaction details until the watch face feels right on real hardware.

The shape of the system

Elm Pebble keeps the application loop and build pipeline explicit, so you can see where state, events, UI, and Pebble tooling fit together.

EventsSubMsgUpdateModelViewPebbleUICmd

Elm Architecture on the watch

Messages come from Pebble events and subscriptions, update changes the model, and view redraws the Pebble UI from that model.

Watch&CompanionElmElmPebbleCoutputPebbleSDKEmulatorWatchJSoutputPhone

From Elm code to a Pebble app

Elm Pebble branches the project into native C output for the Pebble SDK and JavaScript output for the phone-side companion app.

Features

Elm Pebble brings the parts you need for real Pebble projects into one Elm-first workflow.

  • Elm to native Pebble apps

    Write Elm and compile to C code that runs on the Pebble SDK instead of a browser runtime.

  • Typed Pebble UI

    Build watch screens with Elm data structures for text, images, shapes, layout, colors, and resources.

  • Companion communication

    Define shared protocol types for watch-to-phone messages, including AppMessage-style data flow.

  • Project templates

    Start from working watchface, companion app, and protocol templates instead of assembling the structure by hand.

  • Browser-based IDE

    Edit, inspect, and build projects from the Elm Pebble IDE with tooling shaped around Pebble apps.

  • Hardware-oriented loop

    Use the Pebble SDK, emulator, and real watches as the target for every iteration.

How Elm Pebble works

Pebble apps are not web pages: there is no browser on the watch. You write Elm that compiles to C and drives Pebble's native UI. Anything that makes this site pretty in your desktop browser stays there—your watch never sees it.

  • 1. Start small

    Grab a minimal watch face or tiny app skeleton, then grow it one visible behavior at a time.

  • 2. Play in Elm

    Describe the screen with Elm and the Pebble UI API; the compiler turns that into native draw code—not HTML or CSS on the watch.

  • 3. Try it on hardware

    Build with the Pebble SDK, run the emulator or flash your watch, and see how the idea feels on the wrist.

Who it is for

Pebble fans, Elm-curious developers, and anyone who wants a calmer way to build watch faces and small wrist apps with explicit state and predictable updates.

Clone, run, and iterate from Elm code to an emulator or watch without losing the shape of your app.