Metadata-Version: 2.4
Name: textual-themes
Version: 0.15.2
Summary: 41 retro color themes for Textual TUI apps - vintage 8-bit, terminal, watch, comic-pulp, 80s-pastel, Spielberg-era cinema, reggae and mafia-noir palettes
Author: Michael Blaess
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/michaelblaess/textual-themes
Project-URL: Repository, https://github.com/michaelblaess/textual-themes
Project-URL: Issues, https://github.com/michaelblaess/textual-themes/issues
Keywords: textual,tui,themes,retro,terminal
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Terminals
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: textual
Requires-Dist: textual>=0.85; extra == "textual"
Provides-Extra: demo
Requires-Dist: textual-themes[textual]; extra == "demo"
Requires-Dist: textual-widgets>=0.32.1; extra == "demo"
Provides-Extra: dev
Requires-Dist: textual-themes[demo]; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: pytest-xdist>=3.5; extra == "dev"
Requires-Dist: mypy>=1.8; extra == "dev"
Requires-Dist: poethepoet>=0.29; extra == "dev"
Requires-Dist: ruff>=0.3; extra == "dev"
Dynamic: license-file

# textual-themes

<p align="center">
  <img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/flags/gb.svg" height="13" alt=""> <b>English</b> ·
  <img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/flags/de.svg" height="13" alt=""> <a href="https://github.com/michaelblaess/textual-themes/blob/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/README.de.md">Deutsch</a>
</p>

---

<p align="center">
  <img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/banner.jpg" alt="textual-themes - the four-tile logo with terminal windows in different color schemes" width="100%">
</p>

[![Stars](https://img.shields.io/github/stars/michaelblaess/textual-themes?logo=github&logoColor=white&color=fbbf24)](https://github.com/michaelblaess/textual-themes/stargazers)
[![Forks](https://img.shields.io/github/forks/michaelblaess/textual-themes?logo=github&logoColor=white&color=34d399)](https://github.com/michaelblaess/textual-themes/network/members)
[![Issues](https://img.shields.io/github/issues/michaelblaess/textual-themes?logo=github&logoColor=white&color=f87171)](https://github.com/michaelblaess/textual-themes/issues)
[![Pull Requests](https://img.shields.io/github/issues-pr/michaelblaess/textual-themes?logo=github&logoColor=white&color=a78bfa)](https://github.com/michaelblaess/textual-themes/pulls)

[![Last Commit](https://img.shields.io/github/last-commit/michaelblaess/textual-themes?logo=git&logoColor=white&color=3b82f6)](https://github.com/michaelblaess/textual-themes/commits/main)
[![License](https://img.shields.io/badge/license-Apache_2.0-3b82f6)](https://github.com/michaelblaess/textual-themes/blob/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/LICENSE)
[![Python](https://img.shields.io/badge/python-3.12+-3b82f6?logo=python&logoColor=white)](https://www.python.org/)
[![Themes](https://img.shields.io/badge/themes-41-fbbf24)](#gallery)

Retro color themes for [Textual](https://textual.textualize.io/) TUI applications.

41 carefully crafted themes inspired by classic computers, operating systems, vintage diver watches, comic-book color schemes, 80s pastel, Spielberg-era cinema, motorsport liveries, reggae roots and mafia-noir cinema.

> **⚠ Trademark Disclaimer**
>
> This is an **independent, fan-made, non-commercial** project. Theme names
> are descriptive of the visual style only — no third-party trademarks are
> used as theme names. Any remaining brand reference in descriptive text
> (e.g. "PETSCII style", "GEM Desktop", "Cinnamon-style") is purely
> descriptive and not affiliated with, endorsed by, sponsored by, or
> licensed by the respective trademark owners.

## Gallery

Click any thumbnail to open the full-size SVG. Screenshots are taken from
the bundled demo app (`python -m textual_themes`).

<table>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/ascot.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/ascot.svg" width="240" alt="Ascot"></a><br><sub><b>Ascot</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/beastie.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/beastie.svg" width="240" alt="Beastie"></a><br><sub><b>Beastie</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/bebox.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/bebox.svg" width="240" alt="BeBox"></a><br><sub><b>BeBox</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/bluesy.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/bluesy.svg" width="240" alt="Bluesy"></a><br><sub><b>Bluesy</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/boing.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/boing.svg" width="240" alt="Boing"></a><br><sub><b>Boing</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/brick.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/brick.svg" width="240" alt="Brick"></a><br><sub><b>Brick</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/brotkasten.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/brotkasten.svg" width="240" alt="Brotkasten"></a><br><sub><b>Brotkasten</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/bunty.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/bunty.svg" width="240" alt="Bunty"></a><br><sub><b>Bunty</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/christophorus.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/christophorus.svg" width="240" alt="Christophorus"></a><br><sub><b>Christophorus</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/classic-navy.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/classic-navy.svg" width="240" alt="Classic Navy"></a><br><sub><b>Classic Navy</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/classic-terminal.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/classic-terminal.svg" width="240" alt="Classic Terminal"></a><br><sub><b>Classic Terminal</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/clipper.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/clipper.svg" width="240" alt="Clipper"></a><br><sub><b>Clipper</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/commandr.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/commandr.svg" width="240" alt="Commandr"></a><br><sub><b>Commandr</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/corleone.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/corleone.svg" width="240" alt="Corleone"></a><br><sub><b>Corleone</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/crimson.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/crimson.svg" width="240" alt="Crimson"></a><br><sub><b>Crimson</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/cupertino.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/cupertino.svg" width="240" alt="Cupertino"></a><br><sub><b>Cupertino</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/fifty-eight.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/fifty-eight.svg" width="240" alt="Fifty-Eight"></a><br><sub><b>Fifty-Eight</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/flughund.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/flughund.svg" width="240" alt="Flughund"></a><br><sub><b>Flughund</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/geeko.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/geeko.svg" width="240" alt="Geeko"></a><br><sub><b>Geeko</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/gemstone.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/gemstone.svg" width="240" alt="Gemstone"></a><br><sub><b>Gemstone</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/golden-brown.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/golden-brown.svg" width="240" alt="Golden Brown"></a><br><sub><b>Golden Brown</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/goldfinder.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/goldfinder.svg" width="240" alt="Goldfinder"></a><br><sub><b>Goldfinder</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/goldrunner.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/goldrunner.svg" width="240" alt="Goldrunner"></a><br><sub><b>Goldrunner</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/hercules.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/hercules.svg" width="240" alt="Hercules"></a><br><sub><b>Hercules</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/hulkula.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/hulkula.svg" width="240" alt="Hulkula"></a><br><sub><b>Hulkula</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/joker.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/joker.svg" width="240" alt="Joker"></a><br><sub><b>Joker</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/lenseflare.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/lenseflare.svg" width="240" alt="Lenseflare"></a><br><sub><b>Lenseflare</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/luna.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/luna.svg" width="240" alt="Luna"></a><br><sub><b>Luna</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/marley.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/marley.svg" width="240" alt="Marley"></a><br><sub><b>Marley</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/metropolis.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/metropolis.svg" width="240" alt="Metropolis"></a><br><sub><b>Metropolis</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/miami.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/miami.svg" width="240" alt="Miami"></a><br><sub><b>Miami</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/minty.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/minty.svg" width="240" alt="Minty"></a><br><sub><b>Minty</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/motif.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/motif.svg" width="240" alt="Motif"></a><br><sub><b>Motif</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/next.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/next.svg" width="240" alt="Next"></a><br><sub><b>Next</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/plan9.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/plan9.svg" width="240" alt="Plan 9"></a><br><sub><b>Plan 9</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/platoon.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/platoon.svg" width="240" alt="Platoon"></a><br><sub><b>Platoon</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/racing.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/racing.svg" width="240" alt="Racing"></a><br><sub><b>Racing</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/razzy.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/razzy.svg" width="240" alt="Razzy"></a><br><sub><b>Razzy</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/spiderized.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/spiderized.svg" width="240" alt="Spiderized"></a><br><sub><b>Spiderized</b></sub></td>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/synthwave.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/synthwave.svg" width="240" alt="Synthwave"></a><br><sub><b>Synthwave</b></sub></td>
</tr>
<tr>
<td align="center"><a href="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/warp.svg"><img src="https://raw.githubusercontent.com/michaelblaess/textual-themes/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/docs/screenshots/warp.svg" width="240" alt="Warp"></a><br><sub><b>Warp</b></sub></td>
</tr>
</table>

## Themes

### Dark Themes

| Theme | Style |
|-------|-------|
| **Ascot** | Le-Mans racing green with signal yellow, silver and beige text |
| **Beastie** | Daemon red on dark slate |
| **BeBox** | Blue-gray with yellow status-bar accent |
| **Bluesy** | Royal blue with rich yellow-gold accents |
| **Boing** | Three-color workbench palette: blue/white/orange |
| **Brotkasten** | Light blue on royal blue, the iconic 8-bit color cast (PETSCII) |
| **Bunty** | Aubergine with warm orange accents |
| **Christophorus** | Navy and gold from the Christophorus logo |
| **Classic Navy** | Deep navy with silver and muted brick-red |
| **Classic Terminal** | Phosphor-green on black (CRT) |
| **Commandr** | Blue/cyan/yellow file-manager palette |
| **Corleone** | Cold mafia-noir — bronze, steel-gray and ash on bluish black |
| **Crimson** | Deep red on dark charcoal |
| **Fifty-Eight** | Black dial with aged gold lume + bezel red (vintage diver) |
| **Flughund** | Midnight black & moonlit blue |
| **Geeko** | Dark green with white |
| **Golden Brown** | Warm mafia-noir — antique gold, sepia and parchment on warm black |
| **Goldfinder** | Deep black with 18K gold accents — villain glamour |
| **Goldrunner** | Atari-ST shooter palette: golden ship, magenta city, green tiles on black |
| **Hulkula** | Vivid green rage with steel-gray edges |
| **Joker** | Comic Gotham villain — royal purple suit, acid-green hair, yellow vest |
| **Lenseflare** | 80s Spielberg orange-teal bichromatic on twilight blue |
| **Luna** | Sky-blue task-bar with green start button |
| **Marley** | Reggae roots palette — black, green, gold and red |
| **Metropolis** | Bold blue, crimson red and sun yellow primary triad |
| **Miami** | Pastel 80s — twilight teal, flamingo pink, sunset coral |
| **Minty** | Warm mint-green on charcoal |
| **Motif** | Beige slate-gray corporate Unix toolkit |
| **Next** | Dark gray with magenta accents — workstation-era 3D bevels |
| **Platoon** | Muted military olive-drab with khaki accent on near-black |
| **Racing** | Charcoal with deep blue, cherry red and silver stripes |
| **Razzy** | Raspberry red on dark slate |
| **Spiderized** | Red & royal-blue hero suit (high-contrast) |
| **Synthwave** | Deep purple with neon pink and electric cyan |
| **Warp** | Dark blue with teal accents |

### Light Themes

| Theme | Style |
|-------|-------|
| **Brick** | Olive-green handheld LCD on beige-gray case |
| **Clipper** | Globe blue on ivory — jet-age livery |
| **Cupertino** | Clean light gray with blue accents |
| **Gemstone** | Monochrome GEM Desktop look |
| **Plan 9** | Pulpy yellow/blue/green |

## Installation

Add the themes to your own Textual project:

```bash
pip install "textual-themes[textual]"
```

The `textual` extra is what pulls in Textual itself, and nothing else comes
with it - the themes are plain data.

Leave the extra off and you get that data on its own:

```bash
pip install textual-themes
```

`textual_themes.palettes` then gives you all 41 palettes with no dependency
beyond the standard library. That is the way in for anything that wants the
colours without a TUI framework - a Qt application compiled with Nuitka, a
static site generator, a script. The theme objects in `textual_themes.themes`
still need Textual and say so if it is missing.

The bundled storybook additionally needs `textual-widgets`, which lives in the
`demo` extra, so consumers are never forced into that dependency:

```bash
pip install "textual-themes[demo]"
```

Without installing, with [uv](https://docs.astral.sh/uv/):

```bash
uvx --from "textual-themes[demo]" textual-themes-demo
```

## Storybook

Browse all 41 themes interactively in the bundled storybook. Install it with
a single command — it sets up an isolated environment and adds a
`textual-themes-demo` launcher to your PATH:

**Linux / macOS**

```bash
curl -fsSL https://raw.githubusercontent.com/michaelblaess/textual-themes/main/install.sh | bash
```

**Windows (PowerShell)**

```powershell
irm https://raw.githubusercontent.com/michaelblaess/textual-themes/main/install.ps1 | iex
```

Then launch it:

```bash
textual-themes-demo
```

Requires Python 3.12+ and `git`. To update later, just run the installer
again; to remove it, delete `~/.textual-themes` (Linux/macOS) or
`%LOCALAPPDATA%\textual-themes` (Windows) and the `textual-themes-demo`
launcher.

## Quick Start

```python
from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Static

from textual_themes import register_all

class MyApp(App):
    BINDINGS = [("t", "next_theme", "Theme")]

    def __init__(self):
        super().__init__()
        register_all(self)
        self.theme = "brotkasten"

    def compose(self) -> ComposeResult:
        yield Header()
        yield Static("Hello from the past!")
        yield Footer()

    def action_next_theme(self):
        from textual_themes import RETRO_THEME_NAMES
        names = RETRO_THEME_NAMES
        idx = names.index(self.theme) if self.theme in names else -1
        self.theme = names[(idx + 1) % len(names)]

MyApp().run()
```

## Usage

### Register all themes at once

```python
from textual_themes import register_all

class MyApp(App):
    def __init__(self):
        super().__init__()
        register_all(self)       # registers all 41 themes
        self.theme = "boing"     # pick one
```

### Register individual themes

```python
from textual_themes import BROTKASTEN_THEME, CLASSIC_TERMINAL_THEME

class MyApp(App):
    def __init__(self):
        super().__init__()
        self.register_theme(BROTKASTEN_THEME)
        self.register_theme(CLASSIC_TERMINAL_THEME)
        self.theme = "classic-terminal"
```

### Available constants

```python
from textual_themes import (
    # Individual Theme objects
    BROTKASTEN_THEME,
    BOING_THEME,
    GEMSTONE_THEME,
    CLASSIC_TERMINAL_THEME,
    NEXT_THEME,
    BEBOX_THEME,
    BUNTY_THEME,
    CUPERTINO_THEME,
    LUNA_THEME,
    COMMANDR_THEME,
    PLAN9_THEME,
    MOTIF_THEME,
    WARP_THEME,
    GEEKO_THEME,
    MINTY_THEME,
    CRIMSON_THEME,
    RAZZY_THEME,
    BEASTIE_THEME,
    FIFTY_EIGHT_THEME,
    BLUESY_THEME,
    GOLDFINDER_THEME,
    HULKULA_THEME,
    FLUGHUND_THEME,
    CLASSIC_NAVY_THEME,
    BRICK_THEME,
    CLIPPER_THEME,
    SYNTHWAVE_THEME,
    MIAMI_THEME,
    RACING_THEME,
    METROPOLIS_THEME,
    SPIDERIZED_THEME,

    # Collections
    RETRO_THEMES,          # list[Theme] — all 41 themes
    RETRO_THEME_NAMES,     # list[str]   — ["brotkasten", "boing", ...]
    THEME_DISPLAY_NAMES,   # dict[str, str]

    # Helper
    register_all,          # register_all(app) — registers all themes
)
```

### Theme names

Use these slugs with `app.theme = "..."`:

| Slug | Display |
|------|---------|
| `brotkasten` | Brotkasten — Light Blue on Royal Blue |
| `boing` | Boing — Blue/White/Orange Workbench |
| `gemstone` | Gemstone — Monochrome GEM Desktop |
| `classic-terminal` | Classic Terminal — Phosphor Green on Black |
| `next` | Next — Slate Gray with Magenta Accents |
| `bebox` | BeBox — Blue-Gray with Yellow Accent |
| `bunty` | Bunty — Aubergine with Warm Orange Accents |
| `cupertino` | Cupertino — Clean Light Gray with Blue Accents |
| `luna` | Luna — Sky Blue with Green Start Accent |
| `commandr` | Commandr — Blue/Cyan/Yellow File Manager |
| `plan9` | Plan 9 — Pulpy Yellow/Blue/Green |
| `motif` | Motif — Beige Corporate Unix Toolkit |
| `warp` | Warp — Dark Blue with Teal Accents |
| `geeko` | Geeko — Dark Green with White |
| `minty` | Minty — Warm Mint-Green on Charcoal |
| `crimson` | Crimson — Deep Red on Dark Charcoal |
| `razzy` | Razzy — Raspberry Red on Dark Slate |
| `beastie` | Beastie — Daemon Red on Dark Slate |
| `fifty-eight` | Fifty-Eight — Black Dial, Aged Gold Lume & Bezel Red |
| `bluesy` | Bluesy — Royal Blue & Gold |
| `goldfinder` | Goldfinder — Deep Black with 18K Gold Accents |
| `goldrunner` | Goldrunner — Atari-ST Gold on Violet City |
| `hercules` | Hercules — Amber Phosphor Monochrome |
| `hulkula` | Hulkula — Verdant Green with Steel Edges |
| `flughund` | Flughund — Midnight Black & Moonlit Blue |
| `classic-navy` | Classic Navy |
| `brick` | Brick — Olive-Green Handheld LCD |
| `clipper` | Clipper — Globe Blue on Ivory |
| `synthwave` | Synthwave — 80s Retro-Futurism |
| `miami` | Miami — Twilight Teal, Flamingo Pink & Sunset Coral |
| `racing` | Racing — Charcoal with Blue, Red & Silver Stripes |
| `metropolis` | Metropolis — Bold Blue, Crimson & Sun Yellow |
| `spiderized` | Spiderized — Red & Royal-Blue Hero Suit |
| `christophorus` | Christophorus — Navy & Logo Gold |

## Requirements

- Python >= 3.12
- Textual >= 0.85

## Editing themes

To tweak an existing theme or design a new one interactively, try
[textual-theme-editor](https://github.com/TomJGooding/textual-theme-editor)
by Tom J Gooding — a standalone visual theme editor for Textual. Install it
separately (`pip install textual-theme-editor`); it is GPLv3-licensed and not
a dependency of this package.

## License

Apache License 2.0 — see [LICENSE](https://github.com/michaelblaess/textual-themes/blob/afe54e9b3a1cccf2ff4b7e756272d8c7e602c9a4/LICENSE).
