Max Dokukin104 downloadsSelect text in a PDF and click a color. Highlights are listed in a note next to the PDF, grouped by color and sorted by page, and drawn on the PDF without modifying the file.
Select text in a PDF, click a color. That's the whole workflow.

<pdf name>_highlights.md
in the same folder (created the first time).Deleting an entry's line in the note removes the highlight from the PDF. Indented lines you write under an entry are your notes on it; they stay attached when the note is re-sorted.
Each color is also a command (Highlight selection: Yellow, …), so you can bind hotkeys.
## Yellow
- "Highlights are most useful when they can be found" [[article.pdf#page=1&selection=2,0,2,50|p.1]] (page:: 1) (type:: yellow) %%hl:0.117,0.359,0.61,0.021%% ^h1-k3jf
my own note about this passage
(page:: …) and (type:: …) are Dataview inline
fields, so highlights can be queried across the vault (FLATTEN file.lists AS L WHERE L.type = "yellow").
Dataview is not required.%%hl:…%% is where the highlight sits on the page (one rectangle per text line, as fractions of the
page). It is a comment, hidden in reading view. Don't edit it by hand.^h1-k3jf is a block id: cite one exact highlight from any note with ![[article_highlights#^h1-k3jf]].| Setting | Default | |
|---|---|---|
| Colors | Yellow, Green, Blue, Red, Purple | Add, remove, reorder, recolor, relabel. Order = palette order = group order in the note. Give them meaning if you like: Claim, Method, Evidence, Question. |
| Snap selection to whole words | on | A selection that starts or ends inside a word is extended to the whole word. |
| Create highlights note | on | Off: no note is created; highlights are kept in the plugin's data and still drawn on the PDF. A note that already exists is still used. Turning it back on writes the stored highlights out to notes. |
| Note name | {{filename}}_highlights |
{{filename}} is the PDF's name without extension. The note always sits next to the PDF. |
| Template file | — | Optional note to start new highlight notes from. Placeholders: {{filename}}, {{pdf.name}}, {{pdf.path}}, {{folder.name}}, {{folder.path}}. |
Each color has a fixed type id (shown under its label) which is what entries store, so renaming a label never disconnects existing highlights — the headings in the note simply follow on the next change. Removing a color keeps its highlights: they are drawn in grey and grouped last.
Until it is in the community directory:
maxdokukin/easy-pdf-highlight as a beta plugin.main.js, manifest.json and styles.css from the
latest release into
<vault>/.obsidian/plugins/easy-pdf-highlight/, then enable it under Settings → Community plugins..page, .textLayer). Positions come from the
browser's own selection geometry rather than PDF.js internals, which has kept it stable, but a large
change to the built-in viewer could require an update.Plain JavaScript, no build step: main.js is the source and the release artifact.
npm test — unit tests for parsing, grouping/sorting, word snapping, settings logic.test/e2e/ — end-to-end test that drives a real, isolated Obsidian instance with real mouse input
over the DevTools protocol. See test/e2e/README.md.version in manifest.json and package.json, add it to versions.json, push a tag
equal to the version (no v prefix). The workflow tests and publishes the three files../register.sh checks everything the directory's automated review
looks at and opens the submission page. See SUBMISSION.md.MIT