01
Keychain
Your loyalty cards, on your wrist — in a form a shop scanner accepts.
Every gym tag, grocery card, library number, transit pass and parkrun ID lives in a wallet you left at home or a phone you have to dig out. Keychain puts them on the watch you are already wearing: open a card and it fills the screen at boosted brightness, ready for the scanner. The code is generated on the device: no phone, no signal, no account, nothing uploaded. The free app holds three cards; Keychain Pro holds twenty, with on-watch reordering.
The hard part. One source tree, 138 devices: round,
semi-round and rectangular; AMOLED, MIP and LCD; a 96 KB memory floor at the
bottom of the range. Connect IQ has no code-generation library, so all ten
symbologies are hand-written in Monkey C: QR (with a capacity ladder that falls
back through error-correction levels before it refuses), Aztec, PDF417, DataMatrix
and five 1D formats. Each is pinned to byte-exact golden matrices verified against
zbar, ZXing and dmtxwrite. Layout derives from screen
geometry rather than device lists, a generator emits four manifests and seven
build configs from one device table behind a CI drift gate, and a compile matrix
builds every device × tier before anything ships.
What it taught me. Constraint is a product decision, not an engineering one. The 96 KB devices could not hold every encoder, so the two densest formats compile out on exactly those five models and say so plainly instead of failing at the till; the paid tier is a build-time constant rather than a runtime flag, which removed a whole class of entitlement bug before it could exist.
- Platform
- Garmin Connect IQ · Monkey C
- Reach
- 138 devices · 33 languages · 26 translated store listings
- Model
- Free tier + paid Pro tier via Garmin Pay
1,000+ downloads · 4.6★ from 10 reviews · v2.1.2 as of 27 July 2026