Monolith — A Production Flutter Music Player
A self-contained offline music player for iOS and Android built entirely in Flutter, with a CI/CD pipeline that ships an unsigned IPA on every commit in under three minutes. Most music apps are streaming-first: they require a subscription, a stable connection, and surrender your listening data. I wanted something...
Problem context
Most music apps are streaming-first: they require a subscription, a stable connection, and surrender your listening data. I wanted something that lets you download audio once and own it completely — no ads, no tracking, and no internet needed after the fact. The app also had to run on both iOS and Android from a single Dart codebase, with a CI pipeline I could trust to catch regressions on every push. Three...
Implementation approach
Built the entire UI and business logic once in Flutter, isolating platform differences to three places: directory paths (Android external storage vs the iOS sandbox), runtime permissions, and the CocoaPods setup.
Implementation approach (2)
Used youtube explode dart to talk to YouTube’s InnerTube API directly from the device — the app fetches the audio manifest, picks the best audio-only stream, and writes an .m4a/.opus file locally, with no backend server anywhere in the path.
Outcome and delivery impact
Monolith ships a public APK via GitHub Releases and an unsigned, sideloadable IPA built fresh on every commit. The warm-cache iOS build stabilised below three minutes after the caching rework, down from over ten. The Flutter 3.44 icon cascade is fully resolved through checked-in CI patches, so both platforms build green from a single Dart codebase. Downloads now land in storage the system Files app can actually navigate to, and audio plays back offline...
Reported metrics
-
iOS CI Build (warm)
Reported value: < 3 min
-
Shared Dart Codebase
Reported value: 1
-
Native Platforms
Reported value: 2
-
Backend Servers
Reported value: 0
Technologies involved
-
Flutter 3.44
Open the technology archive to view related project work.
-
Dart
Open the technology archive to view related project work.
-
youtube_explode_dart
Open the technology archive to view related project work.
-
just_audio
Open the technology archive to view related project work.
-
audio_service
Open the technology archive to view related project work.
-
sqflite
Open the technology archive to view related project work.
-
path_provider
Open the technology archive to view related project work.
-
GitHub Actions
Open the technology archive to view related project work.