I’ve been working on making an app that syncs my local Roon* music library to my phone. A few days ago I got the foundation working: a server on macOS that offers up the files and an iOS app bringing those files down with track listings and player views. Read about that first pass here.
*Roon is a music player for local and streamed music files. It offers methods for syncing the local files that – for very boring network reasons – don’t work for me.

▲ The music player with just only one(ish) screen
Naming the app(s)
I’m going with app name Sideload for now. I’d rather not infringe on Roon, although I’m sure it’s not much of a deal. Picking a name is always a balance of trade offs and opportunities. If you go with a name like RoonLocal or RoonSync, it’s highly findable and descriptive but very single serving.
The name is a nice nerdy reference. “Sideloading” is to put apps or files onto your device manually instead of using the official app stores, apps or services. And with no official API for playlists and tracks, there is a bit of manual work the server and app are recruiting to get the job done.
Sideload also appealed as it can easily be applied to audiobooks, ebooks, pdfs, markdown files. Perhaps there is a space to extend the idea beyond music. Perhaps.
Why build this?
We’re very much in the era of “just because you can, did you ever stop to think you should?”. Why build a music player app when there are so many? I’ve paid for Doppler, a sweet minimal offline music player. Apple Music has offline music, Bandcamp iOS app lets me listen to purchases offline, damn it, I could even use VLC to sync up cloud folders to my device.
So why replicate what’s already been built?
In short, everything can nearly do what I need, but nothing does everything I want.
I want
- True offline. No slip ups with data resets in the night when an app updates, no funny buggers with cloud services offloading files
- FLAC gapless playback, some of the apps I’ve mentioned don’t do this
- Any file from anywhere, be it CD rip, archived mixes, Bandcamp purchases. I want to bring files together
- Zero networking. Roon and Plex Amp both struggle with my network being locked down to outside access, which in this day and age is a good thing not have your LAN exposed
- Reliable sync over local network based on a playlist that’s highly accessible
- A Roon playlist I can “just add music to” that will appear on my phone
- No cloud service bills. There is a case to be made for pushing all my local to the cloud and pulling it down using the iOS app
Album Mode
Over the past few days I’ve been playing around with the iOS app and thinking about it as an opinionated product. What it won’t do.
Abundance and exponential features have diluted our attention, our ability to go deeper as easily, our care, our focus on the things we set out to enjoy. When you’re building Software for One, you have an interesting space in which you be opinionated.
I like the idea of a music player that is closer to putting on a Vinyl/Cassette/CD/Mini Disc. This got me thinking about album mode in the app, what if the app…
- Removed track selection, it only plays from the top of the album
- Removed track skipping and scrubbing
- Makes you load an album into the player to listen to it
- Made you eject an album to stop listening to it
- Loaded album notes and reviews in favour of showing track listings
There are examples of this framework in product thinking happening all around us, be it the bell graph meme of ‘second brain’ vs ‘apple notes’, the dumb phone over smartphone or a camera app with no viewfinder.
I like to always stand back from positions and ask “what could be the worst perspective on this?”. If we apply this question to the album mode function, what sucks?
- Vinyl, CDs and Mini Disc all have track selection, so this model is really only like a cassette tape, but without the rewind/forward effort, so, is it a confused concept?
- Would we end up listening to more of the start of albums and less of the end of albums as we’re interrupted by life?
- We might end up listening to tracks we don’t like, perhaps there are tracks on an album we always skip
- We might want to queue up that banger of a track for the short window of time we have to listen to something and we can’t
- We feel frustrated by album mode and just switch it off, its a gimmick that gets in the way of user choice which we have elsewhere
A few of these feel easy to navigate. The app can hold the session state, so continuing to listen to where you were is very easy. And, I’ll always have TIDAL for instantly queuing up a banger.
The track skip/selection and tracks we don’t like thoughts are interesting. I guess if I really hate an album track I could just delete it from my library and its gone forever, I could remove it from the Roon playlist so it never makes its way onto the app. But, I do think theres something compelling in experiencing the rough and smooth of life.
The music journalist and essayist Shawn Reynaldo frames it well: can you appreciate what’s interesting about the tracks you don’t agree with?
This is part of our attention and our noticing muscles. Michael Wolff, designer and co-founder of Wolff Olins frames it like so: “The muscle of curiosity and the muscle of appreciation enable the muscle of imagination.”
There’s a case to be made with creative outputs, that the audience can always get something from the work. There might just be some hidden gems within that track, perhaps masked by layers of tracks, effects and the composition. Perhaps it will teach me some kind of stoic superpower to just let the music play through, stop the urge to skip and chill.
Perhaps thats all a bit deep for an app, man. Perhaps it’s what we need in 2026.
The feature name definitely needs changing from Album Mode, as some will be EPs and some will be mixes. The mode needs to tell us what it does, not be named after a format, could it be:
- Deep mode
- Queued
- Deep listening
- Listen mode
- Focus
- Focus mode
- Appreciation
- …
I need a bit of time to ponder this one and find the right fit.
Sideload App Model
Core idea → Load music to listen uninterrupted → why? → to listen deeper.
Complementary ideas
- Go deeper on the album reviews, notes
- Go deeper on the artist background
- Personal notes?
- Title data?

▲ White-boarding out only what I want
Loading Music Interaction
I’ve been sketching out what it could look like to load the titles in the app. What it could look like to eject them.
It’s tempting to push this into skeuomorphism. But something doesn’t quite add up if you add too many design metaphors or even when you mix them up. I’ve seen players online that mimic a record deck or a tape deck, which looks fun, but for me there’s something a miss here. Perhaps if the players modulated the sound to mimic a vinyl or cassette that’d fit nicely, perhaps I’m too picky.
I wondered about app skins that feel like classic hifi brands, perhaps there is something cute, silly or fun about this. The idea definitely needs precision execution to pull it off.
Is there something that can mimic the loading of an album into the player that feels compelling? Loading an artwork feels odd, but perhaps a picture of a CD is even stranger. What is it to load a digital file into a digital player?

▲ Collecting golden age hi-fi industrial design language

▲ Early interaction doodles, figuring a track list could get killed

▲ Dragging over tapping interaction, is the effort and friction the key
I haven’t spent any dedicated design time on this yet, it’s just been a process of stripping back the native kit of media playing functions to as little as possible. As I’ve taken away more and more it’s provided space to make clearer decisions. Less noise to contend with.
The app is very much in wireframe mode. The current interaction to drag to the player isn’t satisfying in any way. Mac language has often recruited the drag, somewhat of a deep frustration for many is the drag app to applications folder. Winamp worked by dragging files directly into it.
Perhaps it would be better to transform the album artwork into a different state, a smaller object that could itself be inserted into a space within the player.
▲ Build sketch of dragging to player, its clunky but worth living with and pondering.
Everything Else
This post started life while I was looking at the core experience of the iOS app, but there was a critical flaw that kept coming up with the server sync app. It’s worth holding that story back for the next post and the exciting news is that as of 26 April, I think I’ve cracked a reliable (only time will tell) method of getting the playlist data without with the Roon API. The Roon API is very shallow and can’t serve up the track object data we need – but, there is a way.
Fixes & Tasks Cleared
- AirPods remote bug fixes, playback failed to resume after pause
- Placeholder app icon added
- Logging and reporting added to settings for bug hunting
- Lock screen/remote command center integration improved
- Added album mode toggle, hides tracklist/title view and player card
- Refactored player to handle gapless FLAC playback
- Added eject long press to media player