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.
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.
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.
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 previewYour 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);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
sendandreceive; 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.
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.