Thanks for taking the time. Bug reports, fixes and small features are all welcome.
- Bugs: open an issue using the bug template. Server logs and your install method (launcher, Docker or installer) save a lot of back and forth.
- Features: open an issue first to talk it through, so nobody spends a weekend on something that won't be merged.
- Security problems: please don't open a public issue. See SECURITY.md.
You need Node 20 or newer.
git clone https://github.com/SAKMZ/syncwave.git
cd syncwave
npm install
npm run devThen open http://localhost:3000.
Two things that aren't obvious:
server.mjsand everything underlib/*.mjsrun outside Next.js hot reload. After changing them, stop and restartnpm run dev.- If every track fails with
HTTP Error 403, update yt-dlp first:node_modules/youtube-dl-exec/bin/yt-dlp -U. YouTube changes often and an outdated yt-dlp is the most common cause.
npm run typecheckpasses.- The change is tested in a real room, ideally with a second browser joined as a listener.
- UI changes are checked at phone width as well as desktop.
- Keep pull requests focused on one thing. Unrelated clean-ups are easier to review separately.
| Path | What's there |
|---|---|
server.mjs |
One HTTP server for Next.js, Socket.io and the /audio stream |
lib/rooms.mjs |
Room state, the playback clock, queue and moderation |
lib/resolver.mjs |
Fetching, caching and serving audio with yt-dlp |
lib/dj.mjs |
The optional AI DJ |
components/ |
The room UI |
site/ |
The project website (static HTML, deployed separately) |
Syncwave is under the PolyForm Noncommercial License 1.0.0. By contributing, you agree your contribution is released under the same license.