Features
- RyanlinkManager — central hub for nodes, players, voice state, and search
- Multi-node support — weighted load balancing across 7 sort strategies:
memory,cpuLavalink,cpuSystem,calls,playingPlayers,players,weighted - Atomic node migration — seamless player failover when a node disconnects (
autoMoveor manualplayer.moveNode()) - Session resuming — Lavalink session persistence across reconnects
- Track resolve retries — configurable
trackResolveRetryLimitwithautoSkipOnResolveError - Voice state sync — automatic
VOICE_STATE_UPDATE/VOICE_SERVER_UPDATE/CHANNEL_DELETEhandling - DAVE (E2EE) compatible — handles Discord’s end-to-end encrypted voice handshake automatically
- Custom player class — extend
Playerand pass viaplayerClassoption - Source registry — dynamic
SourceRegistryper node for custom search prefix mappings and matchers
Player
Section titled “Player”- Full playback control —
play,pause(boolean),resume,seek,skip,stopPlaying,setVolume,setRepeatMode - Repeat modes —
off,track,queue - Volume fade —
setVolumeapplies changes in 10 steps over 500ms for smooth transitions - Volume decrementer — scale internal volume independently of reported volume
- Position tracking — client-side position computed from
lastPosition + elapsed - Smart leave —
smartLeave: truedestroys player when voice channel empties - Auto-pause —
autoPause: truepauses when all users leave, resumes when they return - Auto-pause on mute —
autoPauseOnMute: truepauses when bot is muted - Auto-reconnect —
onDisconnect.autoReconnectreconnects and resumes playback - Lifecycle hooks —
onTrackStart,onQueueEnd,onNodeFailoverper-player - Data store —
set/get/setData/getData/deleteData/clearData/getAllDataper-player key-value store - Node migration —
player.changeNode(node)/player.moveNode()for live node switching - Gapless preloading (NodeLink) —
nextTrackfield for zero-silence transitions
- TrackRegistry — memory-efficient track reference mapping;
TrackEntrystores data once, referenced by ID - Previous tracks buffer — configurable
maxPreviousTracks(default 25) - Queue operations —
add,remove,move,shuffle,clear,skipTo,addPrevious - Index insertion —
queue.add(track, index)inserts at a specific position - Fisher-Yates shuffle — statistically unbiased randomization
- Queue changes watcher —
QueueChangesWatcherinterface:tracksAdd,tracksRemoved,shuffled - Unresolved tracks — lazy resolution with
useUnresolvedDatasupport - Functional methods —
find,filter,map,some,every toJSON()— serializes queue state including voice channel, volume, node ID
Filters All non-destructive
Section titled “Filters ”Standard Lavalink filters:
equalizer (15-band), karaoke, timescale, tremolo, vibrato, rotation, distortion, channelMix, lowPass, volume
High-level API:
setSpeed, setPitch, setVolume, toggleNightcore, toggleVaporwave, setEQ, setPreset, set, remove, override, resetFilters, clear
Built-in EQ presets (via FilterManager.EQList):
BassboostEarrape, BassboostHigh, BassboostMedium, BassboostLow, BassboostSoft, Pop, Rock, Classic, Electronic, Gaming, Soft, TV, TrebleBass, Nightcore, Vaporwave, and more
NodeLink exclusive filters (via node.specificFilters):
echo, chorus, compressor, highPass, phaser, spatial, resetNodeLinkFilters
LavaDSPX plugin filters:
low-pass, high-pass, normalization, echo
filter-engine / lava-xm-plugin filters:
echo (delay/decay), reverb
Search
Section titled “Search”- Multi-platform — YouTube, Spotify, Apple Music, Deezer, Tidal, SoundCloud, JioSaavn, Yandex Music, VK Music, Qobuz, Pandora, Audiomack, Bandcamp, and more
- LavaSearch —
audioSearch()for albums, artists, playlists, text results (requireslavasearch-plugin) - Source validation —
autoChecks.sourcesValidationsvalidates source managers before requests - Plugin validation —
autoChecks.pluginValidationsvalidates plugin availability before requests - Link matchers — per-node
SourceRegistrywithregisterMatcherfor automatic URL source detection - Source mappings — per-node
SourceRegistrywithregisterMappingfor custom prefix aliases - Blacklist/whitelist —
linksBlacklist,linksWhitelist,linksAllowedfor URL filtering - Bandcamp local engine —
player.searchfalls back to Bandcamp’s autocomplete API when node lacks bandcamp source allowCustomSources— skip source validation for custom/unknown prefixes
Autoplay
Section titled “Autoplay”- Multi-source fetch chain — Spotify rec → SoundCloud → YouTube mix → artist search → title search → ytsearch fallback
- Weighted scoring — duration similarity (0–40pts) + same artist (50pts) + partial match (25pts) + jitter (0–10pts)
- Circular history buffer —
historyLimit(default 20), prevents re-queuing recent tracks - Pre-fetch — triggers early when queue drops to
prefetchThresholdtracks - Keyword exclusion — title-based blacklist with configurable
excludeKeywords - Duration tolerance — soft window scoring, not hard exclusion
- Custom fetch function —
autoplayConfig.fetchRelatedTracksfor fully custom candidate fetching - Runtime toggle —
player.autoplay = true/false
Node Health
Section titled “Node Health”- Weighted score —
(cpu.systemLoad × 0.7) + (memory.used/allocated × 0.2) + (players/100 × 0.1) - Health status —
node.getHealthStatus()returnshealthy,degraded,critical, orofflinewith recommendations - Node metrics —
node.nodeMetricSummary()returns CPU, memory, players, ping, frame deficit - Heartbeat — WebSocket ping/pong with configurable
heartBeatInterval - Exponential backoff — reconnect delay doubles each attempt up to 30s
- Reconnection state —
IDLE,PENDING,RECONNECTING,DESTROYING
Plugin Support
Section titled “Plugin Support”| Plugin | Registered Name | Features |
|---|---|---|
| LavaSrc | lavasrc-plugin | Spotify, Apple Music, Deezer, Tidal, Yandex, VK, JioSaavn, Qobuz, Pandora, lyrics |
| LavaSearch | lavasearch-plugin | Advanced search (albums, artists, playlists, text) |
| LavaLyrics | lavalyrics-plugin | Lyrics API hub, real-time line events |
| SponsorBlock | sponsorblock-plugin | Segment skipping, chapter events |
| LavaDSPX | LavaDSPX-Plugin | DSP filters (high-pass, low-pass, normalization, echo) |
| DuncteBot Skybot | skybot-lavalink-plugin | speak:, phsearch:, mixcloud, getyarn, etc. |
| java-timed-lyrics | java-lyrics-plugin | YouTube + Genius timed lyrics |
| lyrics.kt | lyrics | YouTube lyrics |
| lava-xm-plugin | lava-xm-plugin | Tracker module formats (MOD, XM, IT, S3M) |
NodeLink Exclusive
Section titled “NodeLink Exclusive”- Audio Mixer — overlay TTS/SFX on main track (
addMixerLayer,listMixerLayers,updateMixerLayerVolume,removeMixerLayer) - Fading — smooth volume transitions (
trackStart,trackEnd,stop,seek,ducking) withlinear,exponential,logarithmic,s-curve - Gapless preloading —
setNextTrackGapLess,removeNextTrackGapLess - Direct streaming —
getDirectStream,loadDirectStream,loadDirectStreamPost - Lyrics —
loadLyrics,loadChapters,getMeaning,nodeLinkLyrics,subscribeLyricsNodeLink,unsubscribeLyricsNodeLink,getChapters,timedLyrics.* - YouTube config —
updateYoutubeConfig,getYoutubeConfig,getYoutubeOAUTH,updateYoutubeOAUTH - Workers —
getWorkers,patchWorker - Track encoding —
encodeTrack,encodeTracks - Extended stats —
getDetailedStatswith per-source and per-endpoint tracking - NodeLink info —
getNodeLinkInfo,getConnectionMetrics - Multi-audio track —
changeAudioTrackLanguagefor dubbed content - NodeLink-exclusive filters —
echo,chorus,compressor,highPass,phaser,spatialvianode.specificFilters