Calm slate. Living color.
Living Code for OpenCode TUI: complete native JSON palettes for UI, Markdown, syntax highlighting, selections and review diffs.
|
Night Dark · full palette
|
Frost Dark · softer chroma
|
|
Paper Light · near-white slate
|
Signal Dark · teal accent
|
Select any preview to view the image at full size.
flavor=night # night, frost, paper, or signal
curl -fsSL --create-dirs -o "${XDG_CONFIG_HOME:-$HOME/.config}/opencode/themes/living-code-$flavor.json" "https://raw.githubusercontent.com/living-code-theme/opencode/main/themes/living-code-$flavor.json"Restart OpenCode, run /themes (also available through /theme completion), and select living-code-night or your downloaded flavor. For a project-only install, use .opencode/themes/ as the output directory instead.
Expand a flavor for its full-size preview and activation instructions.
Night · Dark · full palette
Choose living-code-night with /theme, or set "theme": "living-code-night" in your existing tui.json.
Frost · Dark · softer chroma
Choose living-code-frost with /theme, or set "theme": "living-code-frost" in your existing tui.json.
Paper · Light · near-white slate
Choose living-code-paper with /theme, or set "theme": "living-code-paper" in your existing tui.json.
Signal · Dark · teal accent
Choose living-code-signal with /theme, or set "theme": "living-code-signal" in your existing tui.json.
The files use the OpenCode v1 { "theme": { … } } JSON format. They provide every required color, explicit selected-item text and menu backgrounds. Every flavor is a separate theme, so Paper stays light even in a dark terminal. Put configuration in tui.json, not in the theme file; preserve any existing keybindings.
All nine exposed syntax* colors follow the matching Living Code Neovim roles in every flavor. Tests compare native theme files against a pinned Neovim reference, not just UI accents. Token recognition and finer-grained mappings remain OpenCode’s responsibility. In OpenCode 1.19.0, getSyntaxRules also hardwires builtin scopes to the UI error color, constant identifiers to syntaxNumber, and parameters to syntaxVariable. Those couplings cannot all match Neovim’s distinct builtin, variable and parameter roles through the native nine-token API. This port verifies the exposed roles, not exact per-token parity that the application cannot express.
Targets the TUI theme format verified against OpenCode 1.19.0. This is not the web/desktop theme format. Truecolor gives the intended colors; reduced-color terminals approximate them. OpenCode 2 theme documents are a different API and are not claimed here. Syntax, Markdown and diff color contracts are checked independently of generation.
Previews are captured programmatically from the actual application in an isolated profile. See capture/app.py for the app-owned recipe and images/capture.json for runtime, palette and image provenance. No mock interface is drawn. The conversation is a labeled, repository-owned local demo, not a private session or a live model response. Recapturing needs no account, subscription or paid API call.
Found a problem? Open an issue with the app version, the flavor and a screenshot. Want Living Code somewhere else? Request a port.
Pull requests are welcome. Keep this README, port.json and images/ in sync, and use real screenshots of the app, never mockups.
🦎 One chameleon, many habitats. Part of Living Code.



