Music playback for your Discord bot.

Queues, playback controls, and events, ready for your commands. Extend your audio sources and keep your bot’s behavior in your own code.

v7 is stable. v8 is a development preview.

play.ts · v7
import { Player } from 'discord-player';
import { DefaultExtractors } from '@discord-player/extractor';

// Use your connected discord.js client.
const player = new Player(client);
await player.extractors.loadMulti(DefaultExtractors);

player.events.on('playerStart', (_queue, track) => {
  console.log(`Now playing: ${track.title}`);
});

// Inside your /play command:
await player.play(voiceChannel, query);

A play command and its first event listener. Connect your client in the setup guide.

Start a v8 projectDev
npm create music-bot@dev

A TypeScript or JavaScript starter with playback and queue commands. See the setup requirements.

Join our official support server

AndrozDev

Get help and share what you build.

Join server

The playback layer.
Your bot’s behavior.

Work with tracks and queues. Connect playback to your commands, messages, and application logic.

Explore the v7 API
Queue management
Add tracks, reorder what plays next, shuffle, and repeat. Each guild keeps its own queue and history.
Playback controls
Pause, seek, skip, and adjust volume through queue.node. Use the same controls from slash commands or buttons.
Application events
React to track starts, queue completion, and playback errors with player.events.
Extensible sources
Use extractors to resolve and stream your audio sources. In v8, capability-based plugins also extend search, lyrics, and queue behavior.

Discord Player v8

DevDevelopment preview

Your queues in JavaScript.
Your audio in Rust.

v8 uses Remedia, a Rust-based audio engine powered by FFmpeg, for decoding, processing, and Discord voice transport. Choose where the engine runs.

v7 remains the stable default. Try the preview to evaluate the new architecture before migrating an existing bot.

One process for your bot and its audio. Remedia runs natively inside Node.js, with FFmpeg installed on the bot machine.

const player = new Player({
  nodes: [{ id: 'local', type: 'embedded' }],
  send,
});

await player.initialize(botUserId);
Set up embedded playback

Runtime configuration excerpt. The setup guide covers source plugins and Gateway wiring; remote credentials come from your server configuration.

Host your sources remotely
Run source plugins and extractors in a separate plugin host, with execution routed through Remedia.
Remote source hosts
Bring your Discord library
Use discord.js, Oceanic, or another library. Wire its Gateway to send and receive; the Player stays independent.
Keep familiar queue APIs
Tracks, queues, playback controls, and events keep familiar entry points. Initialization and source setup change; the migration guide walks through both.

Built by the community.

Find an audio source, learn from a working bot, or share an extension of your own.

Explore the directory

Independent projects, listed for discovery. Review compatibility and the directory’s third-party resource guidelines before integrating.

Start with a play command.

Set up your Player, connect a source, and build from there.