REACTOR is a premium Garmin Connect IQ watchface for AMOLED smartwatches. It blends industrial brutalist aesthetics with retro design cues from VFD displays, LCD screens, and vintage control panels — without being a literal retro watchface.
| VFD (Cyan) | LCD (Cyan) | LCD (Green Phosphor) |
|---|---|---|
![]() |
![]() |
![]() |
| True VFD (Amber) | LCD (Amber) | LCD (Siemens Blue) | LCD (White) |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- VFD Tube Digits: Bitmap-rendered glowing cyan tubes for the main clock display, featuring a simulated wire mesh, light bloom, and unlit filament background for realism.
- LCD Segment Digits: Vector-drawn 7-segment renderers as an alternative solid style.
- 6 Color Themes: VFD Cyan, LCD Cyan, Fósforo Verde, Ámbar, Blanco, Azul Siemens.
- Dynamic Flank Gauges: 10-segment LED-style vertical gauges (Heart Rate, Stress, Battery, Steps, Floors, Intensity Minutes, Body Battery, Phone Battery).
- Dual Historical Charts: Real-time bar charts showing Heart Rate, Body Battery, Stress, PulseOx, Altitude, Temperature, and Pressure trends.
- 5 Chart Rendering Styles: Customize the chart visuals independently with Solid, Dot Matrix, Stepped Line, Oscilloscope, or LCD Outline aesthetics.
- Custom Vector Typography:
CompactFont, an entirely procedural geometric font for date windows and metrics. - Extremely Low Power: Engineered with caching, layout isolation, and geometric primitive rendering for maximum AMOLED battery life.
- AOD Support: Automatic dim mode when the screen enters Always-On Display.
| Device | Status |
|---|---|
| Garmin Fenix 8 AMOLED (47mm) | ✅ Primary target |
| Garmin Epix Gen 2 / Pro | 🔄 Secondary |
| Garmin Enduro 3 | 🔄 Secondary |
| Garmin Tactix 8 AMOLED | 🔄 Secondary |
- Connect IQ SDK ≥ 9.2 (Download)
- macOS (build scripts use bash/zsh)
- A Garmin AMOLED device or the Connect IQ Simulator
git clone https://github.com/Lechu77/reactor-watchface.git
cd reactor-watchface./scripts/build.shThis compiles the project using monkeyc from your installed SDK and outputs bin/reactor.prg.
./scripts/sim.shThis starts the Connect IQ Simulator (if not already running) and loads the watchface for the Fenix 8 (47mm).
./scripts/set_theme.shRunning without arguments shows a help menu with all available themes:
╔════════════════════════════════════════╗
║ REACTOR · Theme Switcher ║
╠════════════════════════════════════════╣
║ 0 = VFD (Cyan) ██ bitmap ║
║ 1 = LCD (Cyan) ██ segment ║
║ 2 = LCD (Fósforo Verde) ██ segment ║
║ 3 = LCD (Ámbar) ██ segment ║
║ 4 = LCD (Blanco) ██ segment ║
║ 5 = LCD (Azul Siemens) ██ segment ║
╚════════════════════════════════════════╝
Example: ./scripts/set_theme.sh 3 switches to Ámbar, recompiles, and relaunches.
Note: Recent macOS versions (including macOS 26) do not mount MTP devices as regular filesystems under /Volumes. Use a dedicated MTP tool (for example OpenMTP) to transfer the .prg file if your watch doesn't appear in Finder.
-
Build the
.prgfile:./scripts/build.sh
-
Transfer the binary to the watch using one of these methods:
- If the device mounts as a mass-storage volume (older models / Windows): copy to the device
GARMIN/APPS/folder, e.g.
cp bin/reactor.prg /Volumes/<DEVICE_NAME>/GARMIN/APPS/
- If macOS does not mount it (macOS 26+), use OpenMTP (or another MTP client) to copy
bin/reactor.prginto the watch filesystem (place in the APPS or GARMIN/APPS folder as shown by the client).
- If the device mounts as a mass-storage volume (older models / Windows): copy to the device
-
Safely disconnect (use the app's disconnect or eject the device) and unplug the cable.
-
On the watch: Settings → Watch Face → select REACTOR.
If the watch face does not appear after copying:
- Restart the watch and re-check the APPS folder with your MTP client.
- Verify that the file you copied is
bin/reactor.prg(not.iq).
- Create a developer account at developer.garmin.com.
- Package the app (release .iq signed with your developer key) using the release script:
The signed package will be created at
./scripts/release.sh /path/to/your/developer_key.der
bin/reactor.iq. - Upload the
.iqfile to the Connect IQ Store (Developer Dashboard) and complete the app metadata and assets. - Users will be able to install the watch face from the Garmin Connect mobile app after publishing (or via a private/beta distribution if preferred).
- For development rapid iteration, the Simulator (./scripts/sim.sh) is usually faster than sideloading to a device.
bin/reactor.prgis the sideloadable runtime binary;bin/reactor.iqis the signed package for Store distribution.
reactor-watchface/
├── source/
│ ├── ReactorApp.mc # App entry point
│ ├── ReactorView.mc # Main view & widget orchestrator
│ ├── data/
│ │ ├── DataProvider.mc # Garmin sensor & activity data
│ │ └── MetricSlot.mc # Dynamic metric slot configuration
│ ├── rendering/
│ │ ├── CompactFont.mc # Procedural geometric vector font
│ │ └── SegmentRenderer.mc # 7-segment LCD digit renderer
│ ├── themes/
│ │ └── Theme.mc # Color palette & theme configuration
│ └── widgets/
│ ├── HeaderWidget.mc # Top battery & status bar
│ ├── ChartWidget.mc # Dual historical bar charts
│ ├── TimeWidget.mc # Main clock (VFD or LCD)
│ ├── FlankWidget.mc # Side LED gauge meters
│ └── BottomMetricsWidget.mc # Bottom metric readouts
├── resources/
│ ├── drawables/ # Bitmap assets (VFD tubes, icons)
│ ├── settings/ # properties.xml & settings.xml
│ └── strings/ # UI string labels
├── scripts/
│ ├── build.sh # Compile the project
│ ├── sim.sh # Launch in simulator
│ ├── set_theme.sh # Switch theme & relaunch (cleans cache automatically)
│ └── fix_svg_icons.py # Utility to re-export SVGs to bypass OneDrive dataless lock
├── manifest.xml # App manifest (devices, permissions)
└── monkey.jungle # Build configuration
See LICENSE for details.






