The premium audio player for React Native.
Built on the New Architecture with synchronous native calls — background playback, Android Auto, audio caching, preloading, and more.
Important
Starting with V5, react-native-track-player is commercially licensed. Personal and educational use remains free; commercial use requires a paid license — see rntp.dev/pricing. V4 and earlier remain available under Apache-2.0 on the v4 branch.
- Simple TypeScript API — Clean, minimal API fully typed for React Native developers
- New Architecture Native — Built on JSI with TurboModule support, no bridge overhead, no jitter
- Background Playback — Audio continues when the app is backgrounded or screen is off
- Android Auto — Full support for native car dashboard integration
- Preloading — Background buffering of upcoming tracks for gapless-like playback
- Audio Caching — Built-in caching to reduce bandwidth and enable offline playback
- Remote Controls — Lock screen, notification controls, and headset support out of the box
- React Hooks —
usePlaybackState,useIsPlaying,useProgress,useActiveMediaItem, and more
- React Native 0.74 or later
- New Architecture enabled (Fabric + TurboModules)
npm install @rntp/playerThen for iOS:
cd ios && pod installAndroid links automatically.
importTrackPlayerfrom'@rntp/player';// 1. Set up the player (call once at app startup, in the foreground on Android)awaitTrackPlayer.setupPlayer({contentType: 'music',handleAudioBecomingNoisy: true,android: {wakeMode: 'network'},});// 2. Add tracks and playawaitTrackPlayer.setMediaItems([{url: 'https://example.com/track.mp3',title: 'Track Title',artist: 'Artist Name',artwork: 'https://example.com/artwork.jpg',},]);TrackPlayer.play();// 3. Use hooks in your UIimport{useIsPlaying,useProgress,useActiveMediaItem}from'@rntp/player';functionPlayerUI(){const{ playing }=useIsPlaying();const{ position, duration }=useProgress();consttrack=useActiveMediaItem();return(/* your player UI */);}Full documentation, API reference, and guides are available at rntp.dev.
V5 is a complete rewrite and is not backwards-compatible with V4.
Key improvements in V5:
- Built on JSI —
getProgress(),getQueue(),isPlaying()return synchronously - Full TurboModule and Fabric support
- Rewritten Android and iOS native layers
Free for non-commercial use. Commercial use requires a license.
See license.txt for details or visit rntp.dev/pricing to purchase a commercial license.
For questions: team@doublesymmetry.com