- FastAPI + uvicorn server (turnup-ui) serving config API and static files
- React + TypeScript frontend: connection, global LEDs, per-knob/button
cards, preset save/load/apply, toast notifications, dark theme
- Vite builds into src/turnup/ui/static/ so no Node.js needed at install time
- PWA assets (manifest, service worker, icon) in ui/public/
- turnup-ui.service systemd user unit; enabled globally via turnupd.install
- PKGBUILD: add python-fastapi + python-uvicorn deps, install UI service file
- pyproject.toml: ui extras group, turnup-ui entry point
- Switch config format from JSON to TOML (tomllib built-in on 3.11+,
tomli fallback for 3.10) so the generated config can include comments
- Write an annotated config.toml on first run with descriptions for every
knob/button and hints for all available actions
- Promote playerctl from optdepends to depends so media buttons work
out of the box
- Default buttons 1–3 now pre-configured for playerctl previous/play-pause/next
- Rename contrib/config.example.json → config.example.toml with full
TOML rewrite including per-knob LED colour override examples
- Log a migration hint when a legacy config.json is detected