A unified Web UI for your media stack, built with React and Vite.
qBitWeb serves as a frontend for qBittorrent, Sonarr, and Radarr. It features a row-based layout, dark mode UI, media integration, and advanced torrent file management.
All services are optional. Mix and match Radarr, Sonarr, and qBittorrent to create the exact dashboard you need, or use all three for a unified home media experience.
- Modular Services: Configure only what you need. If you only use qBittorrent, it acts as a full-screen torrent client. If you add Sonarr or Radarr, it transforms into a media dashboard.
- Dark Mode UI: Interactive elements, smooth transitions, and responsive design for mobile and desktop.
- Media Integrations: View Upcoming releases, Missing media, and Recently Added history natively within the UI from Sonarr and Radarr.
- Interactive Search & Discovery: Browse and search for new Movies or TV Shows right from the dashboard, configure root folders and quality profiles, and add them directly to your servers.
- Detailed Media Views: Click into any movie or show to view a backdrop, synopsis, download status, and trigger direct search and delete commands.
- Torrent File Manager: Open any torrent to view a hierarchical folder tree of its contents. Search, filter, and selectively toggle files or entire directories.
- Global Toast Notifications: Search results from Sonarr and Radarr natively display as clean toast notifications in the UI, letting you know instantly when downloads begin or if no results were found.
- Active Searches Modal: A global spinning indicator tracks any ongoing searches across the app. Tap it to view a modal of all currently active background searches.
- Auto-Update Notifications: Automatically checks for new versions of qBitWeb in the background and displays a notification banner so you never miss a release.
- Secure Authentication: Built-in password protection and WebAuthn Passkey support.
You have a few ways to run qBitWeb depending on your setup.
Perfect for advanced setups or reverse proxies where you want the UI running in its own isolated container. The Docker image is automatically built and published to the GitHub Container Registry (ghcr.io).
Run the container and pass in your URLs. All of these environment variables are completely optional.
docker run -d \
--name qbitweb \
--restart unless-stopped \
-p 3000:80 \
-v /path/to/your/data:/app/data \
-e AUTH_PASSWORD=your_secure_password_here \
-e QBITTORRENT_URL=http://192.168.1.100:8080 \
-e QBITTORRENT_USERNAME=admin \
-e QBITTORRENT_PASSWORD=adminadmin \
-e SONARR_URL=http://192.168.1.101:8989 \
-e SONARR_API_KEY=your_sonarr_api_key_here \
-e RADARR_URL=http://192.168.1.102:7878 \
-e RADARR_API_KEY=your_radarr_api_key_here \
ghcr.io/havok89/qbitweb:latestAccess the UI at http://localhost:3000.
Note: Setting AUTH_PASSWORD enables the login screen and WebAuthn (Passkeys) functionality. If omitted, the app will bypass authentication entirely.
Updating your Docker container: When a new release is out, simply pull the latest image and recreate your container:
docker pull ghcr.io/havok89/qbitweb:latest
docker stop qbitweb
docker rm qbitweb
# Run the docker run command again!You can run the built-in Node server directly.
- Ensure you have Node.js installed.
- Clone this repository:
git clone https://github.com/yourusername/qBitWeb.git cd qBitWeb - Install dependencies and build the frontend:
npm install npm run build
- Copy
.env.exampleto.envand fill out your desired optional connections:cp .env.example .env
- Start the server:
npm start
If you want to modify the code or run it locally for testing:
- Install dependencies:
npm install
- Create a
.envfile with your optional server configurations (see.env.example). - Start the dev backend and the Vite frontend:
npm run dev:server npm run dev
- Open
http://localhost:5173in your browser.
- React (UI Framework)
- Vite (Build Tool)
- React Router (Navigation)
- Lucide React (Icons)
- Vanilla CSS (Styling)
MIT License









