finds.dev← search

// the find

InfiniTimeOrg/InfiniTime

★ 3,295 · C · GPL-3.0 · updated May 2026

Firmware for Pinetime smartwatch written in C++ and based on FreeRTOS

InfiniTime is the primary open-source firmware for the PineTime, a $27 ARM Cortex-M4 smartwatch from Pine64. It runs FreeRTOS, drives a 240x240 IPS display via LVGL, and communicates over BLE using NimBLE. For embedded developers or anyone who wants a fully hackable smartwatch without a subscription or cloud dependency, this is the reference implementation.

The BLE stack choice (NimBLE over SoftDevice) means you actually own the radio stack and can read all of it. The companion app ecosystem is surprisingly broad — Gadgetbridge on Android, ITD on Linux, InfiniLink on iOS — so you're not locked to a single platform. The build system is well-organized for a bare-metal embedded project: Docker build works, VS Code devcontainer works, and the font generation pipeline is scripted rather than checked-in blobs. Memory analysis tooling (puncover integration, linker map visualization) is included and documented, which is rare for hobby firmware and genuinely useful when you're fighting a 512KB flash budget.

The PineTime hardware is the ceiling — 64MB SPI flash, 64KB RAM, no WiFi, no GPS, no speaker. If you want to extend InfiniTime beyond what the hardware supports, you hit a wall fast. The heartrate PPG implementation is known to be unreliable; it works well enough to ship but not well enough to trust. OTA update is fragile in practice: a failed update with an old bootloader version can brick the watch and require SWD to recover, which means soldering or a pogo-pin jig. The app framework is functional but tightly coupled to LVGL internals — writing a new app means learning undocumented LVGL 7 patterns since the project hasn't migrated to LVGL 8/9.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →