A portable, format-agnostic annotation format for PDF, Markdown, and DOCX. Local-first sidecar JSON. Edit-tolerant text anchors. A directed lineage graph between snippets. MarkRank centrality over your reading.
Universal binary · macOS Intel + Apple Silicon · 8.5 MB · unsigned dev build
Annotations live in plain JSON sidecars next to the source file. No server,
no account, no proprietary blob. Email someone a paper.pdf and
paper.pdf.annot.json — they get your annotations.
A normative four-tier resolution algorithm finds your highlight even after the source has been edited: exact text + context → exact text only → fuzzy within section → orphaned with badge.
Connect snippets with labeled edges — supports, contradicts, elaborates. The graph is first-class data. MarkRank, a PageRank variant over the snippet graph, surfaces the most-cited ideas.
Share a single annotation as a URL. The link carries hash + anchor + optional
text/context windows; the receiver opens the source PDF and lands on the right
region. Like HTML #:~:text= Text Fragments — but for documents.
One snippet schema covers PDF, Markdown, and DOCX. Lineage view mixes a page-3 PDF quote with a §Methods Markdown snippet on the same canvas.
Every implementation detail in SPEC.md + a JSON Schema you can validate sidecars against in CI. The format is the contract; the tools are interchangeable.
| Marklee | W3C WADM | XFDF | Hypothesis | Sciwheel | |
|---|---|---|---|---|---|
| PDF + Markdown + DOCX | ✓ | ~ | PDF only | HTML mostly | PDF + HTML |
| Sidecar / portable | ✓ | server | XML | server | cloud-only |
| Edit-tolerant anchors | 4-tier | partial | byte offset | TextQuote | unknown |
| Labeled-edge graph | ✓ | replies only | |||
| Per-annotation permalink | defined | URI | page-only | ||
| Centrality algorithm | MarkRank |
v0.1, working draft. Spec stable enough to write tools against; format may change incompatibly until 1.0. Reference implementation is the desktop app on this page. The web build (browser-mode + permalink bootstrap) and Chrome extension are next.
Built local-first because the data model demands it. Nothing about Marklee requires a server, and nothing it does will ever require an account.