NodeLink

NodeLink vs Lavalink

Two paths, same destination. Which one speaks to you? 🎭

NodeLink vs Lavalink

You've probably heard of Lavalink. It's the legend. The OG. The one that started it all.

And you're probably wondering: "Why NodeLink? What's different?"

Fair question. Let's talk about it.

Compatibility First

NodeLink maintains full compatibility with Lavalink v4 API. Your existing clients work out of the box. We just... added a bit more flavor to the mix.


The Extra Spice 🌶️

NodeLink isn't just a clone. We took what worked and added features that made sense to us.


What's Actually Different?

Let's break it down. No fluff. Just facts.

Lyrics Support

Both Support Lyrics

Lavalink has community plugins for lyrics (like LavaLyrics, Lyrics.kt).
NodeLink has it built-in with multiple sources.

# Get lyrics with automatic source detection
curl "http://your-server.com/v4/loadlyrics?encodedTrack=QAAAjQI..." \
     -H "Authorization: yourPassword"

# Prefer specific language
curl "http://your-server.com/v4/loadlyrics?encodedTrack=QAAAjQI...&lang=pt" \
     -H "Authorization: yourPassword"

Supported sources:

  • YouTube Captions: Synced, timestamped lyrics (when available)
  • Genius: Plain text lyrics, community-sourced
  • Musixmatch: Synced lyrics database (auto-obtains signature)
  • LRCLib: Open-source synced lyrics repository


Chapter Markers

Both Support Chapters

Lavalink has the SponsorBlock plugin for chapters.
NodeLink has automatic chapter extraction built-in.

Perfect for podcasts, tutorials, and music albums with multiple parts.

curl "http://your-server.com/v4/loadchapters?encodedTrack=QAAAjQI..." \
     -H "Authorization: yourPassword"

Returns:

[
  {
    "title": "An intro to video chapters",
    "startTime": 0,
    "thumbnails": [
      {
        "url": "https://i.ytimg.com/vi_webp/b1Fo_M_tj6w/hqdefault.webp",
        "width": 336,
        "height": 188
      }
    ],
    "duration": 23000,
    "endTime": 23000
  },
  {
    "title": "How to set up video chapters",
    "startTime": 23000,
    "thumbnails": [
      {
        "url": "https://i.ytimg.com/vi_webp/b1Fo_M_tj6w/hqdefault.webp",
        "width": 336,
        "height": 188
      }
    ],
    "duration": 44000,
    "endTime": 67000
  },
  {
    "title": "See video chapters in action",
    "startTime": 67000,
    "thumbnails": [
      {
        "url": "https://i.ytimg.com/vi_webp/b1Fo_M_tj6w/hqdefault.webp",
        "width": 336,
        "height": 188
      }
    ],
    "duration": 12000,
    "endTime": 79000
  }
]

Connection Metrics

NodeLink Exclusive

Real-time connection health and speed tracking. /v4/connection

Know exactly how your connection is performing. Useful for debugging slow audio or buffering issues.

curl "http://your-server.com/v4/connection" \
     -H "Authorization: yourPassword"

Response:

{
  "status": "good",
  "metrics": {
    "speed": {
      "bps": 23669887.133182842,
      "kbps": 184920.99322799096,
      "mbps": 180.59
    },
    "downloadedBytes": 10485760,
    "durationSeconds": 0.44,
    "timestamp": 1764813556344
  }
}

Direct Streaming

Both Support Direct Streaming

Lavalink has /youtube/stream/{videoId} via YouTube plugin.
NodeLink has /v4/trackstream for all sources.

Get direct streaming URLs and available formats for any track. Enable in config with enableTrackStreamEndpoint: true.

Use cases:

  • Getting direct streaming URLs for custom players
  • Downloading audio for offline playback
  • Custom audio processing pipelines
  • Building audio preview features

Text-to-Speech

Both Support TTS

Lavalink has Google Cloud TTS plugin (requires API keys).
NodeLink has Google TTS built-in (no keys needed).


Enhanced Monitoring

Server Info

Both provide /v4/info, but NodeLink adds the isNodelink field for identification:

Detailed Statistics

NodeLink's /v4/stats includes detailedStats with granular tracking:

{
  "players": 5,
  "playingPlayers": 3,
  "uptime": 17930,
  "detailedStats": {
    "api": {
      "requests": {
        "/v4/loadtracks": 150,
        "/v4/info": 5,
        "/v4/loadlyrics": 42
      },
      "errors": {}
    },
    "sources": {
      "youtube": 120,
      "spotify": 30
    },
    "playback": {
      "events": {
        "TrackStartEvent": 100,
        "TrackEndEvent": 95
      }
    }
  }
}

Audio Sources Comparison

Here's where things get interesting. Let's see what's built-in vs what needs plugins.

These sources stream audio directly without needing to search elsewhere:

SourceLavalinkNodeLink
YouTube🔌 Plugin✅ Built-in
SoundCloud✅ Built-in✅ Built-in
Deezer🔌 Plugin✅ Built-in
Spotify🔌 Plugin✅ Built-in
Bandcamp🔌 Plugin✅ Built-in
Twitch✅ Built-in✅ Built-in
Instagram❌ Not available✅ Built-in
Reddit❌ Not available✅ Built-in
Kwai❌ Not available✅ Built-in
NicoVideo⚠️ Built-in\Not working✅ Built-in
Vimeo⚠️ Built-in\Not working❌ Not available
Pandora❌ Not available✅ Built-in
JioSaavn🔌 Plugin✅ Built-in
Local Files✅ Built-in✅ Built-in
HTTP URLs✅ Built-in✅ Built-in

These sources fetch metadata then search YouTube for actual audio:

SourceLavalinkNodeLinkNotes
Spotify🔌 Plugin✅ Built-inRequires Client ID/Secret (free)
Apple Music🔌 Plugin✅ Built-inAuto-generates token (no $99/year needed!)
Tidal🔌 Plugin✅ Built-inRequires web token (free)
Last.fm❌ Not available✅ Built-inTrack discovery, mirrors to YouTube

Apple Music Token Magic

NodeLink automatically generates Apple Music tokens without requiring the $99/year Apple Developer Program membership. Just set mediaApiToken: "token_here" in config and NodeLink handles the rest.

Lavalink's LavaSrc plugin requires you to pay Apple and manually obtain tokens.

How mirroring works:

  1. Fetch track metadata from Spotify/Apple Music/Tidal
  2. Search YouTube with: "song title" "artist name"
  3. Find best match based on duration and metadata
  4. Stream from YouTube

Why mirror?

  • These platforms don't provide direct streaming APIs
  • Mirroring is the only way without paying for premium accounts
  • YouTube has almost everything

Standard (both support):

  • ytsearch: - YouTube search
  • ytmsearch: - YouTube Music search
  • scsearch: - SoundCloud search

NodeLink extras:

  • spsearch: - Spotify search (then mirrors to YouTube)
  • amsearch: - Apple Music search (then mirrors to YouTube)
  • dzsearch: - Deezer direct search
  • tdsearch: - Tidal search (then mirrors to YouTube)
  • bcsearch: - Bandcamp search
  • jssearch: - JioSaavn search
  • ncsearch: / nicovideo: - NicoVideo search
  • pdsearch: - Pandora search
  • gtts: - Google Text-to-Speech
  • local: / file: - Local file path
  • http: - Direct HTTP URL

Try it:

# Search Spotify then play via YouTube
curl "http://your-server.com/v4/loadtracks?identifier=spsearch:never gonna give you up" \
     -H "Authorization: yourPassword"

# Search Deezer directly
curl "http://your-server.com/v4/loadtracks?identifier=dzsearch:daft punk" \
     -H "Authorization: yourPassword"

# Text-to-speech
curl "http://your-server.com/v4/loadtracks?identifier=gtts:Hello World" \
     -H "Authorization: yourPassword"

The Plugin Situation

Let's address the elephant in the room: Lavalink has plugins. NodeLink doesn't.

But here's the thing...

Different Philosophies

Lavalink: Modular ecosystem. Want a feature? Install a plugin.
NodeLink: Batteries included. Want a feature? It's probably already there.

Neither is objectively better. It depends on what you need.

Lavalink has a thriving plugin ecosystem built by the community:

  • LavaSrc: Spotify, Apple Music, Deezer, Yandex Music support
  • LavaLyrics: Lyrics API for other plugins to consume
  • SponsorBlock: YouTube chapters and sponsor segment skipping
  • YouTube Plugin: Enhanced YouTube with OAuth, age-restriction bypass
  • Google TTS Plugin: Text-to-speech via Google Cloud API
  • LavaSearch: Advanced search across platforms
  • LavaDSPX: Additional audio filters (echo, compressor, phaser)
  • And many more...

How plugin installation works:

Lavalink can auto-download plugins from Maven repositories. You declare them in application.yml with their dependency coordinates, and Lavalink downloads the .jar files on startup.

Advantages:

  • Flexibility: Install only what you need
  • Community-driven: Third-party developers can extend functionality
  • Modularity: Each plugin is independent
  • Auto-download: No manual .jar management needed
  • Extensibility: You can create custom plugins in Java/Kotlin

Trade-offs:

  • Version compatibility: Plugins must match your Lavalink version (v3 vs v4)
  • Configuration complexity: Each plugin has its own config section
  • Dependency management: Need to track plugin versions and updates
  • Restart required: Adding/updating plugins requires restarting Lavalink

NodeLink has most common features built-in:

  • 15+ sources out of the box
  • Lyrics from 4 providers
  • Chapters extraction
  • TTS without API keys
  • Connection metrics
  • Direct streaming

Advantages:

  • Simplicity: One package, everything works
  • No version conflicts: Everything is tested together
  • Unified config: One config file for all features

Trade-offs:

  • Less flexibility: Can't add custom plugins
  • Larger base package: Includes features you might not use
  • Fixed feature set: Dependent on core team for new features

The Reality

Most bots use: YouTube, Spotify, SoundCloud, lyrics, and basic playback. NodeLink covers this without any plugins.

If you need highly specialized features (custom audio sources, unique filters), Lavalink's plugin ecosystem might serve you better.


Configuration Tokens

Some sources need tokens. Here's the reality:

These require free tokens (no payment):

Spotify (clientId + clientSecret):

Deezer (arl):

  • Login to Deezer in browser
  • Open DevTools → Application → Cookies
  • Copy arl cookie value
  • Add to config

Tidal (token):

  • Login to Tidal web player
  • Open DevTools → Network tab
  • Look for API requests with Authorization header
  • Copy token value
  • Add to config

All these services have free tiers. You don't need premium accounts.

Apple Music - The magic one:

applemusic: {
  enabled: true,
  mediaApiToken: "token_here" // NodeLink generates it automatically!
}

That's it. NodeLink handles Apple Music authentication without requiring:

  • $99/year Apple Developer membership
  • Manual token extraction
  • Token refresh management

How? NodeLink reverse-engineered Apple's web player authentication and can generate valid tokens on-demand.

This is why NodeLink exists

We looked at requiring a $99/year membership and said "nope, there's a better way."

These work without ANY tokens:

  • YouTube
  • SoundCloud
  • Bandcamp
  • Instagram
  • Reddit
  • Kwai
  • NicoVideo
  • Pandora (auto-fetches csrf token)
  • Twitch
  • Last.fm
  • Local files
  • HTTP URLs
  • Google TTS

Just enable them in config and they work immediately.


WebSocket Events

NodeLink emits additional events for fine-grained control:


So... Which One?

Still unsure? Let's make it personal.

The Real Answer

NodeLink is API-compatible with Lavalink v4. Your client works with both seamlessly.

Want to try NodeLink? Install it. Test your use case. If you love it, stick with it. If you need something Lavalink-specific, you can switch — your client code doesn't change.

The beauty is that you're not locked in. These are tools, not commitments.

Why NodeLink Matters

NodeLink represents a modern approach to audio streaming:

  • Worker-based architecture: Each player can run in its own process
  • Built-in features: No plugin hunting or version conflicts
  • Open development: Community-driven improvements
  • JavaScript ecosystem: Native integration with Node.js projects
  • Cost-effective: Free features that cost money elsewhere (Apple Music tokens)

It's not about replacing Lavalink. It's about offering a better fit for certain use cases.

We're Here to Help

NodeLink might have rough edges. We own that. But we're actively improving it every day.

Found a bug? Report it and we'll fix it.
Need a feature? Let us know and we'll consider it.
Want to contribute? The codebase is waiting for you.

Together, we make NodeLink better. 💚


Migration is Easy

NodeLink is a drop-in replacement for Lavalink v4. Change your connection URL, everything works. Then gradually enable NodeLink-specific features (lyrics, chapters, extra sources) when you're ready.


Want to detect if you're connected to NodeLink vs Lavalink? Check the /v4/info endpoint:

const info = await fetch('http://your-server.com/v4/info', {
  headers: { 'Authorization': 'yourPassword' }
}).then(r => r.json());

if (info.isNodelink) {
  console.log(`🌿 NodeLink v${info.version.semver}`);
  // Use NodeLink-specific features
  // - /v4/loadlyrics
  // - /v4/loadchapters
  // - /v4/connection
  // - Extra sources (Instagram, Reddit, etc.)
} else {
  console.log(`🎵 Lavalink v${info.version.semver}`);
  // Standard Lavalink features only
}

What's Next?

Now that you know the differences, it's time to try it out.

Follow the Quick Start guide to get NodeLink running in 5 minutes.

Configure Sources

Add tokens for Spotify, Deezer, Tidal (all free). Apple Music auto-generates.

Try Extra Features

Experiment with lyrics, chapters, connection metrics, and TTS.

Build Something Cool

Make a bot, share your creation, join the community!


Questions?

Found something unclear? Want to suggest a feature? Have a cool use case?

Join our community or open an issue. We're always listening. 💙

On this page