Skip to main content
Version: v2.10.0

Changes in 2.10.0โ€‹

danger

๐Ÿ›‘ This is a major release with breaking changes. Please update your code accordingly.

tip

โœ… A significant release focused on reliability, cleaner internals, and broader library support.

Here you will find everything that changed in v2.10.0 and what you need to update when upgrading.


How to updateโ€‹

npm update magmastream

New Featuresโ€‹

isAutoplay flag on tracksโ€‹

Tracks now carry an explicit isAutoplay boolean โ€” no more internal user comparisons to determine whether a track was added by autoplay.


destroy() on all queue backendsโ€‹

All queue backends (MemoryQueue, RedisQueue, JsonQueue) now implement a destroy() method for proper resource cleanup.


pauseOnDisconnect player optionโ€‹

New pauseOnDisconnect option in PlayerOptions โ€” when enabled, the player pauses instead of stopping when the bot is disconnected from a voice channel. Defaults to true.


Discordeno wrapperโ€‹

First-class support for @discordeno/bot via the new Discordeno wrapper.


resolveGuild() on all wrappersโ€‹

All wrappers now implement resolveGuild() for consistent guild resolution across libraries.


getUser / getGuild cache callbacks in ManagerOptionsโ€‹

New optional getUser and getGuild callbacks in ManagerOptions, allowing you to plug in your library's cache for user and guild resolution without a wrapper.


Structured error for missing GuildVoiceStates intentโ€‹

All wrappers now throw a MagmaStreamError with code MS_INTENT_MISSING if the GuildVoiceStates gateway intent is not enabled.


Breaking Changesโ€‹

Detritus wrapper removedโ€‹

The Detritus wrapper has been removed. Migrate to the new Discordeno wrapper.


deleteInactivePlayers renamed to deleteDestroyedPlayersโ€‹

Update any references in your StateStorageOptions config.


MemoryQueue methods are now synchronousโ€‹

MemoryQueue methods no longer return Promise. If you were awaiting them, remove the await. Other backends (Redis, JSON) remain asynchronous.


Minimum Node.js version bumped to >=20.19.0โ€‹

Ensure your runtime meets the new minimum version requirement.


Peer dependency bumpsโ€‹

  • seyfert bumped to 4.x
  • oceanic.js bumped to 1.13.x

Update these in your package.json if you use either wrapper.


Fixes & Improvementsโ€‹

play({ startTime }) no longer silently droppedโ€‹

Passing startTime or other play options to player.play() now correctly forwards them to Lavalink.


Session ID storage refactoredโ€‹

Session IDs are now stored per-node (individual files and a Redis hash) instead of a single shared JSON file, preventing cross-node conflicts on restart.


requester.id consistently cast to stringโ€‹

Fixes BigInt Map key mismatches that could cause track requester lookups to silently fail.


channelId included in voice state updatesโ€‹

channelId is now correctly included in voice state payloads sent to Lavalink, fixing voice connection issues after channel moves.


REST 4xx responses returned as structured errorsโ€‹

REST 4xx responses from Lavalink are now returned as structured MagmaStreamError objects instead of thrown exceptions, making error handling consistent.


Player serialization null-safeโ€‹

PlayerUtils.serializePlayer() is now fully typed, null-safe, and returns null on failure instead of throwing.


Questions?โ€‹

Join our Discord โ€” we're happy to help.