turbo-themes
Universal design tokens and theme management for Python applications.
Features
- 9 curated themes from Catppuccin (4 variants), Dracula, GitHub (light/dark), and Bulma (light/dark)
- Design tokens as typed Python dataclasses
- CSS variable generation for web integration
- Type-safe with full type hints and mypy strict mode
- Lightweight: single runtime dependency (python-dateutil)
Installation
pip install turbo-themes
# or
uv add turbo-themes
Quick Start
Access Theme Colors
from turbo_themes import THEMES
# Get a specific theme
mocha = THEMES["catppuccin-mocha"]
print(mocha.colors.primary) # "#89b4fa"
print(mocha.colors.background) # "#1e1e2e"
print(mocha.meta.name) # "Catppuccin Mocha"
print(mocha.meta.variant) # "dark"
Theme Manager
from turbo_themes import ThemeManager
manager = ThemeManager()
# Set and apply a theme
manager.set_theme("catppuccin-mocha")
css_vars = manager.apply_theme_to_css_variables()
# Generate CSS custom properties
for var_name, value in css_vars.items():
print(f"--{var_name}: {value};")
List Available Themes
from turbo_themes import THEMES, list_themes
# Get all theme names
themes = list_themes()
print(themes)
# ['bulma-dark', 'bulma-light', 'catppuccin-frappe', 'catppuccin-latte',
# 'catppuccin-macchiato', 'catppuccin-mocha', 'dracula', 'github-dark', 'github-light']
# Filter by variant
dark_themes = [name for name, theme in THEMES.items() if theme.meta.variant == "dark"]
Available Themes
| Theme | Variant | Source |
|---|---|---|
catppuccin-mocha |
dark | catppuccin.com |
catppuccin-macchiato |
dark | catppuccin.com |
catppuccin-frappe |
dark | catppuccin.com |
catppuccin-latte |
light | catppuccin.com |
dracula |
dark | draculatheme.com |
github-dark |
dark | primer.style |
github-light |
light | primer.style |
bulma-dark |
dark | bulma.io |
bulma-light |
light | bulma.io |
Theme Structure
Each theme provides:
theme.colors.primary # Primary accent color
theme.colors.secondary # Secondary accent color
theme.colors.background # Background color
theme.colors.surface # Surface/card color
theme.colors.text # Primary text color
theme.colors.text_muted # Muted/secondary text
theme.colors.border # Border color
theme.colors.error # Error state color
theme.colors.warning # Warning state color
theme.colors.success # Success state color
theme.colors.info # Info state color
theme.meta.name # Display name
theme.meta.variant # "light" or "dark"
theme.meta.source # Source project URL
Integration Examples
Flask/Jinja2
from flask import Flask, render_template
from turbo_themes import ThemeManager
app = Flask(__name__)
manager = ThemeManager()
@app.route("/")
def index():
manager.set_theme("catppuccin-mocha")
css_vars = manager.apply_theme_to_css_variables()
return render_template("index.html", theme_vars=css_vars)
Django
from turbo_themes import THEMES
def get_theme_context(theme_name: str) -> dict:
theme = THEMES.get(theme_name, THEMES["catppuccin-mocha"])
return {
"primary_color": theme.colors.primary,
"background_color": theme.colors.background,
"text_color": theme.colors.text,
}
Multi-Platform
This package is part of the turbo-themes ecosystem:
- npm:
@lgtm-hq/turbo-themes- TypeScript/JavaScript - PyPI:
turbo-themes- Python (this package) - RubyGems:
turbo-themes- Ruby/Jekyll - Swift: Via Swift Package Manager
All packages share the same design tokens and color values.
Links
License
MIT
Metadata
Release files for turbo-themes 0.44.81
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| turbo_themes-0.44.81.tar.gz | 79.8 kB | Without provenance | Details for turbo_themes-0.44.81.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| turbo_themes-0.44.81-py3-none-any.whl | Python 3 | none | any | Details for turbo_themes-0.44.81-py3-none-any.whl |
Total release size: 111.5 kB
Release files / turbo_themes-0.44.81.tar.gz
| Download URL | turbo_themes-0.44.81.tar.gz |
|---|---|
| Size | 79.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
61440a29729db334981f685f9d77f2807d4b22db6198ebf282793f3f9bbc5324
|
|
BLAKE2b-256 checksum How to use checksums |
04da7874bf22ffb7f53b2d54232fe66163081f0c6771f07603feb1b1680bf18f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / turbo_themes-0.44.81-py3-none-any.whl
| Download URL | turbo_themes-0.44.81-py3-none-any.whl |
|---|---|
| Size | 31.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
334aee30526af383fb76e2570dd1537a24cd70cc8dffa29c2ada13ffddbadadb
|
|
BLAKE2b-256 checksum How to use checksums |
f606fb12a104ba33e7723c58bd6146b1f2b567b6f4f91d305a17eb6bc0562b3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for turbo-themes 0.44.81
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.