react-native-track-player

May 6, 2026 · View on GitHub

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.

npm version npm downloads License


Features

  • 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 HooksusePlaybackState, useIsPlaying, useProgress, useActiveMediaItem, and more

Requirements

  • React Native 0.74 or later
  • New Architecture enabled (Fabric + TurboModules)

Installation

npm install @rntp/player

Then for iOS:

cd ios && pod install

Android links automatically.

Quick Start

import TrackPlayer from '@rntp/player';

// 1. Set up the player (call once at app startup, in the foreground on Android)
await TrackPlayer.setupPlayer({
  contentType: 'music',
  handleAudioBecomingNoisy: true,
  android: { wakeMode: 'network' },
});

// 2. Add tracks and play
await TrackPlayer.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 UI
import { useIsPlaying, useProgress, useActiveMediaItem } from '@rntp/player';

function PlayerUI() {
  const { playing } = useIsPlaying();
  const { position, duration } = useProgress();
  const track = useActiveMediaItem();

  return (/* your player UI */);
}

Documentation

Full documentation, API reference, and guides are available at rntp.dev.

V5

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

License

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