Web-SyncPlay is now a unified Bun + Next.js codebase with all application code in src/. Realtime websocket handling is embedded in the same runtime, and shared room playback state is persisted in Valkey with a 1h TTL.
- Bun runtime and package manager
- Next.js + React + TypeScript
- Tailwind CSS + shadcn/ui primitives + Lucide icons
- Vidstack player
- TanStack Query + TanStack Table
- Native WebSocket realtime layer
- yt-dlp media extraction fallback
- Docker Compose deployment
src/app: Next.js App Router pages and API routessrc/realtime: websocket room sync enginesrc/shared: shared domain contractssrc/server: unified HTTP + websocket server bootstrap
bun install
bun run dev- Open a room and use the top-right View dropdown (left of Share).
- Available views:
Room view,Player embed,Control embed, plus a QR code for control embed. - Control/player links include
#uid=<userId>&secret=<secret>; this hash is parsed on load and removed from the URL immediately. - Each client persists its own
userId+ random secret in local storage and authenticates websocket joins with that pair. - Playback and playlist mutations are accepted only for
owner/moderatorroles and verified websocket sessions.
docker compose up -d --build