VoidReader 1.2.0 — "Reading the Fine Print"
The one where we learn what your document is about before you do
You know how every markdown file starts with a block of YAML that nobody reads? Turns out it's actually useful — title, author, tags, dates, all that metadata people carefully maintain and then scroll past. VoidReader now reads it for you and puts it somewhere nice.
Frontmatter Banner
Documents with YAML frontmatter (--- fenced at the top) now render a styled banner above the content. Key-value pairs display as labeled rows, and values that look like comma-separated lists (looking at you, tags:) wrap into tidy pills. It's the kind of thing you didn't know you wanted until you see it, and then you wonder why every markdown viewer doesn't do this.
Works in the reader, in print output, and in Quick Look previews — because metadata doesn't stop being metadata just because you hit ⌘P.
Scroll Percentage (Again)
Yes, again. Turns out 1.1's progressive rendering — the thing that made large documents load 134x faster — had a side effect: the scroll percentage was calculated against the initial chunk's height, not the full document. So you'd open a 50,000-row table, see "100%" immediately, and wonder if the document was really that short. It was not.
The fix is one line: recalculate scroll percentage when the denominator changes after progressive render completes. The regression test suite is considerably more than one line, because we're tired of fixing this.
Regression Tests
Four unit tests proving the progressive-render math stays honest, plus two UI tests that open pathological fixtures and verify the percentage starts at zero. CI generates the fixtures on the fly and cleans up after itself, because checking 50,000-row tables into git felt wrong.
Housekeeping
Centralized the code block chrome constants (header height, padding) into one place instead of three. Copilot noticed the drift risk before we did — credit where it's due.
Performance Lab
All four scenarios green, no regressions from frontmatter work:
| Scenario | Samples | Idle | Work | Top App Frame |
|---|---|---|---|---|
| open-large | 458 | 12 (2.6%) | 433 (94.5%) | VoidReaderApp.$main() 91% |
| scroll-to-bottom | 768 | 14 (1.8%) | 667 (86.8%) | Low — no single hotspot |
| search-navigate | 503 | 14 (2.8%) | 471 (93.6%) | MarkdownChunker.findFirstChunkEnd 0.6% |
| edit-toggle | 2,248 | 1 (0.04%) | 1,842 (81.9%) | AttributedString.init 10.5% |
The edit-toggle AttributedString dominance is known and pre-existing — it's CoreText doing legitimate work building styled text for the editor. Nothing new, nothing alarming.
Install / Update
brew install --cask lazypower/tap/voidreader
# or
brew upgrade --cask voidreaderOr grab the DMG from Releases.
Full Changelog: v1.1.0...v1.2.0
Co-authored with Claude Opus 4.6, who has now fixed the scroll percentage in three consecutive releases and is starting to take it personally.