github Yeraze/meshmonitor v4.14.1-rc2
Theme Color Schemas

pre-release4 hours ago

MeshMonitor v4.14.1-rc2 — Theme Color Schemas

⚠️ Pre-release. This is a release candidate for 4.14.1. It ships on the :dev Docker tag, not :latest. Run it if you want the changes early and can tolerate rough edges; report anything you hit.

Summary

This candidate is one piece of work: custom themes are now defined by what a colour is for, not which Catppuccin swatch it happens to be.

Before, a theme was 26 palette names — base, blue, mauve, peach. To make the accent red you had to write blue: "#ff0000", and anyone reading that theme afterwards had to know blue meant "the accent". A theme is now 26 roles:

{ "accent": "#ff0000", "bg": "#1e1e2e", "textFaint": "#6c7086", "error": "#f38ba8" }

Existing custom themes keep working. Definitions stored in the old format are translated when they're read — nothing is rewritten on disk, so downgrading is safe.

Getting there also fixed a family of bugs where colours were pinned to Catppuccin Mocha regardless of the theme you'd selected. Tinted panel backgrounds, warning banners, badge fills and drop shadows all rendered Mocha's palette on Nord, Gruvbox, Solarized and every other theme. If you use a non-Catppuccin theme, this is the release where those surfaces finally match it.

Two smaller wins fell out of the same work. Roles that used to share one swatch — faint text, subtle borders and the inactive-element fill were all overlay0 — can now be themed apart, so a theme can lighten its chrome without also washing out timestamps. And chart colours are drawn from a dedicated categorical scale chosen to stay mutually distinguishable in every built-in theme, instead of borrowing role colours that could collide.

Features

  • Themes are authored by role (accent, bg, textFaint, error) instead of by Catppuccin swatch name, with the theme editor grouped and labelled to match (#4623). Closes #4567.
  • Categorical colour scale for charts and per-source tagging, kept distinct from the role vocabulary so a theme's accent colour can never collide with a data series (#4605, #4606).
  • Sequential colour scale for magnitude — distance histograms and hop-density ramps now read as ordered rather than as a set of unrelated hues (#4611).

Bug Fixes

  • Tinted backgrounds ignored the active theme — the variables behind them were never defined, so every tint silently fell back to hardcoded Catppuccin Mocha in all 15 themes (#4617).
  • 87 hardcoded palette colours written directly as rgba() values now follow the theme. The worst of these put a Mocha-green background behind theme-coloured text on the same badge, so the two halves disagreed on any other theme (#4620).
  • Chart backgrounds, gridlines and labels read theme colours correctly (#4622).
  • Remaining hardcoded colours in components — hover shades that shifted hue instead of brightness, and status colours that had no theme-aware definition (#4619).
  • Estimated-position anchors are written atomically, with the empty-input contract documented (#4621). Closes #4614.

Documentation

  • Theme gallery regenerated against the new stylesheet, so the screenshots come from code that still exists (#4624).

Upgrade notes

  • Custom themes: no action needed. Old swatch-keyed definitions are translated on read. If you re-save a theme in the editor it will be written in the new role format; before that, the stored row is untouched.
  • Built-in themes are visually unchanged. This was verified rather than eyeballed — both stylesheets were resolved through a real browser across 15 themes × 39 colour tokens, giving 585 comparisons and zero differences. The deliberate exceptions are two rules (timestamps and small field labels) that moved to the faint-text role, which had no correct home before.

🚀 MeshMonitor v4.14.1-rc2

📦 Installation

Docker (recommended):

docker run -d \
  --name meshmonitor \
  -p 8080:3001 \
  -v meshmonitor-data:/data \
  ghcr.io/Yeraze/meshmonitor:4.14.1-rc2

🧪 Testing

✅ All tests passed
✅ TypeScript checks passed
✅ Docker images built for linux/amd64, linux/arm64, linux/arm/v7

📋 Changes

See commit history for detailed changes.

Don't miss a new meshmonitor release

NewReleases is sending notifications on new releases.