Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Inline Ruby Annotation

Baksi LiBaksi Li1k downloads

Render Inline Annotation ruby, bouten, underline, and two-slot annotations in reading view.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates5

Render Inline Annotation syntax as ruby/furigana, over/under glosses, bouten, overlines, and underlines in Obsidian.

[漢字]^^(かんじ)
[base]^^(over)^_(under)
[重要]^^(..)^_(.~)

The plugin supports Reading view and an early Live Preview replacement widget. Both use the model from markdown-it-inline-annotation/core.

Behavior

Surface Support
Reading view yes
Live Preview prototype; reveals source while editing the expression
Source mode original Markdown source
Commands and settings not yet
Network access or external resources none

The adapter uses conservative spaceAlignment: "auto": phonetic readings such as [取り返す]^^(と り かえ す) align per character, while glosses such as [真值]^^(Truth Value) stay grouped.

Host Boundaries

Obsidian parses Markdown before Reading-view postprocessors run. The adapter:

  • renders complete expressions inside a plain or consistently formatted run;
  • may join adjacent plain text nodes and attribute-free spans;
  • does not join across emphasis, highlight, link, code, or another semantic boundary;
  • skips existing links, code, preformatted blocks, ruby elements, scripts, styles, textareas, and data-inline-annotation-ignore elements.

Annotation slots are plain text. Rich Markdown such as [term]^^(**bold gloss**) is intentionally not reconstructed after Obsidian has split it into semantic DOM nodes. Preserving the source and formatting is safer than silently flattening them to form an annotation.

Live Preview has a separate CodeMirror integration because it operates on source ranges rather than rendered DOM. See docs/live-preview-notes.md for its current tradeoffs.

Styling

The bundled stylesheet exposes a small customization surface:

body {
  --ia-rt-font-size: 0.65em;
  --ia-rt-line-height: 1;
  --ia-underline-offset: 0.15em;
}

Development

npm install
npm run check

npm version synchronizes manifest.json and versions.json. Push the matching bare version tag, such as 0.4.0, to test, build, and upload the three Obsidian release assets with attestations. The Release workflow can also be dispatched on an existing tag to retry it.

npm run check builds the plugin, runs the shared rendering and segment-boundary fixtures, tests Live Preview source ranges, and verifies package safety rules. The core package is bundled into main.js; Obsidian and its CodeMirror packages remain external so the editor keeps one CodeMirror runtime.

To test the runtime files in a vault:

npm run install:vault -- "/path/to/Vault" --clean --enable --examples

Then reload Obsidian or disable and re-enable the plugin. The installer copies only main.js, manifest.json, versions.json, and styles.css; --examples also installs the maintained smoke and showcase notes.

  • examples/obsidian-smoke.md: focused smoke test.
  • examples/obsidian-showcase.md: broader visual pass.

To update the published core intentionally:

npm run update:core
npm run check

Ecosystem

  • Inline Annotation spec and core
  • Inline Annotation for VS Code
  • Logseq reference plugin
  • Original proposal

Safety

Generated DOM is built with DOM APIs. User-authored text is escaped by the shared core, and the plugin loads no scripts or remote resources.

License

MIT

HealthExcellent
ReviewSatisfactory
About
Render Inline Annotation v2 syntax in Obsidian Reading view and Live Preview. Skip existing links, code, preformatted blocks, ruby, scripts, styles, and elements marked data-inline-annotation-ignore, and align phonetic readings per character while keeping multi-word glosses grouped.
AnnotationEditing
Details
Current version
0.4.0
Last updated
3 weeks ago
Created
6 months ago
Updates
5 releases
Downloads
1k
Compatible with
Obsidian 1.5.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
Baksi LiBaksi Libaksili
GitHubbaksili
  1. Community
  2. Plugins
  3. Annotation
  4. Inline Ruby Annotation

Related plugins

Admonition

Admonition block-styled content.

LanguageTool Integration

Advanced grammar and spell checking, powered by LanguageTool.

Text Format

Format selected text upper/lower/capitalize.

Meta Bind

Make your notes interactive with inline input fields, metadata displays, and buttons.

Thino

Quickly capture memos and display them in the sidebar with a heatmap. (Closed source)

Advanced Tables

Improved table navigation, formatting, and manipulation.

Simplified Chinese Word Splitting

Adds Simplified Chinese word splitting support for the editor and Vim mode.

Editing Toolbar

The Editing Toolbar is modified from cMenu, which provides more powerful customization settings and has many built-in editing commands to be a MS Word-like toolbar editing experience.

Underline

Add underline with shortcut.

Force note view mode

Force the view mode for a note by using frontmatter: YAML block with 'obsidian_ui_mode' as key.