import { useState } from "react"; const libraries = [ { name: "RevvLink", author: "JustNixx & IamGroot", github: "https://github.com/JustNixx/RevvLink", pypi: "revvlink", stars: "Wavelink heir", forks: "~405 (Wavelink base)", latestVersion: "1.0.0", lastRelease: "2026", status: "active", statusLabel: "⚡ Wavelink Successor", officiallyListed: false, pythonMin: "3.10", lavaVersion: "v4 only", daveSupport: true, license: "MIT", discord_libs: ["discord.py v2 only"], color: "#0288d1", accent: "#4fc3f7", icon: "⚡", tagline: "Wavelink reborn — carries all battle-tested Wavelink logic + adds DAVE E2EE, LFU cache & active maintenance.", wavelinkSuccessor: true, features: { "Multi-Node Support": true, "Load Balancing": true, "Region-Based Balancing": false, "Audio Filters / EQ": true, "Custom Source Plugins": false, "Built-in Queue": true, "AutoPlay / Recommendations": true, "Spotify Built-in": false, "Apple Music Built-in": false, "Full Type Hints": true, "Session Resuming": true, "REST API Support": true, "WebSocket Support": true, "DAVE (E2EE) Support": true, "Speedups (optional)": false, "Library-Agnostic": false, }, pros: [ "Built on Wavelink — inherits years of battle-tested production logic from thousands of real bots", "Near-identical API to Wavelink 3.x — easiest migration path for existing Wavelink users", "DAVE E2EE — the exact missing feature that caused Wavelink's archival, now fully solved", "Built-in Queue: history, shuffle, loop_all, loop, peek, swap, put_at, delete, async lock", "3-mode AutoPlay: enabled (dual Spotify sprec: + YouTube Mix seeds), partial, disabled", "Live zero-downtime node migration via player.switch_node() — reapplies filters/volume/position", "LFU request cache — new vs Wavelink, reduces redundant Lavalink API calls", "PluginFilters class — cleaner plugin filter support than Wavelink", "NodeInfo.has_source() / has_plugin() helpers — Wavelink lacked these", "RoutePlanner API (unmark failed addresses) — Wavelink never exposed this", "Inactive player token bucket system — carried over and improved from Wavelink", "Exponential backoff reconnect logic — same proven Wavelink pattern", "Pyright strict-compliant types, Python 3.10–3.13 support", "redis + davey optional extras — new additions not in Wavelink", ], cons: [ "discord.py v2 only — no nextcord/disnake/py-cord/hikari", "Not yet listed on official lavalink.dev/clients page", "No native Spotify/Apple Music — requires LavaSrc server plugin", "No region-based load balancing", "No custom source plugin system (unlike Lavalink.py)", "Lavalink v4+ only — v3 not supported", "Community still rebuilding from Wavelink (smaller than Wavelink was at peak)", ], missing: [ "Not yet on official lavalink.dev/clients list", "No support for nextcord / disnake / py-cord / hikari", "No native Spotify/Apple Music (needs LavaSrc server plugin)", "No region-based load balancing", "No custom source plugin architecture (unlike Lavalink.py)", ], }, { name: "Lavalink.py", author: "devoxin", github: "https://github.com/devoxin/Lavalink.py", pypi: "lavalink", stars: 243, forks: 95, latestVersion: "5.9.0", lastRelease: "Sep 2024", status: "active", statusLabel: "Active", officiallyListed: true, pythonMin: "3.8", lavaVersion: "v3 + v4", daveSupport: true, license: "MIT", discord_libs: ["Any (library-agnostic)"], color: "#e84393", accent: "#ff6eb4", icon: "🌋", tagline: "The original. Powerful & library-agnostic.", features: { "Multi-Node Support": true, "Load Balancing": true, "Region-Based Balancing": true, "Audio Filters / EQ": true, "Custom Source Plugins": true, "Built-in Queue": false, "AutoPlay / Recommendations": false, "Spotify Built-in": false, "Apple Music Built-in": false, "Full Type Hints": false, "Session Resuming": true, "REST API Support": true, "WebSocket Support": true, "DAVE (E2EE) Support": true, "Speedups (optional)": false, "Library-Agnostic": true, }, pros: [ "Works with ANY async Python Discord library", "Longest track record, battle-tested", "Custom sources allow Spotify/Apple Music via plugin", "Full Lavalink v3 + v4 coverage", "Official Lavalink docs listing", "Active maintenance, 1,026+ commits", ], cons: [ "No built-in queue management", "No AutoPlay / track recommendations", "No native Spotify/Apple Music", "Weaker type hinting vs mafic", "Requires more boilerplate for advanced use", ], missing: [ "No built-in queue (must roll your own)", "No native streaming service support", "No AutoPlay / smart recommendations", "Partial strict type hints", ], }, { name: "Pomice", author: "cloudwithax", github: "https://github.com/cloudwithax/pomice", pypi: "pomice", stars: 73, forks: 33, latestVersion: "2.8.1", lastRelease: "2023", status: "slow", statusLabel: "Slow updates", officiallyListed: true, pythonMin: "3.8", lavaVersion: "v3 + v4", daveSupport: true, license: "GPL", discord_libs: ["discord.py v2 only"], color: "#7c3aed", accent: "#a78bfa", icon: "🍊", tagline: "Modern wrapper with built-in Spotify & Apple Music.", features: { "Multi-Node Support": true, "Load Balancing": true, "Region-Based Balancing": false, "Audio Filters / EQ": true, "Custom Source Plugins": false, "Built-in Queue": false, "AutoPlay / Recommendations": false, "Spotify Built-in": true, "Apple Music Built-in": true, "Full Type Hints": true, "Session Resuming": true, "REST API Support": true, "WebSocket Support": true, "DAVE (E2EE) Support": true, "Speedups (optional)": false, "Library-Agnostic": false, }, pros: [ "Built-in Spotify & Apple Music querying", "100% Lavalink spec coverage claimed", "Clean, beginner-friendly API", "Full type annotations", "Officially listed in Lavalink docs", ], cons: [ "discord.py v2 only — no nextcord/disnake/py-cord", "GPL license (more restrictive)", "Slow update cadence since 2023", "No built-in queue", "No AutoPlay / recommendations", "No custom source plugin system", "No region-based load balancing", ], missing: [ "No support for nextcord, disnake, py-cord", "No built-in queue system", "No AutoPlay / smart recommendations", "No custom source extensibility", "GPL license limits closed-source projects", ], }, { name: "Mafic", author: "ooliver1", github: "https://github.com/ooliver1/mafic", pypi: "mafic", stars: 70, forks: 8, latestVersion: "2.10.1", lastRelease: "May 2025", status: "active", statusLabel: "Active", officiallyListed: true, pythonMin: "3.8", lavaVersion: "v3 + v4", daveSupport: true, license: "MIT", discord_libs: ["discord.py v2", "nextcord", "disnake", "py-cord"], color: "#0ea5e9", accent: "#7dd3fc", icon: "🎵", tagline: "Fully typed. Multi-library. Production-grade.", features: { "Multi-Node Support": true, "Load Balancing": true, "Region-Based Balancing": false, "Audio Filters / EQ": true, "Custom Source Plugins": false, "Built-in Queue": false, "AutoPlay / Recommendations": false, "Spotify Built-in": false, "Apple Music Built-in": false, "Full Type Hints": true, "Session Resuming": true, "REST API Support": true, "WebSocket Support": true, "DAVE (E2EE) Support": true, "Speedups (optional)": true, "Library-Agnostic": false, }, pros: [ "Pyright strict-compliant type hints", "Works with discord.py, nextcord, disnake, py-cord", "Optional C-speed speedups via extra install", "Fully customisable node balancing strategies", "Clean, modern API design", "Actively maintained (latest: May 2025)", ], cons: [ "No built-in queue management", "No AutoPlay or track recommendations", "No native Spotify/Apple Music support", "Only works with the 4 supported Discord libs", "No custom source plugin system", "No region-based balancing", ], missing: [ "No built-in queue (must implement manually)", "No AutoPlay / intelligent recommendations", "No native streaming service support", "No custom source extensibility", ], }, { name: "Lavalink.py (old)", author: "devoxin (deprecated context)", github: "https://github.com/devoxin/Lavalink.py", pypi: "lavalink", stars: 243, forks: 95, latestVersion: "≤3.x (old branch)", lastRelease: "Legacy", status: "legacy", statusLabel: "See current Lavalink.py", officiallyListed: true, pythonMin: "3.8", lavaVersion: "v3 (legacy)", daveSupport: false, license: "MIT", discord_libs: ["Any"], color: "#64748b", accent: "#94a3b8", icon: "📦", tagline: "The original library — now fully updated to v5.x", features: { "Multi-Node Support": true, "Load Balancing": true, "Region-Based Balancing": true, "Audio Filters / EQ": true, "Custom Source Plugins": true, "Built-in Queue": false, "AutoPlay / Recommendations": false, "Spotify Built-in": false, "Apple Music Built-in": false, "Full Type Hints": false, "Session Resuming": true, "REST API Support": false, "WebSocket Support": true, "DAVE (E2EE) Support": false, "Speedups (optional)": false, "Library-Agnostic": true, }, pros: [ "Foundation for modern Lavalink.py", "Many bots still running it", ], cons: [ "Lavalink v3 focused (v3 EOL / deprecated)", "No DAVE E2EE support", "No REST API support", "No v4 features", ], missing: [ "Lavalink v4 REST API", "DAVE E2EE encryption support", "Modern plugin ecosystem", ], isNote: true, noteText: "Note: 'Lavalink.py' as a library is actively maintained at v5.x. This column reflects what the older v3-era versions lacked before modern updates.", }, { name: "Wavelink", author: "PythonistaGuild", github: "https://github.com/PythonistaGuild/Wavelink", pypi: "wavelink", stars: 405, forks: 193, latestVersion: "3.4.1", lastRelease: "Jul 2024", status: "dead", statusLabel: "⚠️ ARCHIVED Apr 2025", officiallyListed: false, pythonMin: "3.10", lavaVersion: "v4 only", daveSupport: false, license: "MIT", discord_libs: ["discord.py v2 only"], color: "#dc2626", accent: "#fca5a5", icon: "🌊", tagline: "Was the most popular — now archived & abandoned.", features: { "Multi-Node Support": true, "Load Balancing": true, "Region-Based Balancing": false, "Audio Filters / EQ": true, "Custom Source Plugins": false, "Built-in Queue": true, "AutoPlay / Recommendations": true, "Spotify Built-in": false, "Apple Music Built-in": false, "Full Type Hints": true, "Session Resuming": true, "REST API Support": true, "WebSocket Support": true, "DAVE (E2EE) Support": false, "Speedups (optional)": false, "Library-Agnostic": false, }, pros: [ "Had the most stars & community adoption", "Built-in queue + AutoPlay were class-leading", "Full Pyright-strict type hints", "SponsorBlock plugin support built-in", "Lavalink v4 REST API support", "LavaSrc plugin support", ], cons: [ "ARCHIVED on April 5, 2025 — DO NOT USE for new projects", "No DAVE E2EE support (never added)", "Removed from official Lavalink client list", "Python 3.10+ only (narrower support)", "discord.py only — no nextcord/disnake/py-cord", "No more bug fixes or security patches", ], missing: [ "DAVE E2EE support (Discord's new encryption)", "No longer receives updates", "No support for other Discord libraries", "Will break with future Lavalink server versions", ], }, { name: "lavaplay.py", author: "HazemMeqdad", github: "https://github.com/HazemMeqdad/lavaplay.py", pypi: "lavaplay", stars: 35, forks: 12, latestVersion: "1.0.13a+", lastRelease: "2023", status: "slow", statusLabel: "Minimal updates", officiallyListed: true, pythonMin: "3.8", lavaVersion: "v3 + v4 (partial)", daveSupport: true, license: "MIT", discord_libs: ["Any asyncio-based (hikari, discord.py, etc.)"], color: "#059669", accent: "#6ee7b7", icon: "▶️", tagline: "Library-agnostic, hikari-friendly, lightweight.", features: { "Multi-Node Support": false, "Load Balancing": false, "Region-Based Balancing": false, "Audio Filters / EQ": true, "Custom Source Plugins": false, "Built-in Queue": true, "AutoPlay / Recommendations": false, "Spotify Built-in": false, "Apple Music Built-in": false, "Full Type Hints": false, "Session Resuming": false, "REST API Support": false, "WebSocket Support": true, "DAVE (E2EE) Support": true, "Speedups (optional)": false, "Library-Agnostic": true, }, pros: [ "Works with hikari and any asyncio Discord lib", "Has a basic built-in queue", "Officially listed in Lavalink docs", "Lightweight and simple", "Good for hikari-based bots", ], cons: [ "No multi-node support", "No load balancing", "No session resuming", "No REST API (WebSocket only)", "Very low community adoption (35 stars)", "Minimal maintenance", "Weak type hinting", "No custom source extensibility", ], missing: [ "Multi-node / clustering support", "Load balancing strategies", "Session resuming", "REST API support", "Native streaming service support", "AutoPlay recommendations", "Strong type hints", ], }, ]; const featureKeys = [ "Multi-Node Support", "Load Balancing", "Region-Based Balancing", "Audio Filters / EQ", "Custom Source Plugins", "Built-in Queue", "AutoPlay / Recommendations", "Spotify Built-in", "Apple Music Built-in", "Full Type Hints", "Session Resuming", "REST API Support", "WebSocket Support", "DAVE (E2EE) Support", "Speedups (optional)", "Library-Agnostic", ]; const statusColors = { active: { bg: "rgba(16,185,129,0.15)", text: "#34d399", border: "rgba(16,185,129,0.3)" }, slow: { bg: "rgba(245,158,11,0.15)", text: "#fbbf24", border: "rgba(245,158,11,0.3)" }, dead: { bg: "rgba(239,68,68,0.15)", text: "#f87171", border: "rgba(239,68,68,0.3)" }, legacy: { bg: "rgba(100,116,139,0.15)", text: "#94a3b8", border: "rgba(100,116,139,0.3)" }, }; export default function LavalinkComparison() { const [activeTab, setActiveTab] = useState("overview"); const [selectedLib, setSelectedLib] = useState(null); const mainLibs = libraries.filter((l) => !l.isNote); const displayLibs = libraries.filter((l) => !l.isNote); return (
{/* Header */}
🌋 Python × Discord × Audio

Python Lavalink Client Comparison

Deep-dive analysis of every major Python Lavalink wrapper — features, maintenance status, missing capabilities, and which to pick in 2026.

{[ { label: "Libraries Covered", value: "6" }, { label: "Features Compared", value: "16" }, { label: "Data From", value: "GitHub + Docs" }, { label: "Last Checked", value: "Mar 2026" }, ].map((s) => (
{s.value} {s.label}
))}
{/* Tabs */}
{[ { id: "overview", label: "📊 Overview" }, { id: "matrix", label: "🔢 Feature Matrix" }, { id: "deep", label: "🔍 Deep Dive" }, { id: "missing", label: "❌ What's Missing" }, { id: "verdict", label: "✅ Which To Use" }, ].map((tab) => ( ))}
{/* Content */}
{/* OVERVIEW TAB */} {activeTab === "overview" && (
💀 Wavelink was officially archived April 5, 2025. No more updates, bug fixes, or DAVE support. Do not use for new projects.
RevvLink (v1.0.0, 2026) is the direct Wavelink successor — built on Wavelink's proven codebase, adding DAVE E2EE, LFU cache, and active maintenance. Near-identical API makes it the easiest migration path for Wavelink users. Not yet listed on lavalink.dev/clients.
{displayLibs.map((lib) => { const sc = statusColors[lib.status]; const featureCount = Object.values(lib.features).filter(Boolean).length; return (
{ setSelectedLib(lib); setActiveTab("deep"); }} style={{ background: "#0f0f1c", border: `1px solid rgba(255,255,255,0.07)`, borderRadius: 14, padding: 24, position: "relative", overflow: "hidden", }} >
{lib.icon}
{lib.name}
by {lib.author}
{lib.statusLabel}

{lib.tagline}

{[ { label: "Stars", value: `⭐ ${lib.stars}` }, { label: "Version", value: lib.latestVersion }, { label: "Python", value: `≥ ${lib.pythonMin}` }, { label: "Lavalink", value: lib.lavaVersion }, ].map((item) => (
{item.label}
{item.value}
))}
{lib.discord_libs.map((dl) => ( parseInt(h,16)).join(',')},0.12)`, color: lib.accent, fontSize: 11, padding: "2px 8px", borderRadius: 4, border: `1px solid rgba(${lib.color.replace('#','').match(/.{2}/g).map(h=>parseInt(h,16)).join(',')},0.2)`, }}>{dl} ))}
{featureCount}/{featureKeys.length} features
{lib.officiallyListed && ( ✓ Official )}
); })}
{/* RevvLink note */}
ℹ️
RevvLink — Wavelink's Direct Successor

RevvLink is built on Wavelink's proven codebase — inheriting years of battle-tested production logic from thousands of real bots. It picks up exactly where Wavelink left off, adding DAVE E2EE, LFU cache, PluginFilters, and RoutePlanner API — all things Wavelink never shipped. The API is near-identical to Wavelink 3.x, making it the easiest migration path for any bot currently on Wavelink. As of March 2026 it is not yet listed on lavalink.dev/clients but is installable via{" "} pip install revvlink.

)} {/* FEATURE MATRIX TAB */} {activeTab === "matrix" && (

Comprehensive feature matrix. Green = supported, Red = not supported.

{displayLibs.map((lib) => ( ))} {featureKeys.map((feat) => ( {displayLibs.map((lib) => { const has = lib.features[feat]; return ( ); })} ))} {displayLibs.map((lib) => { const count = Object.values(lib.features).filter(Boolean).length; return ( ); })}
Feature
{lib.icon} {lib.name} {lib.statusLabel}
{feat} {has ? ( ) : ( )}
TOTAL FEATURES {count}/{featureKeys.length}
)} {/* DEEP DIVE TAB */} {activeTab === "deep" && (
{displayLibs.map((lib) => ( ))}
{!selectedLib && (
Select a library above to see details
)} {selectedLib && (
{/* Main info */}
parseInt(h,16)).join(',')},0.2)`, borderRadius: 14, padding: 28, position: "relative", overflow: "hidden", }}>
{selectedLib.icon}

{selectedLib.name}

by {selectedLib.author} · {selectedLib.license} License · v{selectedLib.latestVersion}

{selectedLib.tagline}

{[ { label: "⭐ Stars", value: selectedLib.stars }, { label: "🍴 Forks", value: selectedLib.forks }, { label: "📅 Last Release", value: selectedLib.lastRelease }, ].map((s) => (
{s.label}
{s.value}
))}
{/* Pros */}

✅ Strengths

{selectedLib.pros.map((p) => (
{p}
))}
{/* Cons */}

⚠️ Weaknesses

{selectedLib.cons.map((c) => (
{c}
))}
{/* Features for this lib */}

Feature Breakdown

{featureKeys.map((feat) => { const has = selectedLib.features[feat]; return (
{has ? "✓" : "✗"} {feat}
); })}
)}
)} {/* MISSING TAB */} {activeTab === "missing" && (

What critical features are absent from each library — these are the gaps developers must work around.

{displayLibs.map((lib) => (
{lib.icon} {lib.name} {lib.statusLabel}
{lib.missing.length === 0 ? (

No significant missing features identified.

) : (
{lib.missing.map((m) => (
{m}
))}
)}
))}
{/* Universal gaps */}

🌐 Universal Gaps Across ALL Python Lavalink Clients

{[ { title: "No Redis / External Queue Stores", desc: "Unlike the JS lavalink-client, no Python library supports pluggable queue backends like Redis for multi-process sync." }, { title: "No Destroy Reason Events", desc: "None expose detailed player destroy reasons (e.g., channel deleted, bot disconnected, empty queue)." }, { title: "No URL Blacklist/Whitelist", desc: "No client-side validation to block/allow specific URLs or domains before sending to Lavalink." }, { title: "No Unresolved Tracks", desc: "No lazy-loading of track metadata — all data is fetched eagerly, wasting API calls for large playlists." }, { title: "Weak Plugin Ecosystem", desc: "Minimal first-class support for LavaSrc, SponsorBlock, or other plugins compared to JS clients." }, { title: "No Voice Region Load Balancing", desc: "Most libraries lack Discord voice region-aware node routing for low-latency selection." }, { title: "No Mixer / Layer Support", desc: "None support NodeLink mixer layers or advanced audio layering features." }, { title: "No Built-in Health Dashboards", desc: "No libraries ship monitoring utilities or node health visualization tooling." }, ].map((gap) => (
{gap.title}
{gap.desc}
))}
)} {/* VERDICT TAB */} {activeTab === "verdict" && (

Pick the right library for your situation in 2026.

{[ { scenario: "🆕 Starting a new Discord.py music bot in 2026", winner: "Lavalink.py", color: "#e84393", reason: "Most battle-tested, library-agnostic, actively maintained, full Lavalink v4 support, DAVE E2EE, custom sources. The safe default choice.", avoid: "Wavelink (archived), Pomice (GPL, slow updates)", }, { scenario: "🔒 Need strict TypeScript-style type safety in Python", winner: "Mafic", color: "#0ea5e9", reason: "Pyright strict-compliant types, optional C speedups, actively maintained as of May 2025. Best developer experience for typed codebases.", avoid: "Lavalink.py (partial hints), lavaplay.py (weak hints)", }, { scenario: "🎵 Need Spotify / Apple Music out of the box", winner: "Pomice", color: "#7c3aed", reason: "Only library with native built-in Spotify and Apple Music querying clients. No manual custom source registration needed.", avoid: "All others require LavaSrc server plugin or custom source code", }, { scenario: "🦅 Using Hikari / Lightbulb instead of discord.py", winner: "lavaplay.py or Lavalink.py", color: "#059669", reason: "lavaplay.py has explicit hikari examples. Lavalink.py is truly library-agnostic and works with any asyncio Discord wrapper.", avoid: "Mafic (only 4 libs), Pomice (discord.py only), Wavelink (discord.py only)", }, { scenario: "🏢 Production multi-guild bot needing resilience", winner: "Lavalink.py", color: "#e84393", reason: "Best multi-node support, region-based load balancing, session resuming, and custom sources. Used by 600+ projects.", avoid: "lavaplay.py (no multi-node), Wavelink (archived)", }, { scenario: "🚫 What to absolutely NOT use", winner: "Wavelink", color: "#dc2626", reason: "Archived April 5, 2025. No bug fixes, no security patches, no DAVE support. Any existing bots should migrate away immediately.", avoid: "Any project still on Wavelink should migrate to Lavalink.py or RevvLink", }, { scenario: "⚡ Want Queue + AutoPlay without building it yourself", winner: "RevvLink", color: "#0288d1", reason: "Built on Wavelink's proven codebase — inherits years of real-world production stability. Adds DAVE E2EE, LFU cache, RoutePlanner API, and PluginFilters on top. Near-identical Wavelink 3.x API makes migration trivial. The most complete Python Lavalink client available today.", avoid: "If you need nextcord/disnake/py-cord/hikari support, or if your Wavelink bots are too complex to migrate right now", }, ].map((item) => (
{item.scenario}

{item.reason}

Avoid: {item.avoid}
USE
{item.winner}
))}
{/* TL;DR Summary Table */}

📋 TL;DR Summary

{["Library", "Best For", "Avoid If", "2026 Status"].map((h) => ( ))} {[ { lib: "Lavalink.py", best: "General use, any Discord lib, production", avoid: "You need a built-in queue or AutoPlay", status: "✅ Active", sc: "#34d399" }, { lib: "Mafic", best: "Type-safe codebases, discord.py/nextcord/disnake/py-cord", avoid: "You use hikari or need Spotify natively", status: "✅ Active", sc: "#34d399" }, { lib: "Pomice", best: "Spotify/Apple Music needed quickly", avoid: "Non discord.py projects, GPL-restricted", status: "⚠️ Slow", sc: "#fbbf24" }, { lib: "Wavelink", best: "Nothing — it's archived", avoid: "All new projects", status: "💀 Dead", sc: "#ef4444" }, { lib: "lavaplay.py", best: "Hikari bots, simple setups", avoid: "Multi-node or production scale", status: "⚠️ Minimal", sc: "#fbbf24" }, { lib: "RevvLink", best: "Wavelink migration, Queue + AutoPlay out of box, DAVE E2EE, live node migration", avoid: "Non discord.py bots, multi-lib codebases", status: "⚡ Wavelink heir", sc: "#4fc3f7" }, ].map((row) => ( ))}
{h}
{row.lib} {row.best} {row.avoid} {row.status}
)}
); }