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)lreleaseβ Qt Linguist compiler for WebUI.qmtranslationszipβ (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 - Compiles WebUI translations (
.tsβ.qm) and 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.












