Floating toolbar that styles selected text with clean inline HTML: color, highlight, size, font, bold/italic/underline/strikethrough, and table-aware alignment. Repeated formatting merges into a single span instead of nesting.
An Obsidian plugin that gives you a floating, Word-like formatting toolbar — but with a twist that makes it different from every other formatting plugin: everything it produces is one clean inline HTML span.

HTML Font Toolbar and HTML Table Toolbar are sister plugins, built by the same author to the same house style and designed to work side by side. Neither depends on the other and neither imports the other's code — install either one alone and it works completely.
Install both and they coexist deliberately rather than by accident:
hft-, every class there is tt-.Where this plugin styles text, the table plugin builds real <table> markup — merged cells, per-cell shading, per-row and per-column borders, and table centring, none of which Markdown pipe tables can do.
Markdown formatting (**bold**, ==highlight==) and HTML styling (<span style="color:red">) don't nest predictably. Mix plugins that use different syntaxes and you get conflicts: a highlight that locks the font color, bold that can't be colored, nested tags that break each other.
HTML Font Toolbar avoids the whole problem by staying in one layer:
<span style="color:#e0313a; background-color:rgba(255,213,0,0.4); font-size:1.25em; font-weight:bold">word</span>Because the output is plain inline HTML, notes render identically even if the plugin is later removed.
em units, scale with your theme)<span style="display:block"> rather than a <div>/<p>, which would make Obsidian treat the whole paragraph as raw HTML (lines wrapped by older versions migrate automatically the next time you touch them). Context-aware::---:)![[image.png]] alone on a line): sets the alignment as an alias keyword (![[image.png|center|300]]) that the plugin's CSS aligns in both Live Preview and Reading mode — the image keeps rendering nativelyEvery preset on the toolbar is editable in the plugin's settings tab: rename, recolor, remove, or add text colors, highlights, font sizes, fonts, and symbol groups. Each section has a one-click restore-defaults button. Changes apply to the toolbar immediately.
Color values accept any CSS color — hex like #ffd500 or rgba(255, 213, 0, 0.4), where the fourth rgba number is opacity (0 = transparent, 1 = opaque). The two formats are interchangeable: #ffd500 is rgba(255, 213, 0, 1) with the three channels written in hex. As a rule of thumb, use opaque hex for text colors (semi-transparent text looks washed out) and semi-transparent rgba for highlights (so they stay readable in both light and dark themes).

From Obsidian (recommended): Settings → Community plugins → Browse → search for "HTML Font Toolbar" — or open it directly in the community directory.
Manual: download main.js, manifest.json, styles.css from the latest release into <vault>/.obsidian/plugins/html-font-toolbar/, then enable the plugin in Settings → Community plugins.
Click the palette icon in the left ribbon (or run "Toggle toolbar") to show/hide the toolbar.

Select text (or click inside an already-styled word) and press a button.
Stack as many properties as you like — they merge into a single span.
Every styling button toggles: pressing the color, highlight, or B/I/U/S you already have removes just that one property and leaves the rest intact. Pressing a different color replaces the current one.
The eraser button removes all styling at once from the selection or the styled word under the cursor.
Both of these come from Obsidian itself rather than the plugin, and neither has a workaround available to a plugin:
<u>). In practice: if you center or indent a line containing a [[wikilink]], that link shows as raw text while you are in Editing view, and renders correctly in Reading view. The same applies to markdown syntax such as **bold** typed inside a styled span. No choice of wrapper tag avoids it — the wrapping itself is what disables the parser. It is also why styling a selection deliberately emits links outside the spans, which is possible for inline styling but not for whole-line alignment, where the wrapper has to enclose the entire line.![[image.png|center|300]]) that the plugin's stylesheet acts on, because wrapping an embed in HTML stops it rendering at all. If you uninstall the plugin, those images revert to left alignment. Everything else the plugin produces is plain inline HTML and keeps rendering without it.If this plugin is useful to you, consider supporting development:
Made by Charette AI Group.
MIT © 2026 Charette AI Group, LLC