Hacking PineTime
2026-10-15I recently got a hackable smartwatch PineTime through a Hack Club program, and I immediately started thinking about improvements to InfiniTime, the firmware that powers PineTime.
Preparing
PineTime is designed to be hacked and customized, so I decided to start by modifying InfiniTime itself. First, I had to set up the development environment and figure out how to build the firmware. Fortunately, InfiniTime has a well-organized project structure and includes a Docker container for building the firmware, so this was easy.
Adding watchface
First, I wanted to create a better watchface because the built-in ones didn't fit my needs. It was pretty simple: I copied the source files of an existing watchface, changed the class name, added the new source files to CMakeLists.txt, and built the firmware using Docker.
Modifying the watchface was straightforward. InfiniTime uses LVGL, a graphics library for embedded devices. For example, creating and positioning a label looks like this:
// Create label
lv_obj_t* label_seconds = lv_label_create (lv_scr_act (), nullptr );
// Set text
lv_label_set_text_static (label_seconds, ":00" );
// Set placement
lv_obj_align (label_seconds, label_time, LV_ALIGN_OUT_BOTTOM_RIGHT , 0 , 0 );
I started by copying the Digital watchface, then added labels for the battery percentage and seconds and changed the date display to show the month as a number.
More Apps
In InfiniTime, each app is implemented as a class that inherits from Screen. I am currently working on a FileViewer app that will display files stored in PineTime's external SPI flash memory.
© ttomf 2026