Skip to content

v0.1.0

Latest

Choose a tag to compare

@dilmun-release-bot dilmun-release-bot released this 09 Aug 18:40
b0a3e85

0.1.0 (2026-08-09)

Features

  • annotations: colour highlights with H, line wash, and overlay tab (6017070)
  • annotations: store layer for colour highlights (04549db)
  • app: command palette + fuzzy matcher (Phase 4) (a3636b5)
  • bookmarks: named bookmarks + folders (65ea7b7)
  • bookmarks: pure bookmarks, gutter ribbon, modern overlay (84eb15e)
  • dedup: content-fingerprint deep scan (SimHash), drop cover+title (3148685)
  • dedup: drop READ column and per-group title from the resolver table (97992aa)
  • dedup: fingerprint the title page / front matter, not the middle (db4bd81)
  • dedup: identify books by title read from the page, not metadata (c71ddd6)
  • dedup: match books by their table of contents (a81fea4)
  • dedup: multi-key union-find detection + "keep both" dismissals (7cff332)
  • dedup: per-author metadata match + content scan skips metadata-grouped (6afb3dc)
  • dedup: rename keep→ignore; add ignored-groups manager (8d423f7)
  • dedup: resolver full-screen, format/converted prefs, path column (b835b3e)
  • dedup: resolver preview + reveal, tabular layout; drop Enter-delete (1ffc897)
  • dedup: scan every book — union all tiers instead of fallback (2aba5dd)
  • dedup: thorough cover-hash duplicate scan (R in Duplicates view) (e2dc535)
  • epub: EPUB3 navigation document — TOC + bodymatter start (Parsing Phase B) (3645751)
  • eqn: degrade unmappable MathML nodes instead of sinking the equation (#7) (97d3679)
  • eqn: recover math from data-mathml, JATS tex-math, and aria-describedby (#9) (6470efc)
  • format: display-math detection → Block::Math (83366e6)
  • format: footnote/cross-ref anchors + footnote definitions (75365c0)
  • format: MathML rendering (+ quieter inline image placeholder) (619118c)
  • format: parse <table> into Block::Table (a16b8cf)
  • format: parse admonitions into Block::Callout (ab1abdc)
  • format: PDF v2 — page-as-image backend (pdfium-render) (93f4b34)
  • formats: recognize PDF/MOBI/AZW3 — index by filename, dispatch on open (42a0d7b)
  • html: attach a trailing 'Figure N.' paragraph as the image caption (226b295)
  • image-viewer: open on current figure, copy, editable save path (6e87935)
  • images: auto-boost low-res equations + live "Equation size %" knob (007c11f)
  • images: normalize figure sizing + Lanczos3 quality; text-proportional equation strips (002a502)
  • images: size figures consistently from authored width (418302e)
  • layout: justify, soft-hyphen breaks, converter-spacing tidy (010848f)
  • library: Cover Wall view — immersive, chrome-minimal cover grid (433f7f5)
  • library: cross-format duplicate detection (Phase 3) (34a56e1)
  • library: direction-aware cover prefetch + vim page navigation (86bd181)
  • library: duplicate resolution (keep one, delete the rest) (91c0fb2)
  • library: duplicate-resolution overlay (checkboxes + smart auto-select) (2e7b1a2)
  • library: export book list to CSV/JSON/Markdown (Phase 4) (2c414ec)
  • library: free-form per-book tags (43ec769)
  • library: in-app Sources tab to manage library folders + folder CLI args (32a83a5)
  • library: metadata diff + selective apply (6f0535a)
  • library: PDFs/EPUBs sidebar views + clearer Collections divider (9f34583)
  • library: per-book rating (Phase 3) (95de61f)
  • library: reading-status enum + per-column show/hide + sort rework (91ac062)
  • library: right-aligned book counts per sidebar group (142281d)
  • library: single cover grid — rounded covers, details caption, no badge (aa02613)
  • library: smart filter query DSL (Phase 3) (693bba8)
  • library: statistics overlay (Phase 4) (703f9f7)
  • library: stretch covers to fill the cell (grid + wall) + wall badge (2a23722)
  • library: trash-delete, orphan sweep, frequency tab order, stable tabs (22e3d12)
  • lookup: Year + ISBN seed fields; ISBN-only exact lookup (27c5071)
  • math: "Math size %" setting for graphical equation size (c5a3007)
  • math: delryn-math crate — LaTeX → cached PNG (RaTeX) (4e05bbb)
  • math: render display equations as themed images (graphical math) (3cf3bcf)
  • math: retain the LaTeX source on Block::Math (beefdda)
  • math: super-script unambiguous exponents in text equations (cce72a4)
  • math: universal, encoding-agnostic math rendering (#5) (328c867)
  • media: image rendering modes — smart lightness-invert (c9c83cc)
  • mobi: detect converted (calibre etc.) files during scan (1915647)
  • mobi: HUFF/CDIC decompression (type 17480) (#9) (92b9887)
  • mobi: KF8/AZW3 sections, NCX table of contents, and inline images (#13) (2a8cca1)
  • mobi: MOBI/AZW3 reader — PalmDB + PalmDOC decompress → shared HTML pipeline (a04da61)
  • model: rich Block model for technical content (8c43c72)
  • mouse: clickable library sidebar, detail pane, and annotations tabs (e2616bc)
  • mouse: make every modal overlay mouse-drivable via one shared mechanism (4ebba0d)
  • notes: line-anchored notes with commentary, pen gutter icon, searchable overlay (45c8d24)
  • overlay: standardize all overlay windows — one compact size, f to enlarge, scrollable (52e21d4)
  • pdf: constant margin crop for consistent page width (7e04933)
  • pdf: margin trim + full-bleed spread + sharper raster (6f5aecb)
  • pdf: theme full pages to the active theme (Auto/Invert/Faithful) (474c251)
  • pdf: viewport-matched crisp re-raster (size-keyed page cache) (a5d4a45)
  • reader: break wide display equations into stacked lines (#10) (49b551a)
  • reader: code folding and the F/I number-badge pick-mode (#20) (40f8664)
  • reader: code-block navigation (next/prev + position) (608da2c)
  • reader: continuous PDF default to fit-page + side padding (38cbdbc)
  • reader: continuous PDF zoom/centre/pan + two-page stacking (a4c3cde)
  • reader: continuous scroll across chapters (reflow) (3ba2df0)
  • reader: continuous scroll for paged (PDF) documents (5e06426)
  • reader: cover-page offset for two-page PDF mode (8ce13b3)
  • reader: Ctrl-d/Ctrl-u half-page caret navigation in cursor mode (d20a3b3)
  • reader: direct-Kitty PDF page rendering (icat model, no flash) (fd809a3)
  • reader: DPI-independent, consistent equation & image sizing (#22) (3855961)
  • reader: draw following sections' figures in continuous scroll (79b24c9)
  • reader: follow cross-references & citations (complete link cursor) (c918e4b)
  • reader: full-featured image viewer (11236ae)
  • reader: fullscreen code viewer, theme-aware highlighting, and shared list nav (#19) (a1b9853)
  • reader: link cursor — follow footnote refs / links (Phase 2) (4d7f86a)
  • reader: manga (RTL) two-page continuous scroll (6f2622f)
  • reader: manga / right-to-left reading direction for paged spreads (894c0a1)
  • reader: page mode — paginated reading (Phase 2) (a899a79)
  • reader: PDF navigation polish — scroll-spy, page indicator, jumps (d010632)
  • reader: Phase 7.2 — preserve reading position across re-wraps (f7e462c)
  • reader: Phase 7.3 — PDF zoom & pan (fit modes + manual zoom) (f726f87)
  • reader: reading-mode presets (Study/Research/Presentation) (52fdf32)
  • reader: rewrite PDF page rendering on the termpdf.py model (23c621b)
  • reader: text-relative graphical math with book-wide size unification (#3) (ee61523)
  • reader: toggleable table wrap + zebra-striped rows (98d2dd5)
  • reader: translate looked-up words in the K panel (ee085ba)
  • reader: two-page reflow flows across chapters (fills both columns) (8edc00c)
  • reader: two-page spread for PDF (facing pages) (ba0736f)
  • reader: typeset more equations and refine equation/caption layout (#6) (3a62c10)
  • reader: unified jump-by-type navigation (Phase 2) (0dca14e)
  • reader: unify edge padding across modes; drop Fill; configurable two-page gap (8739d14)
  • reader: vim-style visual text selection (9a1c2bb)
  • reader: word lookup (K) — dictionary + Wikipedia popup (70fa5ee)
  • render: definition lists (dt/dd) — no more run-on glossaries (89575c5)
  • render: depth for heading-based ToCs (e.g. Packt) (fd75da4)
  • render: wrap table cells by default + shared wrap_text primitive (4919c70)
  • settings: expose PDF margin trim toggle (Settings → Content → PDF) (b46c48c)
  • settings: group options into scrollable tabs (67aed99)
  • status: [status] config block — per-zone segment order, separator, clock (595bce6)
  • status: unified segment-based status bar (1942b71)
  • theme: code-block surface panel + themed callout glyphs (5a71447)
  • theme: drop illegible user themes at load (contrast gate) (d79892e)
  • theme: semantic Role system (style/color resolution) (a2ac5c0)
  • theme: user-configurable themes via a runtime registry (048945d)
  • ui: add shared TextInput widget (char-cursor single-line editor) (a999317)
  • ui: describe and search settings, and move prompts into modals (#15) (54dd9bc)
  • ui: responsive panes everywhere (reader, library, image viewer) (31ed930)
  • view: round the remaining selection highlights (8da7c1f)
  • view: rounded selection highlights everywhere (3eca535)

Bug Fixes

  • bookmarks: gutter gap, flag icon, guaranteed margin (9ed9b4b)
  • dedup: allow D/R from the sidebar in the Duplicates view (2646c00)
  • dedup: drop high-frequency TOC labels (publisher boilerplate) (8ebc07e)
  • dedup: gate cover-scan links on title agreement; add dev docs (76330f0)
  • dedup: keep the directory, trim the long filename in the path column (b656804)
  • dedup: make the resolver footer fit so "open location" is visible (c686592)
  • dedup: require the TOCs to genuinely coincide (overlap 0.6→0.85) (52f93dd)
  • epub: honor CSS display:block so citation lines don't run together (#18) (9b81af4)
  • epub: render SVG-wrapped covers (<svg><image xlink:href>) (79edea3)
  • eqn: disambiguate and space the Unicode math floor (#8) (5052d0a)
  • format: bound recursion depth in MathML, EPUB nav, and PDF outline (ccb7ad2)
  • html: bound DOM-walk recursion depth to prevent stack-overflow DoS (bc0b40e)
  • html: honour XHTML self-closing tags + detect <br>-delimited code (0f2d5f3)
  • image-viewer: chapter label, faithful colours, jump to figure; responsive panes (8b1d67b)
  • image-viewer: exclude equation images; scale + center the figure (ff41048)
  • images: caption-based figure/equation classification + live sizing refresh (b99b928)
  • images: figures blank after jumping from the image viewer (3486588)
  • images: free the image viewer's terminal images to stop the leak (54ffbc3)
  • images: invert transparent colour charts so dark axes stay visible (a9ea823)
  • images: keep inline figures visible while scrolling; protect them from eviction (8818b2f)
  • images: make Kitty image-id namespaces disjoint (a1be6ca)
  • images: stop neighbour prefetch from evicting the current section's figures (4454e68)
  • input: search prompt captures keys before global shortcuts (55e20ec)
  • invert light screenshots + render UI icons as glyphs (fa12968)
  • layout: align table columns (collapse cell newlines) + fair widths (e9ca724)
  • layout: centre figure captions under the image (cee7ae1)
  • layout: join adjacent spans without inserting spaces (01b339d)
  • layout: measure display width in cells, not chars (CJK/wide/combining) (27c4df5)
  • library: bound cover cache (no blank wall) + coverless placeholder (60b164d)
  • library: bound cover-wall thumbnails on a uniform panel (not crop) (88d2549)
  • library: cumulative column fit so hiding others reveals a wide column (eef9000)
  • library: fill cover-wall cells (crop) so thumbnails are uniform (0a9f225)
  • library: full mouse support + visible multi-selection (2892a52)
  • library: render PDF covers (first page) so they show in grid/wall (211dd2d)
  • library: responsive book list columns + grid cover sizing (5ce3cb2)
  • library: scroll-into-view + per-pane wheel (ba6fbba)
  • library: sidebar wheel steps one section per notch (d5339ac)
  • math: draw an underlined vector as a rule, not a subscript (#19) (40202b6)
  • math: render display-math as the equation image, not approximated text (d0df511)
  • math: robust super/subscripts + MathML→Unicode directly (47862be)
  • math: use the publisher raster for MathML-only equations (#4) (37ff606)
  • media: equation legibility + precise overlay/image occlusion (d7a1a34)
  • media: key equation detection on transparency, not sparsity (7391359)
  • media: make image invert adapt to the theme's page colour (18dff59)
  • media: real rainbow cause — theme_invert used HSL saturation near white (d89beba)
  • media: recolour math/line-art images to the theme (no more black-on-black) (7a8f21e)
  • media: snap near-white halo to paper in invert (kill JPEG speckle) (d175d76)
  • mobi: robustness fixes from the comprehensive audit (eca86b9)
  • parse: drop hard-coded ordinals in ordered lists (no double numbers) (228b1fc)
  • parser: also merge caption for <div class="imagewrap"> figure wrappers (044db70)
  • parser: merge figure caption into the image so it centres beneath it (5500992)
  • pdf: half the edge margin, not zero (02d4fd6)
  • pdf: keep a small gutter between spread pages (like EPUB) (a95245f)
  • pdf: re-transmit pages when the theme/image mode changes (6c1d183)
  • pdf: render PDF pages correctly on iTerm2 (#17) (8e391b3)
  • pdf: x halves the page's own margin (not tight crop / not EPUB edge) (7e75962)
  • reader: anchor reserves the stable estimate too (consistent with following) (1802a93)
  • reader: badge only figures the image viewer can open (#13) (4e883a6)
  • reader: clip inline images across continuous boundaries instead of vanishing (#21) (c2d70d9)
  • reader: correct page swap + direction-aware prefetch (PDF) (19c3b64)
  • reader: default PDF transmit back to inline (Ghostty blanked on t=t) (94d5fbc)
  • reader: don't crash crossing a section boundary upward (#12) (94e4f46)
  • reader: don't paint inline images over an open overlay (017b80e)
  • reader: drain the section loader during rendering (facing page) (2660256)
  • reader: draw the facing page in a PDF two-page spread (7b69943)
  • reader: equation sizing + two-page image eviction (20c550f)
  • reader: footnote-section nesting, quote color, open links in browser (d49ee1d)
  • reader: heading-aware TOC navigation, status bar, and format label (#14) (5cc3524)
  • reader: link cursor treats a whole multi-word link as one stop (d49381d)
  • reader: page-flip navigation for PDF (kill the scroll-blank flash) (2df4e4a)
  • reader: presets no longer change the page layout (ae81000)
  • reader: re-wrap when a built image's true height differs from the estimate (96ad1c8)
  • reader: render lone figure images as block figures, not inline thumbnails (#11) (fcc039f)
  • reader: repaint cleanly when a chrome toggle resizes the text area (#14) (b9d3f47)
  • reader: size following continuous sections on demand (no lag/stale wrap) (7aab199)
  • reader: stable up-front image reservation — no re-wrap, no scroll jump (22c4013)
  • reader: stop delryn burning CPU and holding a book's memory after close (#18) (afda302)
  • reader: strip regenerated markers + file-aware cross-ref jumps (f575be8)
  • reader: throttle PDF flips to the display so holding j/k can't skip (66d6adc)
  • reader: TOC click moves the highlight on the first click (478a88b)
  • reader: two-page PDF spread flips a whole leaf (no overlap) (2e2fb9f)
  • reader: two-stage cursor mode + fix two-page annotation anchoring (74f576d)
  • reader: unique placement id per PDF page (left page was blank) (1a6ebe1)
  • render: no link underline + compact ToC / definition lists (515d37a)
  • render: one-line footnotes + indent/clean printed ToC (76d7197)
  • theme: detect the real terminal background for the 'terminal' theme (e2a6368)
  • theme: legible muted for the terminal theme (8e458b4)
  • theme: make the terminal theme adaptive and rename it to "auto" (302e53c)
  • theme: never let a book override the global theme (de1ca82)

Performance Improvements

  • epub: hoist content-metadata regexes to LazyLock statics (2370e3a)
  • library: run folder scans off the UI thread (6aabfca)
  • math: sort the LaTeX symbol table once (LazyLock) (ec5d9a4)
  • reader: async PDF page loads so fast j/k scrolls smoothly (137c2bb)
  • reader: faster + correct direct-Kitty PDF rendering (3248626)
  • reader: keep spread pages warm + visible during scroll (2d8fd21)
  • reader: make the PDF spread's facing page first-class (no lag/flicker) (c445d6f)
  • reader: pre-upload look-ahead PDF pages (kill the scroll flash) (3085270)
  • reader: temp-file PDF transmit, now with the name Ghostty requires (e139620)
  • reader: transmit pages to the terminal ahead of display (5738b05)
  • reader: transmit PDF pages via temp file, not 2.5MB of base64 (fe44c3a)
  • reader: transmit-once page deck — fast continuous scroll (fb0d26f)