Multi-color highlights using Obsidian's native ==text== syntax.
English · 한국어
A multi-color highlight plugin that doesn't break inline markdown. Powered by Obsidian's native
==text==syntax.
Hilo blends Highlight + Lowlight, and means "thread" in Spanish — reflecting the plugin's philosophy of weaving color into your notes without breaking markdown's natural flow.

▶ Watch the 39-second demo on YouTube
<mark> HTML-based highlight plugins lose inline markdown inside the mark because Obsidian doesn't parse the contents — so **bold**, [[wikilinks]], and *italics* render as raw text. Hilo sidesteps this by adding only a color token ({slug}) to Obsidian's already-recognized ==text== syntax.
| Hilo | <mark>-based plugins |
|
|---|---|---|
=={red}**bold text**== |
✅ renders correctly | ❌ ** shows as literal |
=={blue}[[wikilink]]== |
✅ link works | ❌ link not recognized |
| Note portability | ✅ slug (yellow) only — hex lives in settings |
❌ hex baked into the note |
| Export compatibility | ✅ ==text== is a CommonMark extension |
△ <mark> is also standard, but tokens leak |
| Bundle size | ✅ ~8 KB | ❌ tens to hundreds of KB |
=={color}text==)**bold**, [[wikilinks]], *italics*) works correctly inside a highlight.{color} token is hidden automatically; placing the cursor on the token reveals it for editing.
Hilo: Yellow, Hilo: Red)Hilo: Open color palette — opens the context-aware menu at the caretHilo: UnhighlightAssign hotkeys in Settings → Hotkeys. Each color row in Settings → Hilo also shows the currently assigned hotkey, and the keyboard button (⌨) jumps straight to the Hotkeys page.

--color-red through --color-pink). Change themes and highlights follow. Rows are locked (theme owns the values); you can still add your own custom colors on top.Auto improve readability (toggle, on by default). Compensates highlight background brightness at render time so colors stay readable on both light and dark themes: overly bright colors are darkened on dark themes, overly dark colors are brightened on light themes. Hue and saturation are preserved and the stored palette hex values are never modified. Underlined style bypasses compensation so the thin band stays visible. Toggle off to render every color exactly as stored.
Three ways to render highlights, switchable under Settings → Hilo → Highlight style:
Default (solid) — the color fills the whole text region, like a classic highlighter marker.

Lowlight (iA Writer) — subtle background with a darker underline; the underline color is auto-computed from each background via HSL (hue preserved, saturation 100%, lightness −30pp).

Underlined — a thin band of color at the bottom of the text, no fill. Works cleanly on both light and dark themes.

Both Lowlight and Underlined use box-shadow for the color band instead of text-decoration, so they aren't overridden by Chromium's spellcheck.
<mark style="...">text</mark> highlights.=={slug}text==.main.js, manifest.json, and styles.css into your vault's .obsidian/plugins/hilo/ folderThe selection becomes =={color}text== and the color renders immediately.
pink) and a hex value (e.g. #ffc0cb)Place the cursor on an existing <mark> highlight and right-click — the same menu appears. Use Change color to convert it to the Hilo token format, or Unhighlight to remove it.
Hilo's output format is the single inline form =={color}content==.
yellow, red, 1st, 2nd, soft-blue).==text== yellow — no broken rendering, just an untinted visible highlight.Exporting outside Obsidian: external markdown renderers may show the
{color}token as literal text. If you publish to such renderers, strip tokens before export (automatic stripping is a future option).
The configured background color fills the entire highlight area.
Set under Settings → Hilo → Highlight style.
Hilo automatically picks up Obsidian's interface language.
localStorage language keyAfter changing the language under Settings → About → Language, toggle the plugin off and on (Settings → Community plugins → Hilo) so the command palette names (e.g. Hilo: Open color palette) pick up the new language. Obsidian freezes command names at registration time. The settings UI, right-click menu, and modals update without a reload.
To add a language, copy src/i18n/locales/en.ts as a new locale file under src/i18n/locales/, translate the values, and register the new entry in src/i18n/index.ts's dictionary map.
The following features are deliberately omitted to keep Hilo focused. They may be revisited based on user feedback:
Hilo's right-click menu structure, settings UI flow, and visual style catalog are inspired by Chetachi's Highlightr and Highlightr+. They pioneered multi-color highlighting in Obsidian; Hilo borrows their patterns while swapping the output format for native ==text==.
Hilo was scaffolded with Scaff — a lightweight, markdown-based AI development harness. Every iteration (phase-by-phase build, marketplace review, demo assets) was tracked as plain-file CONTEXT.md / GOAL.md / ROADMAP.md, without any CLI, hooks, or MCP.