A full-stack, self-hosted jukebox web app where one device is the Host (audio playback device) and other devices act as controllers to browse tracks and manage a shared queue.
- This software is intended only for private, personal, self-hosted use.
- Do not use it as a public streaming platform or to redistribute copyrighted material.
- You are responsible for ensuring all uploaded audio files are legally owned/licensed by you.
- The project authors/contributors do not grant rights to copyrighted music.
- Frontend: Next.js + TypeScript + Tailwind CSS
- Backend: FastAPI (Python)
- Realtime: Native WebSockets
- Database: PostgreSQL (Docker default), SQLite fallback for local dev
- Orchestration: Docker Compose
- Admin-only upload and delete for mp3/wav files
- Searchable music library with basic metadata
- Shared queue (add/remove/reorder)
- Host playback state controls (play/pause/seek/volume/current track)
- Roles:
admin,host,user,guest - Simple auth via basic login/shared passwords
- Queue rate limiting to reduce spam
frontend/— Next.js app (controllers + host web UI)backend/— FastAPI API + WebSocket + media servingdocker-compose.yml— app + database stack
- Copy env templates:
cp backend/.env.example backend/.envcp frontend/.env.example frontend/.env
- Start:
docker compose up --build
- Open:
- Frontend:
http://localhost:3000 - Backend docs:
http://localhost:8000/docs
- Frontend:
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000cd frontend
npm install
cp .env.example .env
npm run dev- Log in on one device with host/admin credentials.
- That device uses the HTML5
<audio>player and controls playback. - Other devices can queue songs and manage tracks depending on role.
- Playback/queue changes are broadcast through WebSockets to all connected clients.
Configured in backend/.env:
ADMIN_USERNAME+ADMIN_PASSWORD→admin- Username
host+HOST_PASSWORD→host - Any username +
SHARED_USER_PASSWORD→user - Unauthenticated requests use
guest
npm run devnpm run buildnpm run startnpm run lintnpm run typecheck
uvicorn app.main:app --reloadpytest backend/tests
Dependabot is enabled via .github/dependabot.yml for npm, pip, Docker, and GitHub Actions.