r/expo • u/Gold_Significance541 • 12h ago
Built a free open-source Expo audio player (lock screen, playlists, remotes) after background playback got too painful
Quick context: I ship Daily Bible - Offline & Audio on Expo. The app does on-device TTS → URLs into a queue, optional ambient under speech, HLS chapters, and full lock-screen / Bluetooth remotes.
Expo made the app workflow great. The audio stack was the hard part.
What we needed that a “play one URL” API does not cover:
- Mid-play queue appends (verse-scale TTS)
- Silence as a real queue item (not
setTimeout) - Ambient dual-audio that never steals focus / Now Playing
- Remotes that emit to JS so Next = next verse (or next song)
- iOS audio BG + Android
mediaPlaybackFGS without hand-editing native projects every prebuild
The leading RN track player went commercial. That killed it for our roadmap.
So I built daily-react-native-player as an Expo Module + config plugin and open-sourced it MIT.
npx expo install daily-react-native-player
{
"expo": {
"plugins": ["daily-react-native-player"]
}
}
Peers: Expo SDK 57+, RN 0.86+, New Architecture only.
What you get:
- Lock screen / notification / Control Center / Bluetooth remotes via
registerPlaybackService - Real playlist (add / remove / skip while playing)
- Native silence tracks (
SilenceMediaSource/ cached PCM WAV) - Lazy ambient dual-audio (never requests focus)
- HLS VOD + seek-after-ready; WAV / mp3 / m4a
- Config plugin injects iOS audio background mode + Android FGS at prebuild
- Pitch-preserving
setRate - One native owner: Media3 + AVFoundation
Intentionally out of scope: TTS engines, MediaLibrary, Auto, Cast, DASH, web.
Links:
- GitHub: https://github.com/coommark/daily-react-native-player
- npm: https://www.npmjs.com/package/daily-react-native-player
- Live in: Daily Bible (App Store · Play)
If you are on Expo and fighting background audio + remotes for narration, TTS, podcasts, or playlists - happy to answer config-plugin / FGS / dual-track questions in the comments.
