Rustalink is a high-performance, standalone Discord audio sending node written in Rust.
Designed for efficiency, reliability, and modern features.
- π High Performance: Built with Rust for minimal overhead and maximum throughput.
- π΅ Extensive Source Support: Native support for 15+ audio platforms.
- π Smart Mirroring: Automatically find audio for metadata-only sources (Spotify, Apple Music, etc.).
- πΊ Advanced YouTube Support: Toggle between multiple clients (WEB, ANDROID, IOS, TV) to bypass restrictions.
- π³ Docker Ready: One-command deployment with pre-configured environments.
- π Highly Configurable: Fine-tune every aspect of the server via
config.toml.
Rustalink supports direct playback and Mirroring. Mirroring allows playback from metadata-only services by automatically finding the best audio match from your configured mirror providers.
| Source | Type | Search Prefix | Features |
|---|---|---|---|
| YouTube | Direct | ytsearch:, ytmsearch: |
ytrec:, Lyrics |
| SoundCloud | Direct | scsearch: |
- |
| Spotify | Mirror | spsearch: |
sprec: |
| Apple Music | Mirror | amsearch: |
- |
| Deezer | Hybrid | dzsearch:, dzisrc: |
dzrec:, Lyrics |
| Tidal | Mirror | tdsearch: |
tdrec: |
| Qobuz | Hybrid | qbsearch:, qbisrc: |
qbrec: |
| Bandcamp | Direct | bcsearch: |
- |
| MixCloud | Direct | mcsearch: |
- |
| JioSaavn | Hybrid | jssearch: |
jsrec: |
| Gaana | Hybrid | gnsearch: |
- |
| Yandex Music | Hybrid | ymsearch: |
ymrec:, Lyrics |
| Audiomack | Hybrid | amksearch: |
- |
| Anghami | Mirror | agsearch: |
- |
| Shazam | Mirror | shsearch: |
- |
| Pandora | Mirror | pdsearch: |
pdrec: |
| Audius | Direct | ausearch:, audsearch: |
- |
| HTTP / Local | Direct | - | - |
| Google TTS | Direct | gtts:, speak: |
gtts://lang:text to override language |
| Flowery TTS | Direct | ftts: |
ftts:// pattern supported. Override parameters via query ?voice=... |
| LazyPy TTS | Direct | lazypytts:, lazytts: |
lazypytts:// pattern supported. Override via format lazypytts:Service:Voice:Text |
Tip
Hybrid sources support direct playback if credentials are provided. Otherwise, they seamlessly fall back to mirroring.
Text-to-Speech (TTS) Usage & Parameters
Rustalink features three distinct TTS sources with unique routing parameters:
-
Google TTS (
gtts:orspeak:)- Uses standard Google Translate voices based on the
config.tomllanguage code. - You can also optionally override your language for a specific query by appending a colon after the
gtts://scheme or base prefix. - Examples:
- Basic:
gtts:Hello World - Custom Language:
gtts://fr:Bonjour le mondeorspeak:es:Hola Mundo
- Basic:
- Uses standard Google Translate voices based on the
-
Flowery TTS (
ftts://orftts:)- Capable of overriding your
config.tomlvoice and speed settings on the fly utilizing URL query variables. - Available Parameters:
voice,translate,silence,speed. - Examples:
- Basic:
ftts://Hello World - All Params:
ftts://Hello World?voice=Bria&translate=false&silence=500&speed=1.5
- Basic:
- Capable of overriding your
-
LazyPy TTS (
lazypytts:orlazytts:)- Connects to various web TTS APIs. You can define the custom service and voice utilizing colon separators.
- You can also use the
lazypytts://orlazytts://pattern. - Examples:
- Basic:
lazypytts:Hello World - URL Style:
lazypytts://Jorge:Hello World - Custom Service & Voice:
lazypytts:Amazon:Matthew:Hello World
- Basic:
Bypass restrictions by switching between specialized clients:
| Client Alias | Search | Resolve | Playback |
|---|---|---|---|
WEB |
β | β | β |
MWEB / REMIX / MUSIC_WEB / WEB_REMIX |
β | β | β |
ANDROID |
β | β | β |
IOS |
β | β | β |
TV / TVHTML5 |
β | β | β |
TV_CAST / TVHTML5_CAST |
β | β | β |
TV_EMBEDDED / TVHTML5_EMBEDDED / TVHTML5_SIMPLY_EMBEDDED_PLAYER |
β | β | β |
MUSIC_ANDROID / MUSIC / ANDROID_MUSIC |
β | β | β |
ANDROID_VR / ANDROIDVR |
β | β | β |
WEB_EMBEDDED / WEBEMBEDDED |
β | β | β |
WEB_PARENT_TOOLS / WEBPARENTTOOLS |
β | β | β |
Docker is the recommended way to run Rustalink.
# 1. Pull the image
docker pull ghcr.io/bongodevs/rustalink:latest
# 2. Setup config
mkdir rustalink && cd rustalink
docker run --rm ghcr.io/bongodevs/rustalink:latest cat config.default.toml > config.toml
# 3. Running with Docker Compose
# Create a docker-compose.yml file:
services:
rustalink:
image: ghcr.io/bongodevs/rustalink:latest
ports: ["2333:2333"]
volumes: ["./config.toml:/app/config.toml", "./logs:/app/logs"]
restart: unless-stoppedIf you'd rather build the Docker image yourself from local source instead of pulling a pre-built image:
git clone https://github.com/bongodevs/rustalink.git
cd rustalink
# Build image from source (compiles Rust inside Docker β no local Rust toolchain needed)
docker build --target local -t rustalink:dev .
# Run it
docker run -p 2333:2333 -v ./config.toml:/app/config.toml rustalink:devNote
The --target local flag triggers a full in-container Rust build. This takes longer than pulling the pre-built image but requires no local Rust installation.
For native installation (Windows, Linux, macOS), see the Releases page.
- Rust: Latest stable version is required.
sudo apt-get update
sudo apt-get install -y build-essential cmake pkg-config libssl-dev clangbrew install cmake pkg-config
# Ensure Xcode Command Line Tools are installed:
xcode-select --install- Install Visual Studio Build Tools (select "Desktop development with C++").
- Install CMake.
git clone https://github.com/bongodevs/rustalink.git
cd rustalink
cargo build --releaseThe compiled binary will be at target/release/rustalink.
Rustalink is an independent reimplementation in Rust and does not copy source code from the following projects. We acknowledge their design and architectural influence:
- Lavalink (MIT License) β The original standalone audio node. Rustalink implements the Lavalink v4 protocol and draws inspiration from its player management, session handling, and event emission design.
- NodeLink (GPL-3.0) β Lightweight Lavalink alternative by PerformanC. Inspired Rustalink's approach to source handling and route planning.
See NOTICE for full third-party attribution details.
Rustalink is published under the Apache License 2.0.
See the LICENSE file for more details.
