YaBooks Sync
An unofficial Garmin Connect IQ app: it downloads Yandex Books audiobook chapters to the watch over Wi-Fi and plays them offline, with no phone. The watch picks up where the phone stopped, and what you listen to on the watch goes back to Yandex Books.
- Role
- Full cycle
- Stack
- Monkey C · FastAPI · ffmpeg
- Timeline
- 3 days to beta
- Year
- 2026

The task
Audiobooks go with you on a run and on the road, where you would rather not carry a phone, and a Garmin watch can play sound on its own. There is no Yandex Books client for Connect IQ. Position is a separate problem: start a chapter on the phone, continue on the watch, come back to the phone — and every device must be at the same place.
The solution
The watch downloads chapters over Wi-Fi a few hours ahead — from 1 to 12, 3 by default — and plays them without a phone. Position syncs both ways to the second, and finished chapters delete themselves.
Sign-in is by code through OAuth Device Flow — no password is typed on the watch; skip 30 seconds forward and 15 back, quality 64 or 192 kbps. This is the second app in the line after YaMusic Sync: a shared skeleton and a logo in the same yellow.
How it went
I did everything myself: worked out the closed API, wrote the app in Monkey C and the proxy on FastAPI, prepared the graphics and the store copy. From the first commit to a working beta 0.1.6 — around 3 days and 6 beta builds; before the first launch the code went through an adversarial review, 11 defects fixed.
Pitfalls
A response on the watch is capped at about 21 KB, and the table of contents of War and Peace is 475 KB for 321 chapters: the proxy squeezes it to 7.8 KB. CMAF was accepted in the simulator but would not play on a real watch: the server repacks chapters through ffmpeg, and a 13-hour book shrinks from 378 to 201 MB. The REST position write returned 200 but changed nothing — only a GraphQL mutation moves the position.
Built with
On the watch — Monkey C and Connect IQ SDK 9: Toybox.Media, SyncDelegate, sign-in through OAuth 2.0 Device Flow. The service — Python 3.12 and FastAPI with httpx: it talks to the Yandex Books REST API, writes progress with a GraphQL mutation, repacks CMAF into MP4 (mono, 32 kbps) through ffmpeg and keeps an LRU cache of up to 2 GB. On the server, Docker, nginx and Let's Encrypt; 117 tests on pytest.





