Built for Developers, Theme Authors, and Users
TCA makes color themes easier for everyone involved.
Application Developers
One line of code, zero configuration. Your app immediately supports built-in themes and any theme your users install. No config parsers to write, no theme files to ship, no hardcoded colors. Use semantic names like error, fg_primary, and border_primary. They stay stable across every theme.
Theme Authors
Write one base24 YAML file and reach every TCA-powered app across Rust, Python, and Go. Built-in validation catches contrast issues and file issues before you ship.
Theme Users
Drop any base24 YAML file into ~/.local/share/tca/themes/ and every TCA-powered app on your system can use it with no per-app configuration needed. Or download them all with a single command. Set your preferred theme once, not every time.
Libraries & Tools
TCA themes work across languages and frameworks. Pick the library for your stack.
tca-themes
Canonical theme specification.
tca-rust
Core Rust crates: CLI tool, type definitions, theme loader, and Ratatui widgets.
tca-go
Go library with Lipgloss integration for colorful terminal applications.
tca-python
Python library with Textual integration for colorful terminal applications.
Get Going Fast
Add a theme, set your default, and integrate into your app in minutes.
CLI
# Install $ cargo install tca-cli # Add a theme and set it as default $ tca add "Tokyo Night" $ tca config set default "Tokyo Night" # Add all the themes $ tca add --all # List available themes $ tca list # Validate a theme file $ tca validate nord-dark.yaml
Rust
// Cargo.toml: tca-ratatui = "0.3" // Loads user preference, falls back to built-in let theme = TcaTheme::default(); // Load a theme by name, falls back to built-in let theme = TcaTheme::new(Some("tokyo night"); // Get a cursor to move through all installed themes. let cursor = TcaThemeCursor::with_all_themes(); // Semantic names โ stable across all themes let style = Style::default() .fg(theme.ui.fg_primary) .bg(theme.ui.bg_primary); let error = Style::default().fg(theme.semantic.error); let border = Style::default().fg(theme.ui.border_primary);
Go / Python
// Go + Lipgloss theme := tca.NewTheme(nil) style := lipgloss.NewStyle(). Foreground(theme.UI.FgPrimary). Background(theme.UI.BgPrimary) # Python + Textual theme = TcaTheme() error_color = theme.semantic.error
Draft โ Public Input Welcome
TCA is a draft specification under active development. Core features are working: language libraries, theme validation, and import/export. I am seeking feedback before finalising the v1.0 specification.