SilkCircuit v2.0.0
Released: 2026-09-02
SilkCircuit stopped being a Neovim colorscheme with a few extras attached. It is now one palette, five variants, and thirty-one generated target formats that cannot drift, because every file under extras/ is rendered from lua/silkcircuit/variants.lua and CI fails if the checked-in output disagrees. Neon, vibrant, soft, and glow got a contrast retune, dawn arrives as the first light variant, and there is a documentation site plus a universal installer for Unix and Windows.
Breaking changes
Read this section before you upgrade. Each line has its migration.
- The repo and plugin are now
hyperb1iss/silkcircuit, notsilkcircuit-nvim. Change the plugin spec string in your lazy.nvim, packer, or vim-plug config. - Neovim 0.10 is the floor, up from 0.8. Upgrade Neovim, then run
:checkhealth silkcircuit. - The compiled cache is gone.
:SilkCircuitCompileno longer exists andrequire("silkcircuit").compile()is a warning stub. Delete the call; load is fast without it. - Extras moved into per-tool directories with per-variant filenames.
extras/kitty.conf,extras/alacritty.yml,extras/gitconfig,extras/fzf.sh,extras/warp.yaml,extras/windows-terminal.json, andextras/slack-theme.txtare deleted. Repoint your include or source line atextras/<tool>/silkcircuit-<variant>.<ext>, or rerun./install.sh. - btop themes use dashes now.
silkcircuit_neon.themebecamesilkcircuit-neon.theme. Reselect the theme in btop under Options, Color theme. - VS Code themes moved to
extras/vscode/themes/. Reinstall the extension; nothing changes if you use the Marketplace build. - The Chrome theme is five themes. The single root manifest is replaced by
extras/chrome-theme/silkcircuit-<variant>/. Load unpacked from the variant directory you want. - The palette was retuned for contrast. Dawn, vibrant coral, glow's purple and bright cyan, neon's bright green, and the terminal reds all moved. If you hardcoded hex values anywhere, re-read them from
palette/silkcircuit-<variant>.json. - Integrations are no longer gated on plugin detection. Every integration's highlights load up front and detection only feeds
:SilkCircuitIntegrationsand health output. Turn one off withintegrations.<name> = false.
๐ฎ Highlights
One palette, every tool
lua/silkcircuit/extra/init.lua holds a registry of thirty-one target formats, rendered by make build and matching the count in docs/extras/index.md. Most targets render once per variant across neon, vibrant, soft, glow, and dawn. Two of them, windows-terminal-all and zellij-all, are marked is_full and render a single combined file carrying every scheme.
The registry covers Alacritty, Atuin, bat, btop, COSMIC Desktop, GNU dircolors, dmesg, fastfetch, foot, fzf, fzf (PowerShell), Ghostty, Ghostty GTK chrome, Git, Helix, iTerm2, k9s, Kitty, lazygit, lsd, procs, Slack, Starship, tmux, VS Code, Warp, WezTerm, Windows Terminal, Windows Terminal (every scheme), Zellij, and Zellij (every theme). Adding a target is one registry entry plus one module that returns a string.
๐ Dawn, the light variant
Dawn is the fifth variant and the first light one. It went through its own readability pass: hovers and the sidebar title clear 4.5:1, the roles that washed out got retuned, and the Chrome generator stopped hardcoding dawn colors that no longer exist. Neon, vibrant, soft, and glow stay dark.
โก Contrast you can check
Line numbers clear WCAG AA on every variant, the terminal contract carries true reds, glow gets a purple distinct from its cyan, and neon's bright green separates from its normal green. tests/spec/contrast_spec.lua gates the ratios, snapshot specs pin the highlight output for all five variants, and :checkhealth silkcircuit reports what it measured instead of asserting compliance.
๐ Ten new Neovim integrations
blink.cmp, fzf-lua, oil, trouble, grug-far, neotest, lazy, dropbar, fidget, and treesitter-context are themed. which-key moved to the v3 API, snacks coverage expanded across pickers, notifier, indent, status column, and zen mode, and the statusline is driven by one palette-aware theme in lua/lualine/themes/silkcircuit.lua that clears its cache on colorscheme change.
๐ฆ An installer that respects your dotfiles
install.sh and install.ps1 detect what you have, write each theme where its tool looks for it, and print the line that turns it on. Anything replaced is copied to *.silkcircuit.bak first. Neither installer adds an untracked file to a git repo it does not own, and the k9s path merges the skin into your existing config rather than appending a second mapping.
๐ Neovim
- Highlights are applied through
nvim_set_hl, with attributes passed through and explicit style overrides honored. - New surface roles separate float, cursorline, and statusline backgrounds, plus
bg_darker,divider,accent_border,accent_hover, andaccent_warm. The theme adopts them, so popups no longer share the cursorline's background and window separators stop fighting the editor background. - Core groups modern Neovim exposes are defined, including the matched-text Pmenu groups.
- Functions and keyword subtypes are plain by default and follow
styles.keywordsandstyles.functions. - Saved preferences apply before the theme loads, and an explicit
setup()option always wins, so there is no flash to the default variant. - Glow repaints on variant switch, and cmp no longer clobbers
PmenuSel. - Unresolved LSP references link to
DiagnosticError, a group that exists. config.get()stops handing out the live defaults table.- A self-contained headless runner (
scripts/test,tests/minimal_init.lua,tests/run.lua) sandboxes every XDG directory, refuses to run outside the sandbox, and covers palettes, highlights, config, preferences, commands, contrast, plugin isolation, and snapshots.
โก Terminals and multiplexers
- Kitty, Alacritty, Ghostty, WezTerm, Warp, foot, iTerm2, and Windows Terminal are all generated per variant from the same ANSI contract, documented in one table on the terminal guide.
- Ghostty ships both the theme and GTK chrome CSS, with the pure whites replaced by purple-tinted tones.
- Windows Terminal also gets
extras/windows-terminal/silkcircuit.jsonwith every scheme in one file; Zellij gets the same treatment inextras/zellij/silkcircuit.kdl. - foot themes carry both color sections, tmux states its real version floor with correct dim pairs, and Zellij's emphasis colors are readable.
palette/exports each variant as JSON with hex, RGB, HSL, and the sixteen ANSI slots, plus base16 and base24 schemes for tinted-theming builders such as tinty and stylix.
๐ช CLI and shell
- Generated from the palette: bat, lsd, procs, Starship, fastfetch, GNU dircolors, fzf (shell and PowerShell), Git color plus delta, lazygit, Atuin, btop, k9s, and dmesg.
- Starship reflects command status in the prompt, drops the docker context segment, and skips submodule scanning in
git_statusfor faster prompts in large repos. - Git log styling distinguishes subjects from bodies.
- k9s clears WCAG AA on the table header, btop keeps its gradient stops distinct in every variant, bat gets a gutter, and the fastfetch icons are back.
- The x256 quantizer takes decoded channels, so 256-color fallbacks land on the intended shade.
๐ Editors, browsers, and apps
- VS Code: five themes in one extension, now rendered from the palette roles instead of a hand-maintained JSON per variant. Screenshots no longer ship inside the vsix.
- Helix: syntax, markup, diffs, diagnostics, and interface, with the deprecated modifier dropped.
- Chrome 2.0: all five variants with full API coverage, DevTools CSS, deterministic new-tab backgrounds, reworked tab and toolbar contrast, and Web Store assets.
make chromereads the exported palette JSON rather than a mirrored dictionary;make chrome-packagezips the set. - Slack: a generated theme string per variant, with the registry pointing at a help article that exists.
- COSMIC Desktop: ron themes per variant, with frosted surfaces kept on for glow.
- AstroNvim: theming centralized into
lua/silkcircuit/contrib/astronvim.lua, bundled plugin specs repaired for current Neovim, and two statusline bugs fixed in the lualine extra.
๐ Toolchain and docs
- A VitePress site at hyperb1iss.github.io/silkcircuit with guide, variants, design, extras, and reference sections, one page per generated target, and a per-target file table written by
make docs. mise.tomlpins the toolchain (selene, stylua, ruff, prettier, uv, Node, pre-commit) so localmake checkand CI agree. Pre-commit hooks run through the same pins.- Make targets:
setup,check,lint,fmt,test,build,docs,shots,chrome,chrome-package,vscode-package,preview. - CI regenerates every extra and doc table, then fails if the working tree moves, so a hand-edited generated file or an unrebuilt palette cannot land.
- Releases run on release-please with VS Code Marketplace and Open VSX publishing, Chrome zips attached to the release, and release notes styled by git-iris.
make shotsscripts the screenshot pipeline; every asset was recaptured on the retuned palette.
Install and upgrade
Neovim, with lazy.nvim:
{
"hyperb1iss/silkcircuit",
lazy = false,
priority = 1000,
config = function()
require("silkcircuit").setup({})
vim.cmd.colorscheme("silkcircuit")
end,
}Everything else, from a clone:
git clone https://github.com/hyperb1iss/silkcircuit.git
cd silkcircuit
./install.sh --dry-run # see what it would touch
./install.sh # all five variants, side by side
./install.sh --variant dawn.\install.ps1 -Variant glowUpgrading from 1.x: bump Neovim to 0.10 or newer, rename the plugin spec to hyperb1iss/silkcircuit, drop any :SilkCircuitCompile call, then rerun the installer to replace the old flat extras/ files. Verify with :checkhealth silkcircuit and :SilkCircuitContrast. Full docs live at hyperb1iss.github.io/silkcircuit.