← All projects

MusicPlayer

2026

A local-first music player for Android. Reads what's already on your device. No account, no streaming, no network.

React NativeExpoTypeScriptexpo-audioExpo Router
MusicPlayer showing the library screen with a list of local songs
Library with sort and search

I have music on my phone that I actually own, and none of the mainstream players handle that well anymore. They want a subscription, or an account, or they bury local files under layers of streaming UI.

This one does a single thing: it reads what's on the device and plays it. No account, no network, no recommendations. Just a library, sorted the way you want, with playlists and background playback.

The library scan is the part that had to be fast. Reading ID3 tags from every file on the device takes time on the first run, so metadata is cached to disk after that first pass. Every launch after that opens instantly.

Features

Library scanning
Reads every audio file on the device through expo-media-library and sorts by title, artist or album.
ID3 metadata with caching
Extracts tags using @missingcore/audio-metadata and caches them on disk. The first scan is slow; every launch after that is instant.
Albums, artists and playlists
Each collection has its own detail view. Long-press a track to add it to a playlist, or create a new one inline.
Background playback
expo-audio keeps audio running while the app is backgrounded, with lock screen metadata and play/pause controls.
Animated waveform
A spectrum visualizer sits over the album art in the full player, driven by Reanimated and the real playback state.
Light and dark themes
Follows the system setting by default, with manual overrides. The two themes use different spacing, typography weights and surface treatments, not just inverted colors.

Links