Spotube: a privacy-minded Flutter music client
Spotube proves you can ship a polished music experience across mobile and desktop from one Flutter codebase — without owning the catalog backend.
Stack signals
- Riverpod for state and DI.
- drift for durable local library data.
- media_kit (and related plugins) for playback across platforms.
- Store releases including F-Droid/Flathub — packaging is part of the product.
What to steal
- Separate catalog search from local library state.
- Make playback a headless service with a thin UI shell.
- Persist queue and position — music apps are resumed constantly.
Pitfalls
- Platform audio APIs differ wildly (background modes, lock screens, Bluetooth).
- Legal/ToS constraints around third-party catalogs are not a Flutter problem, but they will kill the app faster than a jank frame.
Use Spotube as a map of the plugin surface a real media app needs.