Skip to main content

Version 4 Changelog

Lavalink v4 is now out of beta! This version represents a major modernization of the Lavalink API with a focus on REST-based player control.

v4.2.1

Library updates

v4.2.0

DAVE Support (E2EE Voice)This is the first Lavalink release with DAVE (Discord Audio & Video End-to-End Encryption) support.To use DAVE, you need to update your client library to a version that supports it. The voice state has a new channelId field which is required to connect to Discord’s voice servers.
Features:
  • Added support for DAVE in #1190
  • Added SoundCloud filter out preview tracks config option in #1191

v4.1.2

Updates:
  • Updated Lavaplayer to 2.2.6
  • Updated Koe to 2.2.0-rc2
  • Downgrade docker images to Java 17 in #1162
Features:
  • Added before request logging configuration option in #1170
  • Added check for empty plugin files and redownload/delete them in #1178

v4.1.1

Fixes:
  • Updated Koe to 2.1.1 fixing voice gateway not connecting in 6f594a9

v4.1.0

Features:
  • Added plugin update checker on start in #1121
  • Added full cause stack trace in exception object in #1128
  • Allow overriding default request timeouts in #1117
  • Added new docker image based on distroless & updated alpine variant to java 21 in #1131
  • Added custom Lavalink metrics prometheus collector in #1150
  • Added support for spring cloud config in #1144
  • Updated Koe to 2.1.0 & set deafened to true (This should lower the incoming traffic for Lavalink) in 5b0d139
Fixes:
  • Fixed race condition when creating media connection and setting up playback in 588ca40
  • Fixed filter values being omitted when default value is used in #1141
  • Fixed wrong CPU stats when spamming /v4/stats endpoint in #1151
  • Fixed plugin manager ignoring cmd args in #1129
  • Removed tls flags in dockerfile preventing tls 1.3 from working in #1118

v4.0.8

Updates: Features:
  • Allow usage of non-allocating frame buffers in #1095
  • Added shutdown handling to close sessions cleanly in #1102

v4.0.7

Updates:
  • Updated Lavaplayer to 2.2.1
  • Updated spring-boot to 3.3.0 & spring-websocket to 6.1.9
  • Updated kotlin to 2.0.0 & kotlinx-serialization-json to 1.7.0
  • Updated logback to 1.5.6 & sentry-logback to 7.10.0

v4.0.6

Updates:
  • Updated Lavaplayer to 2.2.0
  • Updated Koe to 2.0.2

v4.0.5

YouTube Source DeprecationThe default YouTube source is now deprecated and won’t receive further updates. Please use the YouTube Source Plugin instead.
Updates:
  • Updated Lavaplayer to 2.1.2
  • Updated Koe to 2.0.1 (fixes the IndexOutOfBoundsException when playing a YouTube track)
Features:
  • Added option to enable Nico source
  • Expose Lavalink sessions to plugins via the ISocketServer interface

v4.0.4

Updates:
  • Updated Lavaplayer to 2.1.1

v4.0.3

Fixes:
  • Fixed plugins not registering (introduced in 4.0.2)
  • Fixed some issues where plugins would be redownloaded every time Lavalink started (introduced in 4.0.1)

v4.0.2

Fixes:
  • Fixed issue where all plugins get deleted when already present (introduced in v4.0.1)
  • Always include plugin info & user data when serializing (introduced in v4.0.1)
Updates:
  • Updated oshi to 6.4.11

v4.0.1

Updates:
  • Updated Lavaplayer to 2.1.0
  • Updated oshi to 6.4.8
Fixes:
  • Fix user data missing field exception in protocol
  • Fix plugin manager not deleting old plugin version
  • Fix not being able to seek when player is paused
  • Removed illegal reflection notice

v4.0.0

Major Breaking ChangesThis is a major release with significant breaking changes. All WebSocket operations sent by the client have been removed and replaced with REST endpoints.

Breaking Changes

All websocket messages sent by the client have been removed. Everything is now done via REST:
  • Lavalink now requires Java 17 or higher to run
  • Removal of all /v3 endpoints except /version. All other endpoints are now under /v4
  • Reworked track loading result. See Track Loading
  • Resuming a session now requires the Session-Id header instead of Resume-Key header
  • Updated capitalization of Track End Reason and Severity enums
  • Remove default 4GB max heap allocation from docker image
  • Update docker ubuntu base image from focal (20) to jammy (22)
Lavalink previously set the -Xmx flag to 4G in docker. This caused issues with some systems which had less than 4GB of RAM. We have now removed this flag and let the JVM decide the max heap allocation. The default is 1GB or 25% of total memory, whichever is lower.

New Features

  • Allow setting user data on tracks in the REST API. See Update Player
  • Added default plugin repository. Plugin devs can now request their plugin to be added to the default repository. See Plugin Development
  • Addition of full Track objects in following events: TrackStartEvent, TrackEndEvent, TrackExceptionEvent, TrackStuckEvent
  • Add JDA-NAS support for musl (x86-64, aarch64) based systems (most notably alpine)
  • Add Omissible#isPresent & Omissible#isOmitted to the protocol module
  • New config option to specify the directory to load plugins from: lavalink.pluginsDir (defaults to ./plugins)
  • Enable request logging by default

Updates

  • Update to Koe 2.0.0-rc2
  • Update Lavaplayer to 2.0.4, which includes native support for artwork urls and ISRCs in the track info
  • Update to the Protocol Module to support Kotlin/JS

Bug Fixes

  • Fixed error when seeking and player is not playing anything
  • Fixed null pointer when a playlist has no selected track

Beta Releases

  • Update lavaplayer to 2.0.3 - Fixed YouTube access token errors
  • Added default plugin repository
  • Fixed error when seeking and player is not playing anything
  • Update lavaplayer to 2.0.2 - Support MPEG 2.5 and fixed some requests not timing out
  • Add Omissible#isPresent & Omissible#isOmitted to the protocol module
  • Fix null pointer when a playlist has no selected track
  • Update lavaplayer to 2.0.0 - Fixed YouTube 403 errors & YouTube access token errors
  • Update lavaplayer to 08cfbc0 - Fixed ogg streaming
  • Add JDA-NAS support for musl (x86-64, aarch64) based systems (most notably alpine)
  • New config option to specify the directory to load plugins from: lavalink.pluginsDir (defaults to ./plugins)
  • New Lavalink now requires Java 17 or higher to run
  • Removal of all websocket messages sent by the client. Everything is now done via REST
  • Update to Lavaplayer custom branch, which includes native support for artwork urls and ISRCs in the track info
  • Addition of full Track objects in following events: TrackStartEvent, TrackEndEvent, TrackExceptionEvent, TrackStuckEvent
  • Resuming a session now requires the Session-Id header instead of Resume-Key header
  • Reworked track loading result
  • Update to the Protocol Module to support Kotlin/JS
  • Removal of all /v3 endpoints except /version. All other endpoints are now under /v4
Contributors: @topi314, @freyacodes, @DRSchlaubi, and @melike2d

Migration Guide

For detailed migration instructions from v3 to v4, see the Significant Changes section in the changelog overview.

Build docs developers (and LLMs) love