Themes for qBittorrent
Left-to-right: solarized-light, gruvbox-light, solarized-dark, gruvbox-dark, dracula, dark
Curated color themes for qBittorrent, available for both the Qt desktop client and WebUI (qbittorrent-nox). Each theme ships in two formats:
- Qt desktop client:
.qbthemebundle (v4.6.0+, Qt6) - WebUI:
.tar.gzor.ziparchive
| Theme | Palette | Qt Client | WebUI |
|---|---|---|---|
| Dark | .qbtheme | tar.gz ยท zip | |
| Dracula | .qbtheme | tar.gz ยท zip | |
| Gruvbox Dark | .qbtheme | tar.gz ยท zip | |
| Solarized Dark | .qbtheme | tar.gz ยท zip | |
| Gruvbox Light | .qbtheme | tar.gz ยท zip | |
| Solarized Light | .qbtheme | tar.gz ยท zip |
- Download a WebUI theme archive (
.tar.gzor.zip) from the Downloads section - Extract it to a directory:
mkdir -p ~/.config/qbittorrent/webui tar -xzf webui-dracula.tar.gz -C ~/.config/qbittorrent/webui
- In qBittorrent:
- Go to Tools โ Options โ Web UI
- Enable "Use alternative Web UI"
- Set "Files location" to the extracted folder (e.g.,
~/.config/qbittorrent/webui/webui-dracula) - Click Save and reload the WebUI page
Troubleshooting: If you encounter "Unacceptable file type, only regular file is allowed", disable alternative UI via API:
curl "http://localhost:8080/api/v2/app/setPreferences?json=%7B%22alternative_webui_enabled%22:false%7D"- Download a
.qbthemefile from the Downloads section - In qBittorrent:
- Go to Tools โ Options โ Behavior โ Interface
- Under "Interface theme", click "..." and select the downloaded
.qbthemefile - Click OK and restart qBittorrent
jqโ JSON processorrccโ Qt Resource Compiler (Qt5 or Qt6)zipโ (optional) for WebUI.ziparchives
# Arch Linux
sudo pacman -S jq qt6-base
# Ubuntu/Debian
sudo apt install jq qtbase5-dev-tools
# macOS
brew install jq qt# Build all themes
./gen.sh
# Build a single theme
./gen.sh themes/dracula.json
# Outputs:
# - qt/<theme>.qbtheme
# - webui/<theme>.tar.gz
# - webui/<theme>.zip (if zip is installed)| Qt Client | WebUI |
|---|---|
![]() |
![]() |
| Qt Client | WebUI |
|---|---|
![]() |
![]() |
| Qt Client | WebUI |
|---|---|
![]() |
![]() |
| Qt Client | WebUI |
|---|---|
![]() |
![]() |
| Qt Client | WebUI |
|---|---|
![]() |
![]() |
| Qt Client | WebUI |
|---|---|
![]() |
![]() |
This repository contains:
.
โโโ gen.sh # POSIX-compliant build script
โโโ themes/ # Theme definitions (JSON)
โ โโโ dracula.json
โ โโโ dark.json
โ โโโ ...
โโโ template/
โ โโโ qt/ # Qt client templates
โ โ โโโ stylesheet.qss.template
โ โ โโโ config.json.template
โ โ โโโ icons/
โ โโโ webui/ # WebUI base + theme override
โ โโโ private/
โ โ โโโ css/
โ โ โโโ theme.css.template
โ โโโ ...
โโโ qt/ # Build output: .qbtheme files
โโโ webui/ # Build output: archives
qBittorrent themes (supported since v4.2.2) are .qbtheme bundles โ Qt Resource Collection (RCC) files loaded at runtime. These bundles use the virtual path :/uitheme for all resources.
A .qbtheme file must contain:
stylesheet.qss(required) โ Qt Style Sheet defining widget appearanceconfig.json(required, since v4.3.0) โ Color definitions for GUI elementsicons/(optional, since v4.3.0) โ Custom icon overrides
Uses CSS-like syntax to style Qt widgets. Resources are referenced via :/uitheme prefix:
QPushButton {
background: #282a36;
border: 1px solid #44475a;
}
QCheckBox::indicator:checked {
image: url(:/uitheme/icons/checkbox_checked.svg);
}References:
Defines semantic colors used throughout qBittorrent's GUI. Accepts #rrggbb hex or Qt color names.
Supported color keys:
{
"colors": {
// Palette roles (Qt standard)
"Palette.Window": "#282a36",
"Palette.WindowText": "#f8f8f2",
"Palette.Base": "#1e1f29",
"Palette.AlternateBase": "#282a36",
"Palette.Text": "#f8f8f2",
"Palette.Button": "#44475a",
"Palette.ButtonText": "#f8f8f2",
"Palette.BrightText": "#ffffff",
"Palette.Highlight": "#bd93f9",
"Palette.HighlightedText": "#ffffff",
"Palette.Link": "#8be9fd",
"Palette.Light": "#6272a4",
"Palette.Midlight": "#44475a",
"Palette.Mid": "#383a59",
"Palette.Dark": "#191a21",
// Log colors
"Log.TimeStamp": "#6272a4",
"Log.Normal": "#f8f8f2",
"Log.Info": "#8be9fd",
"Log.Warning": "#ffb86c",
"Log.Critical": "#ff5555",
"Log.BannedPeer": "#ff79c6",
// Transfer list state colors
"TransferList.Downloading": "#50fa7b",
"TransferList.StalledDownloading": "#f1fa8c",
"TransferList.Uploading": "#bd93f9",
"TransferList.StalledUploading": "#ffb86c",
"TransferList.PausedDownloading": "#ff6e6e",
"TransferList.PausedUploading": "#ff79c6",
"TransferList.Error": "#ff5555",
"TransferList.MissingFiles": "#ff5555"
}
}Override default icons by including files matching qBittorrent's icon names in your theme:
icons/
โโโ application-exit.svg
โโโ edit-clear.svg
โโโ folder-new.svg
โโโ ...
Reference in QSS as: url(:/uitheme/icons/your_icon.svg)
- Reads color tokens from
themes/<name>.json - Substitutes placeholders in
stylesheet.qss.templateandconfig.json.template - Compiles with Qt's
rcctool โqt/<name>.qbtheme
- qBittorrent v4.6.0+ (Qt6) โ Fully supported
- qBittorrent v4.3.0โ4.5.x (Qt5) โ Compatible with
config.jsoncolors - qBittorrent v4.2.2โ4.2.5 โ QSS only (no
config.json)
Official Documentation: Create custom themes for qBittorrent
qBittorrent's WebUI (since v4.1.0) supports alternate WebUI implementations through external file directories. The architecture separates:
public/โ Login/authentication pagesprivate/โ Main WebUI functionality (requires authentication)
This separation enhances security and allows customization without modifying qBittorrent itself.
An alternate WebUI must replicate qBittorrent's stock WebUI structure:
webui-mytheme/
โโโ public/
โ โโโ index.html # Login page
โ โโโ login.html
โ โโโ images/ # Icons for login
โโโ private/
โ โโโ index.html # Main WebUI
โ โโโ css/
โ โ โโโ style.css
โ โ โโโ theme.css # Our theme override
โ โโโ scripts/
โ โโโ images/
โโโ translations/
โโโ webui.qrc
Instead of creating a full alternate WebUI, we extend the stock WebUI with a theme.css overlay:
- Copy the stock WebUI structure from
template/webui/ - Add
private/css/theme.css.templatewith CSS variables::root { --bg-primary: %BG_PRIMARY%; --fg-primary: %FG_PRIMARY%; --accent: %ACCENT%; --status-downloading: %STATUS_DOWNLOADING%; /* ... */ } /* Override stock styles */ body { background: var(--bg-primary); color: var(--fg-primary); } .toolbar { background: var(--bg-secondary); }
- Load
theme.csslast inindex.htmlto ensure overrides take precedence - Render tokens from
themes/<name>.jsonand pack as.tar.gz/.zip
Users extract the archive and configure qBittorrent:
- Tools โ Options โ Web UI
- Enable "Use alternative Web UI"
- Set "Files location" to the extracted directory
- Save and reload
Note: qbittorrent-nox requires regular files (no symlinks) due to security restrictions.
- Colors: Edit
theme.css.templateCSS variables - Icons: Replace files in
public/images/andprivate/images/ - Layout: Modify HTML/CSS in
private/(advanced)
Our gen.sh script:
- Copies
template/webui/to temp directory - Renders
theme.cssfromtheme.css.templateusing JSON color tokens - Creates archives:
webui/webui-<name>.tar.gz(and.zip)
Official Documentation: Developing alternate WebUIs
-
Create a theme definition:
cp themes/dracula.json themes/mytheme.json
-
Edit color tokens in
themes/mytheme.json:{ "name": "My Theme", "author": "Your Name", "description": "A beautiful custom theme", "colors": { "BG_PRIMARY": "#1e1e2e", "FG_PRIMARY": "#cdd6f4", "ACCENT": "#89b4fa", ... } }Required tokens: See existing themes for the full list of color keys.
-
Build the theme:
./gen.sh themes/mytheme.json
-
Output artifacts:
qt/mytheme.qbthemewebui/mytheme.tar.gzwebui/mytheme.zip(ifzipis installed)
- qBittorrent v4.6.0+ (Qt6) โ Fully tested and supported
- qBittorrent < v4.6.0 (Qt5) โ Generally compatible, minor rendering differences may occur
- WebUI โ Works with all qBittorrent versions supporting alternative WebUI
Contributions are welcome! To add a new theme:
- Fork this repository
- Create a new theme JSON in
themes/ - Test locally with
./gen.sh - Submit a pull request
For bug reports or feature requests, please open an issue.
MIT License โ see LICENSE for details.
Theme generator and templates by Mahdi Mirzadeh. Built for the qBittorrent project.












