Terminal Colors Architecture

Your theme.
Every terminal. Every CLI. Every TUI.

TCA is a structured, portable format for terminal and CLI/TUI color themes. Define your theme once as a base24 YAML file then use it everywhere.

cargo install tca-cli

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.