Releases: CliffWade/hermes-desktop-theme-pack
Release list
v1.3.0: Themes in your web dashboard
Hermes Theme Pack v1.3.0
Themes in your web dashboard, plus a hover-card readability overhaul.
The Theme Switcher now lives in hermes dashboard as a full tab, and every
hover surface on the Desktop Themes page is guaranteed readable.
What's new
- Web dashboard Themes tab: a dashboard plugin bundle (manifest tab +
IIFE) giveshermes dashboarda Themes tab listing every installed skin
with one-click apply, reusing the same backend API as the Desktop page.
Themes group into ☀ Light / ☾ Dark sections with counts and tabs; every
paired theme shows its⇄twin with a flip button; applying a skin also
repaints the web dashboard by writing a dashboard-theme YAML from the
skin's palette and activating it. - Full Desktop toolbar in the tab: search (including palette colors
like "purple" or#7b2d8e), All/Light/Dark tabs with per-polarity counts,
Follow system (auto twin switch on OS scheme change), category filter,
Random, and + Add theme (paste-YAML install with the same validation as
the Desktop page). - Truly responsive theme cards: the dashboard grid uses the same fluid
formula as the Desktop page (repeat(auto-fit, minmax(min(100%, 240px), 1fr))): cards wrap by minimum width at every window size, collapse to a
single column on narrow panels, and fill the last row. Container queries
adapt spacing to the tab's actual panel width, with viewport fallbacks for
small and 4K screens. - Desktop-style compact cards: 4px accent bar, tiny 10px swatches,
whole-card apply, floating swap/copy actions,NEWbadge for freshly
installed themes; layout classes are self-contained with no host Tailwind
dependency. - Hover detail panel: hovering a theme card in the dashboard tab shows
a right-docked panel with the name, description, accent bar, and up to 12
labeled color swatches;docs/preview.htmlships the same behavior so the
static gallery matches the live app. - Readable themed tooltips: every tooltip on the Desktop Themes page
now uses the app's themedTipcomponent (auto-inverting with the theme)
instead of nativetitle=attributes, which rendered as unreadable
white-on-pale text. - Guaranteed-readable hover preview mockup: the preview panel's mini UI
mockup clamps every text/background pair to >= 4.5:1 WCAG contrast
(gamma-corrected luminance), uses the theme's real status-bar colors from
full_colors, and nudges bubble surfaces until text clears the bar.
Themes may pair decorative colors however they like; the preview never
renders unreadable text. - Readable panel chrome: polarity tags, twin labels, and descriptions
moved from the faint tertiary token (54% opacity) to secondary (74%);
the 8px footer labels demand a 7:1 contrast floor; floating surfaces are
opaque (the panel and modal no longer let the theme grid bleed through);
the polarity tag says each word once ("☀ Light", not "Light ☀ light").
Bug fixes
- Themes restored to the sidebar: a duplicate
readableOndeclaration
was a hardSyntaxErrorunder the runtime loader's strict-mode ESM import
(CJS parsing tolerates duplicates, sonode --checkmissed it). The whole
plugin was failing to load; a gate test now rejects duplicate module-level
declarations. - Hover panel docked right again: the panel used
right-6 top-24
utility classes that the app's Tailwind purge strips; positioning is now
inline (right: 24px; top: 96px). - Cards respond to window width: replaced the fixed layout with a
responsive grid (thanks @jdtimothy, #5). - Theme Switcher setup docs clarified for Desktop-over-SSH (thanks
@jdtimothy, #3).
Important
Instant dashboard repaint uses the SDK.theme.apply bridge, which ships on
the hermes-agent fork branch feat/dashboard-theme-apply-sdk. On hosts
without the bridge the tab falls back to a reload hint; a stock hermes update resets main and drops the bridge by design (graceful degradation).
How to get it
- Desktop plugin:
bash install.shin the repo, or copy
desktop-plugin/theme-switcher/plugin.jsto
~/.hermes/desktop-plugins/theme-switcher/and reload desktop plugins
(⌘K → "Reload desktop plugins"). - Dashboard tab: sync
plugins/theme-switcher/dashboard/dist/to the
running dashboard's plugin directory, or restarthermes dashboard.
Verified
- 21/21 tests pass (WCAG gate, twin invariants, plugin ESM hygiene, panel
chrome, opaque surfaces, polarity tag, responsive grid) - Strict-ESM parse + loader simulation register the plugin with the sidebar
- CI green on the release commit
Hermes Theme Pack v1.2.0
Hermes Theme Pack v1.2.0
CLI/TUI light-dark pairing blocks on every theme — all 100 themes now ship an opposite-polarity palette so the CLI and TUI repaint coherently when the terminal polarity differs from the theme's canvas.
This mirrors the desktop app's colors/darkColors pairing and closes the last gap in cross-surface compatibility: a Hermes skin now themes the CLI, the TUI, and the desktop app identically in both polarities.
What changed
- All 100 themes gain
light_colors(dark themes) ordark_colors(light themes) blocks - Derived palettes when a theme has no literal twin — polarity flips, accent hue stays, WCAG contrast re-enforced
- Literal twins share palettes (ayu, catppuccin, dracula, everforest, github, gruvbox, kanagawa, lcars, lemon, material, nord, one, rosepine, sage, solarized, vanilla, vscode)
- Community themes get pairing blocks appended without touching hand-authored content
- Polarity from luminance, not name prefixes —
minimal-bone(light bg, non-light name) now gets the correct dark pairing - New invariant test: every theme carries an opposite-polarity block with banner_text ≥ 4.5:1 against the paired background
Verified
- 9/9 tests pass
- Regeneration is idempotent
- CLI skin engine consumes the pairing blocks natively
- CI green
v1.1.0 — 100 themes, fully paired
🎉 100 themes. Perfectly balanced. Fully paired.
The Hermes Theme Pack hits the century mark: 100 curated color themes, exactly 50 light / 50 dark, every single one WCAG contrast-checked and paired with its light/dark twin.
✨ What's new in 1.1.0
- Every theme has a twin. Click the ⇄ button on any card to flip the same vibe to the opposite polarity — dark to light, light to dark. 50 pairs, 100 themes, zero stragglers.
- Follow system light/dark. A toggle in the Theme Switcher that auto-applies the active theme's twin when macOS switches appearance. Flip your Mac to dark mode at sunset and the theme follows.
- 14 new pairs since v1.0.0 — the icons of the developer theme world:
| Dark | Light |
|---|---|
| One Dark | One Light |
| Solarized | Solarized Light |
| Gruvbox | Gruvbox Light |
| Tokyo Night | Tokyo Day |
| Catppuccin Mocha | Catppuccin Latte |
| Nord | Nord Light |
| Rosé Pine | Rosé Pine Dawn |
| Kanagawa Wave | Kanagawa Lotus |
| Everforest | Everforest Light |
| Ayu | Ayu Light |
| GitHub Dark | GitHub Light |
| Material | Material Light |
| VSCode Dark+ | VSCode Light+ |
| LCARS | LCARS Light |
| Dracula | Dracula Light |
| …plus Cozy Paper, twin themes for the community set, and more |
📦 How to get it
git clone https://github.com/CliffWade/hermes-desktop-theme-pack.git
cd hermes-desktop-theme-pack
./install.shThen open Themes in the Hermes desktop app sidebar — every skin is there: search (including palette colors like "purple" or #7b2d8e), hover preview, one-click apply, undo, random, install-from-YAML, copy-YAML, statusbar chip, and ⌘K palette entry.
🧪 Quality, enforced
- Every theme passes the WCAG AA contrast gate (primary text ≥ 6:1, accents ≥ 4.5:1)
- CI runs the full test suite, validates YAML, checks the generator drift, and syntax-checks the plugin on every commit
- The twin-pair invariant test refuses to merge a theme without its counterpart
100 down. The next milestone writes itself.
Hermes Theme Pack 1.0.0
First stable release of the Hermes Theme Pack. 34 themes across 7 categories, every one passing the WCAG AA contrast gate.
Themes
- 34 themes, 7 categories: Dark, Light, Vibrant, Nature, Minimal, Retro, Community
- 10 community themes ported from BeardedChop/hermes-skins-pack: vaporwave-mall, stained-glass, shadow-thief, void-sunset, redwood, newsprint-noir, peach-fuzz, slate-mist, steel-thread, warm-ash
- Every theme passes WCAG AA: primary text 6:1, accents/secondary 4.5:1, enforced by an independent test suite
- One YAML skin themes the CLI, TUI, and desktop app at once
Theme Switcher desktop plugin
- Themes page in the app sidebar: every installed skin in one grid with real palettes
- Light/dark grouping with counts
- Search by name, description, and palette color ("purple" or #7b2d8e)
- Hover preview mockup before applying
- One-click apply, undo, random
- Install a theme by pasting YAML
- Statusbar chip showing the active theme
- ⌘K → "Themes: Open"
Built-in desktop integration
- Pack themes register into the native Appearance settings, Cmd-K, and /skin via THEMES_AREA
- Copy YAML button on every user theme card for sharing
Quality & community
- CI on every PR: YAML validation, WCAG test suite, generator drift check, plugin syntax check
- CONTRIBUTING.md with the format, contrast contract, and verification walkthrough
- README count-invariant test keeps the docs honest
Full history: CHANGELOG.md