PerformanC / NodeLink

Performant LavaLink alternative written with Node.Js
BSD 2-Clause "Simplified" License
41 stars 23 forks source link
audio-processing bandcamp deezer discord ffmpeg genius lavalink musixmatch pandora soundcloud spotify youtube youtube-music

NodeLink

Performant LavaLink replacement written in Node.js.

Features

Dependencies

[!NOTE] For most sources FFmpeg isn't required. It is currently required for timescale, seek and endTime filter. Required for local and http sources.

[!NOTE] Sodium libraries are only required if you use aead_xchacha20_poly1305_rtpsize encryption mode.

[!NOTE] Dependencies marked with an asterisk (*) are dependencies maintained by PerformanC or one of its members.

Installation

1. Clone the repository

$ git clone https://github.com/PerformanC/NodeLink
$ cd NodeLink

2. Install the dependencies

$ npm i

[!NOTE] If you want to use pure JavaScript, replace sodium-native with libsodium-wrappers. Keep in mind that pure JavaScript will offer worse performance.

[!NOTE] If you are incapable of installing node-libsamplerate or/and @flat/lame, remove its dependency from package.json and disable nativePlayback in config.js.

3. Run NodeLink

$ npm start

Using with Docker

For information on how to install NodeLink using Docker, see the NodeLink Docker guide.

Usage

NodeLink is compatible with most LavaLink clients, as it implements most of the LavaLink API. However, some clients may not be compatible with NodeLink, as NodeLink implements changes in some behaviors and endpoints.

Client Platform v2 supported? NodeLink Features? NodeLink major version
Lavalink-Client JVM Yes No v1 and v2
Lavalink.kt Kotlin No No v1
DisGoLink Go Yes No v1 and v2
Lavalink.py Python Yes No v1 and v2
Mafic Python Yes No v1 and v2
Wavelink Python Yes No v1 and v2
Pomice Python Yes No v1 and v2
Hikari-ongaku Python Yes No v1 and v2
Moonlink.js Typescript Yes Yes v1 and v2
Magmastream Typescript No No v1
Lavacord Typescript Yes No v1 and v2
Shoukaku Typescript Yes No v1 and v2
Lavalink-Client Typescript No No v1
Rainlink Typescript Yes Yes v1 and v2
Poru Typescript Yes Yes v1 and v2
Blue.ts Typescript No No v1 and v2
FastLink Node.js Yes Yes v1 and v2
Riffy Node.js Yes No v1 and v2
TsumiLink Node.js Yes Yes v1 and v2
DisCatSharp .NET Yes No v1 and v2
Lavalink4NET .NET Yes No v1 and v2
Nomia .NET Yes No v1 and v2
CogLink C Yes No v1 and v2
Lavalink-rs Rust, Python Yes No v1 and v2
nyxx_lavalink Dart No No v1

[!IMPORTANT] Not supporting NodeLink v2 often means that the client has a poor implementation of the LavaLink API, not strictly following the API formats, its field and defined purposes. The use of those clients is not recommended.

[!NOTE] The data is gotten from LavaLink documentation, updated with manual checks.

Documentation

NodeLink only documents the differences between LavaLink and NodeLink. For the rest of the documentation, please refer to LavaLink's documentation.

Troubleshoot

"Expected 200, received 403." error

In some regions like Europe, you may receive a 403 error when trying to connect to YouTube. The real reason is unknown, but The PerformanC team managed to create a proper workaround for this issue.

To fix this issue, you must login to your Google/YouTube account. The proccess of retrieving the neccessary information is explained in config.js file.

node: bad option: --openssl-legacy-provider

This error happens when you are using an outdated version of Node.js. To fix this issue, you must update your Node.js version to the latest version.

You can also remove the --openssl-legacy-provider flag from the package.json file if you wish to use an older version of Node.js.

Support

Any question or issue related to NodeLink or other PerformanC projects can be can be made in PerformanC's Discord server.

For verified issues, please also create a GitHub issue for tracking the issue.

Contributing & Code of Conduct

NodeLink follows the PerformanC's contribution guidelines. It is necessary to follow the guidelines to contribute to NodeLink and other PerformanC projects.

License

NodeLink is licensed under BSD 2-Clause License. You can read more about it on Open Source Initiative.