Inline Notes

approvedunreviewed

by Arkk

Highlight text and edit inline comments with configurable types, stored directly in Markdown for people and agents.

↓ 1 downloadsUpdated 1d agoMIT

Inline Notes

简体中文

Highlight text, attach multiple comments, and edit them directly in Obsidian. Annotations live in your Markdown files, so people and AI agents can read them without a database or service.

Features

  • A floating toolbar appears when you select text in Live Preview.
  • Configurable types: name, emoji, color, TAG, default comment, click behavior and order.
  • Quick marks save immediately; comment types open an inline input. Every saved comment remains editable.
  • Multiple annotations on one highlight, with one badge per comment.
  • Click a badge to edit directly. Delete with the trash icon; deleting the last comment preserves the original text.
  • Annotation changes use isolated editor undo steps.
  • English and Simplified Chinese UI, following Obsidian's language. Other languages fall back to English; Chinese variants currently use Simplified Chinese.
  • No account, telemetry, network calls or AI API required. This plugin does not run an agent or send notes to one.

Install from source

Requires Obsidian 1.8.7+ and Node.js 22+ for building. The plugin is not yet listed in the community plugin directory.

git clone https://github.com/ArkkWang/obsidian-inline-notes.git
cd obsidian-inline-notes
npm ci
npm run check

Create <vault>/.obsidian/plugins/inline-notes/, copy only main.js, manifest.json and styles.css into it, and enable Inline Notes under Community plugins. The build writes only inside this repository; it does not modify a vault or reload Obsidian.

From the earlier Agent Annotations prototype

  1. Back up the vault and the old plugin's data.json.
  2. Disable Agent Annotations before enabling Inline Notes. Do not run both on the same note.
  3. Optionally copy the old data.json into the new plugin folder before enabling Inline Notes to retain custom types and author settings.

Existing Markdown annotations and their IDs remain readable; no note migration is required. The plugin ID changes from agent-annotations to inline-notes, so command hotkeys must be reassigned. Existing custom labels and comment text are never translated when the UI language changes. Fresh defaults use the language active when the plugin loads; reload the plugin after changing Obsidian's language.

Use

  1. Select unannotated text in Live Preview and choose a type. The toolbar stays open for additional types.
  2. Click a badge to edit the comment immediately. Save appears only when content changes. Enter saves; Shift+Enter inserts a line break.
  3. Click the trash icon to remove a single comment. Other unsaved comment drafts in the same panel are retained.
  4. Clicking outside or pressing Escape discards unsaved edits. Adding another annotation saves pending edits first.
  5. Use the editor's Undo/Redo commands to undo or redo annotation operations.

Configure types in Settings → Inline Notes. TAGs must be unique and match ^[A-Z][A-Z0-9_]*$. Changing or deleting a type does not migrate or erase annotations already stored in notes. Unknown TAGs still display with a fallback badge.

Markdown format

{==Text to review==}{>>an-example|you|2026-01-01|VERIFY: Verify only the cost estimate<<}{>>an-second|you|2026-01-01|NOTE: Add the source<<}

Each comment has an ID, author, local creation date, TAG and body. Multiple comments follow the same highlighted text; highlights are not nested. Body braces, ampersands and line breaks are escaped as entities. core.js exports scan(text) for structured parsing. Code examples are excluded by the parser's fenced/inline-code detection.

Limitations and validation

  • Editing is designed for Live Preview. Source mode displays the raw syntax.
  • Reading view renders annotations per text node. Annotations crossing Markdown formatting nodes or paragraphs may remain raw; switch to Live Preview to manage them.
  • Partial overlaps and nested highlights are not supported. Re-select the whole existing highlight or use its badge to add comments.
  • Multiline legacy metadata remains visible rather than forcing unsafe editor decorations.
  • Automated tests cover serialization, independent comments, real CodeMirror undo history, DOM interactions and locale behavior. They do not establish real Obsidian layout correctness.
  • This standalone/i18n version has not yet had desktop or mobile UI regression testing. Mobile usability is unverified.

Development

npm ci
npm test
npm run build

main.js is generated and not committed. Host-provided obsidian and @codemirror/* modules remain external. CI runs tests/builds on Linux and Windows and uploads the three installable files as an artifact.

For translation and contribution notes, see CONTRIBUTING.md.

License

No open-source license has been selected yet; the package is marked UNLICENSED. Public repository visibility is not a grant of an open-source license.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.