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 token contract defines 40+ tokens across 10 namespaces:

Text

TokenPurpose
text.primaryMain body text
text.secondaryLess prominent text
text.mutedDe-emphasized text
text.dimVery subtle text (line numbers, metadata)

Background

TokenPurpose
bg.baseMain background
bg.panelPanel/sidebar background
bg.codeCode block background
bg.highlightHighlighted line 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

Git

TokenPurpose
git.stagedStaged changes
git.modifiedModified files
git.untrackedUntracked files
git.deletedDeleted files

Diff

TokenPurpose
diff.addedAdded lines
diff.removedRemoved lines
diff.hunkHunk headers
diff.contextContext lines

Border

TokenPurpose
border.focusedFocused panel border
border.unfocusedUnfocused panel border

Code

TokenPurpose
code.hashCommit hashes, hex values
code.pathFile paths
code.keywordLanguage keywords
code.functionFunction names
code.stringString literals
code.numberNumeric literals
code.commentComments
code.typeType names
code.line_numberLine numbers

Mode

TokenPurpose
mode.activeActive mode indicator
mode.inactiveInactive mode indicator
mode.hoverHovered mode indicator

Chat

TokenPurpose
chat.userUser messages
chat.irisAI/assistant messages

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 38 required tokens, 18 required styles, and 5 required gradients have corresponding constants.

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.