Browse docs

Building and contributing

Find the right source version, run its checks and contribute changes in the owning project.

On this page

Released app build guides

Reproduce a published app from its exact tag. For a new change, use the owning repository’s current contributor guide and record the revision you tested. These app versions come from the same catalogue as the download pages.

ProjectReleased sourceBuild instructions
Dynamicv1.0.2Environment and checks
Halftonev1.10.3Environment and checks
Timerv1.0.3Environment and checks
Dashboardv1.0.2Environment and checks
Open Activityv1.0.2Environment and checks
ČHMÚ Weatherv1.0.4Environment and checks

Public library packages

These are independently downloadable library releases. They are embedded dependencies, not apps to install on a watch. Download the package and its upstream checksums, preserve its licence and pin the archive in your lockfile.

LibraryPublic releaseIntegration
Activities
pebble-activities
v0.4.4
Prerelease
Publish and consume typed activity summaries.
Core
pebble-watchface-core
v0.5.2
Stable
Selected readings, bounded state and shared transport.
XOCE UI
pebble-xoce-ui
v0.1.1
Stable
Native drawing helpers and the phone settings stylesheet.

The public Core and UI releases document Emery/Time 2 with SDK 4.33.1. Current app builds use SDK 4.44 and their own checked packages for Emery and Gabbro. Follow the version and platform contract of the package you actually choose.

Packages bundled in the apps

The published apps include newer vendored snapshots. A package number in this table does not imply a standalone library release or download with that number. Each link points to the app tag’s exact dependency manifest; its vendor/CORE.json, vendor/ACTIVITIES.json and vendor/UI.json record the relevant archive hashes and source provenance.

App releaseCoreActivitiesUI
Dynamic v1.0.20.6.1-dev.10.4.50.1.3
Halftone v1.10.30.6.00.4.50.1.3
Timer v1.0.3—0.4.50.1.3
Dashboard v1.0.2—0.4.50.1.3
Open Activity v1.0.2——0.1.3

Open Activity reads the selected watchface’s presented app destination directly; it does not bundle Activities. Dashboard uses Activities and UI, without Core. ČHMÚ Weather is an independent phone-only provider and bundles none of these three packages.

When extending an existing app, keep its checked archive and provenance unless the change intentionally upgrades that dependency. Rebuild and release the consumer separately after an upgrade. If a recorded source revision is unavailable upstream, use the exact vendored archive to reproduce the app and resolve that provenance before presenting it as a new public library release.

Choose a task in the developer overview. The references above distinguish published app tags, downloadable library releases and the different packages bundled in those apps.

Current development workflow

For a new change, clone the owning repository and start with its current CONTRIBUTING.md. To reproduce an installed release, check out the tag in the build table first. Keep a clean branch for your work and record the commit you tested.

The native apps select Node 22.23.4, Python 3.12.15 and SDK 4.44 through version files and locked build tooling. Follow the selected revision’s setup instructions rather than replacing its vendored packages with the newest download. Library releases can have a different SDK/platform contract.

Build and test

For the native apps, the usual sequence after selecting the required tools is:

npm ci --ignore-scripts
npm run check:setup -- --sdk
npm test
npm run build
npm run check:artifact

Portable source tests need Node, Python and a C compiler; the native build and artifact checks also need the pinned SDK. The owning guide explains the verified SDK bootstrap. Ordinary builds write build/candidate/; disposable evidence belongs in build/qa/. Preserve frozen dist/, releases/ and historical captures.

ČHMÚ Weather has no watch binary and uses its public-plugin build instead:

npm ci --ignore-scripts
npm test
CHMU_VERSION=$(node -p "require('./package.json').version")
python3 scripts/build.py --variant public --output "build/candidate/CHMU-Weather-${CHMU_VERSION}.pbw"

Use the version from the checked-out package when choosing that output filename. Personal Weather is a separate build and must not enter the public plugin’s release.

Run the checks required by the owning repository and build the affected app or library. Check the resulting workflow as well as the build: saving settings, closing and reopening, restarting, missing permissions and app handoff can expose problems that compilation does not.

Record automated checks, packaged browser execution, native emulator results and physical-device verification separately. An emulator screenshot does not establish physical-watch readability, vibration, button feel or battery life.

Libraries and consumers

Choose the smallest integration that fits your task:

Library Documented consumers Integration guide
Activities Dynamic, Halftone, Dashboard and Timer Publish a summary from a plugin
Core Dynamic and Halftone Read the selected global readings in a host
XOCE UI All five native watch products Use native drawing helpers or phone settings styles

Providers supply activity content and capabilities; hosts choose presentation and controls. Dynamic displays compatible activities and app destinations. Dashboard can execute actions supported by its bound source, but Timer Pause/Resume from Dashboard remains unimplemented. See the app-opening and action boundaries.

The versioned library specifications own exact API fields, limits and wire formats. The guides include small runnable examples. A library update does not change an installed app: update its pin and lockfile, rebuild it, validate the affected behaviour and release that consumer separately.

Android scope

The Phone plan describes the intended Android app and optional Pebble companion. No Android build, integration API or developer setup is published here. Activities and Core describe Pebble integrations; they do not establish an Android API or require every XOCE product to use activities.

Contribute

Report bugs and propose changes in the affected project’s maintained repository, linked from its app or library page. Include the version, reproduction steps, expected behaviour and observed result. For a code change, explain the resulting behaviour and the checks you actually completed.

For interface work, follow the design principles, the Pebble UI and UX standard and the owning app’s current UI contract. Shared rules are implemented in the published apps; examples and screenshots keep their actual version and test scope.

Builds and tests create local candidates. Freezing source/debug/Store archives, publishing an app or library, and deploying the website are separate steps. Follow the owning release workflow when that work is authorized; a successful build alone is not publication.

Check the project licences and source links before reusing code. The current Pebble projects use PolyForm Noncommercial 1.0.0. Each project retains its own terms; a planned Android product does not inherit a licence from the XOCE name.

Search XOCE

Search projects and documentation.

Software, guides and project plansesc to close