hellokunzai316 downloadsNon-invasive reading annotation plugin for PDF and EPUB. Highlights, notes, and tags are stored in separate sidecar files — your original documents are never modified.
Non-invasive reading annotation plugin for Obsidian. Annotate PDF and EPUB in one place — highlights, notes, and tags live in separate sidecar files, so your original documents are never modified.

Most annotation tools mutate your source files. Book Note takes the opposite approach: every highlight, note, and reading-progress record is written to a sidecar Markdown file next to your vault's config, while the original document stays byte-for-byte intact. Rename, move, or delete a source file and the plugin migrates its annotations with it.
It started as a Markdown/PDF highlighter and grew into a full reading workspace focused on PDF and EPUB:
obsidian://book-note) that jump back to the exact highlightobsidian://book-note link that returns to the exact PDF or EPUB annotation.Note: Book Note annotates PDF and EPUB files only. Markdown files in your vault are not annotated by this plugin.
hellokunzai/obsidian-book-note.main.js, manifest.json, and styles.css from the Releases page.<vault>/.obsidian/plugins/book-note/.Obsidian hides unknown extensions by default. To show .epub in the file explorer:
Configure under Settings → Book Note:
| Setting | Description |
|---|---|
| Default highlight color | The color applied to new highlights. |
| Default author | Signature attached to your annotations. |
| Migrate annotations on rename | When a source file is renamed or moved, migrate its sidecar annotations and update links. |
| Annotation tags | Manage semantic tags — enable up to 5, rename, reorder, disable, assign a preset icon, or restore defaults. Duplicate names are blocked (whitespace / full-vs-half-width / case are normalized). |
| EPUB font size | Base body font size in px (12–28). Applies when you reopen the book. |
| EPUB reading theme | One of 6 themes. |
| EPUB flow mode | Paginated (page-turn) or Scrolled (continuous). |
| EPUB highlight style | Fill / Underline / Wavy underline. |
| PDF reading progress | Record the current page and reading progress. Disabling does not delete existing progress. |
| Command | Hotkey | Action |
|---|---|---|
| Highlight selection | Ctrl/Cmd+Shift+H |
Highlight the selected text (PDF; EPUB uses its in-reader toolbar). |
| Add sticky note to selection | Ctrl/Cmd+Alt+M |
Attach a thought/note to the selection. |
| Open annotation overview | — | Open the Book Note sidebar. |
| Open EPUB bookshelf | — | Browse e-books inside the vault. |
| Show PDF outline | — | List the current PDF's table of contents. |
| Test Book Note storage | — | Verify write access to the sidecar directory. |
Modmaps toCtrlon Windows/Linux andCmdon macOS.
All annotation data lives in sidecar files. The Sidecar location setting (Settings → Storage) controls where they go:
<vault>/booknote/). Name = path segments joined by -, original filename + extension, then .md.<source>.md.The sidecar index (which file maps to which sidecar) is stored inside the plugin's own data.json — there is no separate index.json file.
# Specified folder mode (default):
booknote/ # default folder (configurable)
papers-example.pdf.md # PDF annotations (Markdown)
books-novel.epub.md # EPUB annotations (CFI anchors + reading progress)
# Next to source file mode:
books/novel.epub # your source EPUB
books/novel.epub.md # its sidecar, next to the source
papers/example.pdf # your source PDF
papers/example.pdf.md # its sidecar, next to the source
Book Note emits links of the form:
obsidian://book-note?file=<vault-relative-path>&id=<annotation-id>
obsidian://book-note-epub?file=<vault-relative-path>&cfi=<epub-cfi> # legacy EPUB links
Clicking a link opens the file and scrolls to the exact annotation.
foliate-view custom element embedded in an Obsidian leaf, with CSP / sandbox patches for the desktop runtime.AnnotationStore, unified into a FileAnnotationDocument model.renderedAnnotationMeta tracks the foliate highlight layer so add/remove operations refresh immediately.npm install
npm run dev # development build (with sourcemap)
npm run build # production build
Type-check:
npx tsc --noEmit
Copy main.js, manifest.json, and styles.css into <vault>/.obsidian/plugins/book-note/ to test in a vault.