YuKumo
A modern, lightweight, production-ready Lavalink v4 client engineered for TypeScript and JavaScript. Minimal dependencies (only ws), full strict type safety, and a framework-agnostic architecture.
const yukumo = new YuKumo({
nodes: [{ host: "localhost", port: 2333, password: "..." }],
queueOptions: { persist: true },
});
const player = await yukumo.createPlayer({ guildId, voiceChannelId });
const { tracks } = await yukumo.search("never gonna give you up");
await player.play(tracks[0], { volume: 80 });Works with your favorite Discord library
Built for scale, designed for speed
Every subsystem in YuKumo is engineered to be fast, type-safe, and lightweight out of the box.
High Performance Engine
Player creation in ~1.8ms. Queue operations at ~9.3M ops/sec. Event dispatch at ~663k ops/sec.
100% Strict Type Safety
Full TypeScript support with strict typings across nodes, players, search, filters, and events.
Queue Persistence
Queues auto-save to Memory/Redis storage on every change and restore after a restart — playlists survive redeploys.
SponsorBlock & Live Lyrics
Server-side sponsor skipping and timestamped live lyric lines via the SponsorBlock and LavaLyrics node plugins.
Self-Healing Connections
WS heartbeats detect half-open dead nodes, error-rate guards destroy runaway players, and every destroy carries a reason.
Minimal Dependencies
Only one runtime dependency (ws). Lightweight footprint with native Bun WebSocket support.
Framework Agnostic
Native support for discord.js, Seyfert, Eris, Oceanic.js, and Discordeno.
Built-in Queue Manager
Repeat modes, Fisher-Yates shuffle, history navigation, sortBy, removeTrack, and index range manipulation.
Modular Plugin Lifecycle
Hook into search queries, voice connections, track playback, player destruction, and node selection.