active development

Tunes4R — one playback core,
every screen you own.

A cross-platform audio player for Android, Android Automotive, iOS, and macOS. A single Rust core handles playback everywhere; Flutter builds the interface on top of it, so the app feels native on every platform without four separate codebases fighting each other.

Core in Rust UI in Flutter
// reach

Four platforms, one engine underneath

Android

Android Automotive

iOS

macOS

// the core

Playback that survives a bad network

Symphonia decoder HTTP Range requests SparseByteCache FetchEngine SeekMode

Seeking on a streamed track means fetching the right byte range before you can decode anything — miss that, and a scrub feels broken. The core coordinates range requests, a sparse cache of the bytes already fetched, and decode state so seeking stays responsive even mid-stream.

// reliability

The bug that only showed up in the car

Symptom

Background playback would stutter specifically on Android Automotive — not on phones, not consistently, and not for any obvious reason in the audio pipeline itself.

Root cause

Traced to Android's cgroup scheduler quietly demoting the decode thread's priority once the app moved to the background — starving the exact thread that needed to keep running smoothly.

Why it matters

This is the kind of failure that never shows up in a demo and only surfaces after real driving conditions — the difference between an app that works and one that holds up.

// interface

Built in Flutter, tuned by hand

Now Playing

The NowPlayingTab widget was redesigned to cut animation complexity and fix portrait-mode centering — small details that determine whether the screen feels solid or slightly off.

Streaming UI

A custom ProgressSlider/BufferedSlider widget handles both live and DVR-style streams, showing buffered range separately from playback position.

Lyrics editor

A Flutter lyrics editor with a waveform timeline lets lyrics be synced directly against the audio, rather than guessed at with timestamps.

Song ID

The SongIdScreen was redesigned with animated recording states, giving clear feedback while the app listens for a match.

// where the data comes from

A pipeline behind the player

Metadata isn't hand-entered. A MusicBrainz ETL pipeline built on Prefect and Python handles matching, alongside YouTube video matching and cover art resolution — with a Flutter spectrum visualizer as an early piece of the now-playing experience.

// connect

Want Tunes4R on a platform you're building for?

Get in touch about licensing the core, a custom build, or bringing it to a new platform.