{"id":15145852,"url":"https://github.com/performanc/nodelink","last_synced_at":"2025-04-09T10:08:02.541Z","repository":{"id":143194019,"uuid":"614635504","full_name":"PerformanC/NodeLink","owner":"PerformanC","description":"Performant LavaLink alternative written with Node.Js","archived":false,"fork":false,"pushed_at":"2025-01-28T21:54:18.000Z","size":6263,"stargazers_count":48,"open_issues_count":12,"forks_count":25,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-06T02:39:17.951Z","etag":null,"topics":["audio-processing","bandcamp","deezer","discord","ffmpeg","genius","lavalink","musixmatch","pandora","soundcloud","spotify","youtube","youtube-music"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PerformanC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-16T01:57:16.000Z","updated_at":"2025-03-08T17:59:37.000Z","dependencies_parsed_at":"2024-04-16T11:44:11.490Z","dependency_job_id":"60c55a9c-9a12-4899-b770-0ea427841fea","html_url":"https://github.com/PerformanC/NodeLink","commit_stats":{"total_commits":458,"total_committers":11,"mean_commits":41.63636363636363,"dds":0.3187772925764192,"last_synced_commit":"3fe6c4d9ae5c970f052091d24970c59fdb2b8a1a"},"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerformanC%2FNodeLink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerformanC%2FNodeLink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerformanC%2FNodeLink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerformanC%2FNodeLink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PerformanC","download_url":"https://codeload.github.com/PerformanC/NodeLink/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248018060,"owners_count":21034048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-processing","bandcamp","deezer","discord","ffmpeg","genius","lavalink","musixmatch","pandora","soundcloud","spotify","youtube","youtube-music"],"created_at":"2024-09-26T11:43:15.303Z","updated_at":"2025-04-09T10:08:02.518Z","avatar_url":"https://github.com/PerformanC.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NodeLink\n\nPerformant LavaLink replacement written in Node.js.\n\n## Features\n\n- Lightweight\n- Real-time audio processing\n- Direct source access\n- Anonymous by default\n\n## Dependencies\n\n- [`@performanc/pwsl-server`](https://github.com/PerformanC/internals/tree/PWSL-server) *\n- [`@performanc/voice`](https://npmjs.com/package/@performanc/voice) *\n- [`prism-media`](https://npmjs.com/package/prism-media)\n- [`opusscript`](https://npmjs.com/package/opusscript) or [`@discordjs/opus`](https://npmjs.com/package/@discordjs/opus)\n- [`libsodium-wrappers`](https://npmjs.com/package/libsodium-wrappers) or [`sodium-native`](https://npmjs.com/package/sodium-native) or [`tweetnacl`](https://npmjs.com/package/tweetnacl)\n- [`ffmpeg`](https://ffmpeg.org/) or [`avconv`](https://libav.org/) or [`ffmpeg-static`](https://npmjs.com/package/ffmpeg-static)\n- [`@flat/lame`](https://github.com/FlatIO/node-lame)\n  - [`bindings`](https://npmjs.com/package/bindings)\n  - [`debug`](https://npmjs.com/package/debug)\n  - [`nan`](https://npmjs.com/package/nan)\n  - [`readable-stream`](https://npmjs.com/package/readable-stream)\n- [`node-libsamplerate`](https://github.com/ThePedroo/node-libsamplerate) *\n  - [`node-addon-api`](https://npmjs.com/package/node-addon-api)\n  - [`node-gyp`](https://npmjs.com/package/node-gyp)\n\n\u003e [!NOTE]\n\u003e For most sources FFmpeg isn't required. It is currently required for timescale, seek and endTime filter. Required for `local` and `http` sources.\n\n\u003e [!NOTE]\n\u003e Sodium libraries are only required if you use `aead_xchacha20_poly1305_rtpsize` encryption mode.\n\n\u003e [!NOTE]\n\u003e Dependencies marked with an asterisk (*) are dependencies maintained by PerformanC or one of its members.\n\n## Installation\n\n### 1. Clone the repository\n\n```shell\n$ git clone https://github.com/PerformanC/NodeLink\n$ cd NodeLink\n```\n\n### 2. Install the dependencies\n\n```shell\n$ npm i\n```\n\n\u003e [!NOTE]\n\u003e If you want to use pure JavaScript, replace `sodium-native` with `libsodium-wrappers`. Keep in mind that pure JavaScript will offer worse performance.\n\n\u003e [!NOTE]\n\u003e If you are incapable of installing `node-libsamplerate` or/and `@flat/lame`, remove its dependency from `package.json` and disable `nativePlayback` in `config.js`.\n\n### 3. Run NodeLink\n\n```shell\n$ npm start\n```\n\n### Using with Docker\nFor information on how to install NodeLink using Docker, see [the NodeLink Docker guide](docs/docker.md).\n\n## Usage\n\nNodeLink 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.\n\n| Client                                                              | Platform     | v2 supported?   | NodeLink Features?  | NodeLink major version |\n| --------------------------------------------------------------------|--------------|-----------------|---------------------|------------------------|\n| [Lavalink-Client](https://github.com/lavalink-devs/Lavalink-Client) | JVM          | Yes             | No                  | v1 and v2              |\n| [Lavalink.kt](https://github.com/DRSchlaubi/Lavalink.kt)            | Kotlin       | No              | No                  | v1                     |\n| [DisGoLink](https://github.com/disgoorg/disgolink)                  | Go           | Yes             | No                  | v1 and v2              |\n| [Lavalink.py](https://github.com/devoxin/lavalink.py)               | Python       | Yes             | No                  | v1 and v2              |\n| [Mafic](https://github.com/ooliver1/mafic)                          | Python       | Yes             | No                  | v1 and v2              |\n| [Wavelink](https://github.com/PythonistaGuild/Wavelink)             | Python       | Yes             | No                  | v1 and v2              |\n| [Pomice](https://github.com/cloudwithax/pomice)                     | Python       | Yes             | No                  | v1 and v2              |\n| [Hikari-ongaku](https://github.com/MPlatypus/hikari-ongaku)         | Python       | Yes             | No                  | v1 and v2              |\n| [Moonlink.js](https://github.com/1Lucas1apk/moonlink.js)            | Typescript   | Yes             | Yes                 | v1 and v2              |\n| [Magmastream](https://github.com/Blackfort-Hosting/magmastream)     | Typescript   | No              | No                  | v1                     |\n| [Lavacord](https://github.com/lavacord/Lavacord)                    | Typescript   | Yes             | No                  | v1 and v2              |\n| [Shoukaku](https://github.com/Deivu/Shoukaku)                       | Typescript   | Yes             | No                  | v1 and v2              |\n| [Lavalink-Client](https://github.com/tomato6966/Lavalink-Client)    | Typescript   | No              | No                  | v1                     |\n| [Rainlink](https://github.com/RainyXeon/Rainlink)                   | Typescript   | Yes             | Yes                 | v1 and v2              |\n| [Poru](https://github.com/parasop/Poru)                             | Typescript   | Yes             | Yes                 | v1 and v2              |\n| [Blue.ts](https://github.com/ftrapture/blue.ts)                     | Typescript   | No              | No                  | v1 and v2              | \n| [FastLink](https://github.com/PerformanC/FastLink)                  | Node.js      | Yes             | Yes                 | v1 and v2              |\n| [Riffy](https://github.com/riffy-team/riffy)                        | Node.js      | Yes             | No                  | v1 and v2              |\n| [TsumiLink](https://github.com/Fyphen1223/TsumiLink)                | Node.js      | Yes             | Yes                 | v1 and v2              |\n| [DisCatSharp](https://github.com/Aiko-IT-Systems/DisCatSharp)       | .NET         | Yes             | No                  | v1 and v2              |\n| [Lavalink4NET](https://github.com/angelobreuer/Lavalink4NET)        | .NET         | Yes             | No                  | v1 and v2              |\n| [Nomia](https://github.com/DHCPCD9/Nomia)                           | .NET         | Yes             | No                  | v1 and v2              |\n| [CogLink](https://github.com/PerformanC/Coglink)                    | C            | Yes             | No                  | v1 and v2              |\n| [Lavalink-rs](https://gitlab.com/vicky5124/lavalink-rs)             | Rust, Python | Yes             | No                  | v1 and v2              |\n| [nyxx_lavalink](https://github.com/nyxx-discord/nyxx_lavalink)      | Dart         | No              | No                  | v1                     |\n\n\u003e [!IMPORTANT]\n\u003e 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.\n\n\u003e [!NOTE]\n\u003e The data is gotten from [LavaLink documentation](https://lavalink.dev/clients#client-libraries), updated with manual checks.\n\n## Documentation\n\nNodeLink only [documents the differences between LavaLink and NodeLink](docs/API.md). For the rest of the documentation, please refer to [LavaLink's documentation](https://lavalink.dev/api/index.html).\n\n## Troubleshoot\n\n### \"Expected 200, received 403.\" error\n\nIn 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.\n\nTo fix this issue, you must login to your Google/YouTube account. The proccess of retrieving the neccessary information is explained in [config.js](config.js) file.\n\n### node: bad option: --openssl-legacy-provider\n\nThis 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.\n\nYou can also remove the `--openssl-legacy-provider` flag from the `package.json` file if you wish to use an older version of Node.js.\n\n## Support\n\nAny question or issue related to NodeLink or other PerformanC projects can be can be made in [PerformanC's Discord server](https://discord.gg/uPveNfTuCJ).\n\nFor verified issues, please also create a GitHub issue for tracking the issue.\n\n## Contributing \u0026 Code of Conduct\n\nNodeLink follows the PerformanC's [contribution guidelines](https://github.com/PerformanC/contributing). It is necessary to follow the guidelines to contribute to NodeLink and other PerformanC projects.\n\n## License\n\nNodeLink is licensed under [BSD 2-Clause License](LICENSE). You can read more about it on [Open Source Initiative](https://opensource.org/licenses/BSD-2-Clause).\n\n* This project is considered as: [standard compliant](https://github.com/PerformanC/contributing?tab=readme-ov-file#project-information).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperformanc%2Fnodelink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fperformanc%2Fnodelink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperformanc%2Fnodelink/lists"}