Skip to content

Tokens

Tokens are the semantic layer between raw palette colors and composed styles. They give meaning to colors: accent.primary means "the main accent color" regardless of whether it's purple, blue, or green.

Token Namespaces

Opaline's core token contract defines 26 tokens across 6 namespaces:

Text

TokenPurpose
text.primaryMain body text
text.secondaryLess prominent text
text.mutedDe-emphasized text
text.dimVery subtle text

Background

TokenPurpose
bg.baseMain background
bg.panelPanel/sidebar background
bg.codeCode block background
bg.highlightHighlighted line background
bg.selectionSelection background

Accent

TokenPurpose
accent.primaryMain accent (keywords, active states)
accent.secondarySecondary accent (functions, links)
accent.tertiaryThird accent (types, special elements)
accent.deepDeep/saturated accent for emphasis

Status

TokenPurpose
successSuccess states
errorError states
warningWarning states
infoInformational states

Border

TokenPurpose
border.focusedFocused panel border
border.unfocusedUnfocused panel border

Code

TokenPurpose
code.keywordLanguage keywords
code.functionFunction names
code.stringString literals
code.numberNumeric literals
code.commentComments
code.typeType names
code.line_numberLine numbers

Accessing Tokens

rust
let theme = opaline::Theme::default();

// Get a resolved color (falls back to magenta if missing)
let color = theme.color("accent.primary");

// Strict lookup: None if missing
let color = theme.try_color("accent.primary");

// Check existence
if theme.has_token("accent.primary") {
    // ...
}

// List all token names
let names = theme.token_names();

Name Constants

Use the names module for autocomplete-friendly constants instead of raw strings:

rust
use opaline::names::{tokens, styles, gradients};

let accent = theme.color(tokens::ACCENT_PRIMARY);
let bg = theme.color(tokens::BG_BASE);
let kw = theme.style(styles::KEYWORD);
let has_aurora = theme.has_gradient(gradients::AURORA);

All 26 required tokens, 13 required styles, and 5 required gradients have corresponding constants.

App-Specific Tokens

Git status colors, diff colors, mode indicators, file path/hash colors, and similar domain-specific semantics are intentionally not part of Opaline's core contract. Consumer apps should derive those from the generic token set with register_default_token() / register_default_style().

Token Resolution

Tokens resolve through the palette. A token value is a palette key:

toml
[palette]
electric_purple = "#e135ff"

[tokens]
"accent.primary" = "electric_purple"  # → OpalineColor(225, 53, 255)

Tokens can also reference other tokens (transitive resolution):

toml
[tokens]
"accent.primary" = "electric_purple"
"code.keyword" = "accent.primary"     # → also resolves to #e135ff

The resolver detects circular references and reports them as errors.

Released under the MIT License.