Skip to content

Releases: utyagi24/klarpdf

v0.19.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 18:26
Immutable release. Only release title and notes can be modified.
132865b

What's Changed

  • chore: the PR test summary says which suite it is reporting by @utyagi24 in #316
  • M131: the release ships the bundle it is named after by @utyagi24 in #317
  • docs: the MCP bridge serves any client, on any OS — say so where people read it by @utyagi24 in #318
  • M132: the bridge installs on the Python people have, and the README says how by @utyagi24 in #320
  • plan: how the bridge gets installed (M133–M136) by @utyagi24 in #321
  • M133: packaging/ says which product each file builds by @utyagi24 in #322
  • deps: pypdf → 6.17.0 (three parse-DoS CVEs) + M137: the dev lock is compiled off Windows by @utyagi24 in #324
  • M134: the wheel installs one top-level name, not four by @utyagi24 in #323
  • M135: one distribution on PyPI, pinned like the application it is by @utyagi24 in #325
  • docs: the readme ships inside the wheel, so write it for the package by @utyagi24 in #326
  • docs: lead the page with the install, not with twenty lines of prose by @utyagi24 in #327
  • M136: install.py — needs nothing but a Python by @utyagi24 in #328
  • v0.19.0 — the bridge you can actually install by @utyagi24 in #329

Full Changelog: v0.18.0...v0.19.0

v0.18.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 11:21
Immutable release. Only release title and notes can be modified.
5cfe2ef

What's Changed

  • plan: revise the MCP / Agent Bridge roadmap after a premise review by @utyagi24 in #238
  • M38.5: retry the save path's os.replace through a transient lock by @utyagi24 in #239
  • Keep a document's structure when a save moves no pages by @utyagi24 in #253
  • Fix whole-word search dropping matches next to punctuation by @utyagi24 in #247
  • Count a wrapped match as one occurrence, not one per line by @utyagi24 in #249
  • Centre a revealed search hit instead of parking it at the window edge by @utyagi24 in #251
  • Centre the marked thumbnail in the Pages sidebar too by @utyagi24 in #252
  • Fix three defects found by hands-on testing with a real client by @utyagi24 in #246
  • M39 ⭐: MCP scaffold + read-only core by @utyagi24 in #240
  • M40: transform tools by @utyagi24 in #241
  • M41: redaction + encrypted input by @utyagi24 in #242
  • M42: MCP dependency lock + packaging by @utyagi24 in #243
  • M43: hardening + docs by @utyagi24 in #244
  • docs: the M44 verification runbook (RELEASE.md §4) by @utyagi24 in #245
  • Verify redact_text covered the query, not just the boxes it chose by @utyagi24 in #248
  • Return one search hit per occurrence, with a box per line by @utyagi24 in #250
  • M94: the bridge says what it knows (TC-002 open items) by @utyagi24 in #254
  • M95: a redaction check that can fail when the matcher is wrong by @utyagi24 in #255
  • M96: a neighbouring line no longer vetoes a whole-word match by @utyagi24 in #256
  • M97: a region redaction may cover more than one line by @utyagi24 in #257
  • M98: report separator variants and over-redaction by @utyagi24 in #258
  • plan: schedule M99–M101 (region clip, multi-query, annotation round trip) by @utyagi24 in #259
  • M102: the redaction safety net crashed instead of firing by @utyagi24 in #261
  • M100: one redaction call, several queries by @utyagi24 in #262
  • M99: a region clip on render_page and export_images by @utyagi24 in #260
  • M104: the export naming scheme argued with its own feature by @utyagi24 in #264
  • M103: what the reply says about what it never looked at by @utyagi24 in #263
  • docs: carry open follow-ups, plan M105 + M106, and the rule that made them necessary by @utyagi24 in #265
  • M106: an unknown parameter is an error, not a silent no-op by @utyagi24 in #266
  • M105: fit the descriptions to the transport, publish the rest as a resource by @utyagi24 in #267
  • M107: disclose a redaction that landed inside a longer word by @utyagi24 in #268
  • M108: the residual counts said spellings and meant places by @utyagi24 in #269
  • M109: a redaction that re-encodes an image says so by @utyagi24 in #270
  • plan: re-scope M101 — annotation is a capability, not a redaction pre-step by @utyagi24 in #271
  • plan: schedule M110 + M111 — the save cost regression and the export drift by @utyagi24 in #273
  • M110: the save's cleanup level follows the route, not the file by @utyagi24 in #275
  • M111: Reduced-Size PDF stops returning a file bigger than a plain Save (stacked on #275) by @utyagi24 in #276
  • plan: M114 (a mark on one page rewrites all 572), the WSL monitor finding, and the declined Reduce-dpi item by @utyagi24 in #278
  • plan: correct the M114 entry, and record that one core has two consumers by @utyagi24 in #279
  • plan: M114 — say what the metadata obstacle actually is, in plain terms by @utyagi24 in #280
  • M115: the core's PDF engine is declared once, not once per surface by @utyagi24 in #281
  • M114: a mark on one page no longer rewrites all 572 by @utyagi24 in #282
  • plan: record M101's hold, and the two follow-ups that were only half-written down by @utyagi24 in #283
  • M115.1: run the bridge against its own lock by @utyagi24 in #285
  • docs: M115.1 is enforced — record it, and how to check it stayed that way by @utyagi24 in #286
  • docs: reproducible defects go to GitHub Issues, undecided ones stay in PROGRESS by @utyagi24 in #289
  • M116: adding a highlight appends 1,865 bytes instead of rewriting 8.8 MB by @utyagi24 in #287
  • docs: M116's follow-up is worse than its entry said — scope it properly by @utyagi24 in #290
  • M117: an append writes the mark you added, not the two hundred already there by @utyagi24 in #293
  • docs: record the MCP no-socket test gap on native Windows by @utyagi24 in #295
  • M101: annotation as a capability — annotate + get_annotations by @utyagi24 in #272
  • plan: schedule M112 + M113 — the M101 annotation follow-ups (stacked on #272) by @utyagi24 in #274
  • M113: the nine things TC-012 and TC-013 found in M101 by @utyagi24 in #296
  • M118: the boundaries M113 stopped one step short of by @utyagi24 in #297
  • M120: a shape stops resizing itself on every save by @utyagi24 in #299
  • M119: a directory handed to a bridge tool says so on Windows too by @utyagi24 in #298
  • M121: Insert Blank Page leaves you looking at the page you made by @utyagi24 in #300
  • M122: the no-socket guard stops catching asyncio instead of us by @utyagi24 in #302
  • M123: run the Windows half of the suite + pin the skip set on both platforms by @utyagi24 in #303
  • M124: a sandbox refusal is not a failure to open a file by @utyagi24 in #305
  • M125: a skip says its own name and its own reason by @utyagi24 in #306
  • M126: the release check that was written down but never run by @utyagi24 in #307
  • docs: a Windows session can pick up M44 without reconstructing it by @utyagi24 in #308
  • docs: three corrections the first Windows run of the M44 runbook found by @utyagi24 in #309
  • M127: the bundle could not be built on the platform that ships it by @utyagi24 in #310
  • M128: the bundle declared a Python requirement no Python could satisfy by @utyagi24 in #312
  • M129: the bundle ships the lock it installs from by @utyagi24 in #313
  • M130: a test that could not be run in the environment it was written for by @utyagi24 in #314
  • release: v0.18.0 — the MCP / Agent Bridge by @utyagi24 in #315

Full Changelog: v0.17.1...v0.18.0

v0.17.1

Choose a tag to compare

@github-actions github-actions released this 11 Aug 17:36
Immutable release. Only release title and notes can be modified.
dd2b830

What's Changed

  • M92.6 — the Pages sidebar rolls continuously under the wheel by @utyagi24 in #233
  • Bump pypdf 6.14.2 → 6.15.0 — clears two Moderate parse-DoS advisories by @utyagi24 in #235
  • docs: reconcile the Dependabot policy with the actual repo settings by @utyagi24 in #236
  • Release v0.17.1 — pypdf security patch + the Pages sidebar fix by @utyagi24 in #237

Full Changelog: v0.17.0...v0.17.1

v0.17.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 02:24
Immutable release. Only release title and notes can be modified.
3dacf6a

What's Changed

  • M80: Ctrl+wheel zoom, anchored on the pointer by @utyagi24 in #197
  • plan: M81–M88 — reading input, render performance, DPI correctness, notes, and four interop bugs by @utyagi24 in #198
  • plan: renumber post-R6 milestones into implementation order by @utyagi24 in #199
  • M81: notes on text markup — the model, the round-trip, and the data loss it cures by @utyagi24 in #200
  • M82: foreign text markup is not a drag target, and stops stealing the press by @utyagi24 in #201
  • M83: the annotations tuple is heterogeneous — give geometry one answer by @utyagi24 in #202
  • M84: highlights multiply instead of alpha-blending by @utyagi24 in #203
  • M85: the current page is the one you can see most of, not the one under a point by @utyagi24 in #204
  • M89.4 + two open-path bugs the same testing pass turned up by @utyagi24 in #206
  • M86: one geometry change should cost one rasterise by @utyagi24 in #205
  • plan: measure M87's premises before building it by @utyagi24 in #207
  • M87.2: bound the render cache by bytes, not by page count by @utyagi24 in #208
  • M87.1: buy the prefetch band with bytes, not with a page count by @utyagi24 in #209
  • M87.3: a render pass costs the band, not the document by @utyagi24 in #210
  • M88.1-.4: 100% means physical size, and pixels are the screen's own by @utyagi24 in #211
  • M88.6: the zoom range becomes 25%-500% by @utyagi24 in #212
  • M88.5: closed as no work required (owner call), completing M88 by @utyagi24 in #213
  • M89.1-.3: Home/End, Space paging, and Shift+wheel horizontal pan by @utyagi24 in #214
  • M89.6: Ctrl+A selects the whole document, and the repaint rework it needs by @utyagi24 in #216
  • M89.5: closed unmerged - the pinch handler is unreachable on Windows by @utyagi24 in #218
  • M90: Notes — the interface (M90.1–.4) by @utyagi24 in #219
  • M91 plan: whitespace fidelity, glyph legibility, reading position by @utyagi24 in #221
  • M91.3: a page counter on the reading bar by @utyagi24 in #224
  • M91.1: a text box paints its leading spaces by @utyagi24 in #222
  • M91.2: Rotate stops reading as Undo by @utyagi24 in #223
  • M91.4: the reading keys stop being eaten - a coasting wheel, the sidebar, and the page counter by @utyagi24 in #225
  • M92 plan: mouse-wheel scroll step, measured on the owner's display by @utyagi24 in #226
  • M92.1: a mouse-wheel detent moves a defined distance by @utyagi24 in #227
  • M92.2: a wheel detent is eased, not teleported by @utyagi24 in #228
  • M92.3: bound the coast-mute, so the wheel can never be dead for long by @utyagi24 in #229
  • M92.4: take prefetch off the scroll's critical path by @utyagi24 in #230
  • M92.5: let the glide land on page 1 instead of restarting into it by @utyagi24 in #231
  • Release v0.17.0 — scrolling that behaves by @utyagi24 in #232

Full Changelog: v0.16.2...v0.17.0

v0.16.2

Choose a tag to compare

@github-actions github-actions released this 25 Jul 05:46
Immutable release. Only release title and notes can be modified.
40c01bf

What's Changed

  • Reading bar: follow Preview — drop undo/redo, keep a single rotate button by @utyagi24 in #194
  • Release v0.16.2 — reading-bar legibility (drop undo/redo + single rotate) by @utyagi24 in #195
  • Regenerate README screenshots for the v0.16.2 reading bar by @utyagi24 in #196

Full Changelog: v0.16.1...v0.16.2

v0.16.1

Choose a tag to compare

@github-actions github-actions released this 25 Jul 03:16
Immutable release. Only release title and notes can be modified.
e19de5c

KlarPDF v0.16.1 "Simplify & Read" delivers the R6 UI tranche — the Preview-inspired simplification built on one idea: the app at rest is a viewer; the markup kit is chrome you summon on demand.

This release supersedes v0.16.0, which was tagged but never published: a pre-release audit caught the pypdf advisories below, so R6 ships here as v0.16.1 with the fix included. Changes are shown against the last published release, v0.15.0.

Highlights

  • Two-tier toolbar — a calm reading bar at rest; a Markup toggle summons the full markup kit (its visibility is remembered app-wide).
  • View modesFull Screen (F11), Slideshow, and a Two-Page facing layout.
  • One gesture-detecting Redact — drag on text for a text redaction, drag elsewhere to rubber-band a block.
  • Sticky markup arming — Highlight / Underline / Strike Out / Pen stay armed to mark passage after passage.
  • Arrowheads are line style — Arrow folds into Line with none/start/end/both ends, plus a dashed stroke.
  • Find barMatch case + Whole words toggles.
  • Annotations sidebar — a tab listing every text mark, click to jump (shown only when the document has marks).
  • Right-click a mark to recolour, or add and remove markup layers in place.
  • Object editingarrow-key nudge, text-box width reflow, and a split Line-Styling / Colors / Opacity style menu.
  • Simplified sidebar (no title bar, optional tabs on demand) and two search fixes (large-document find-as-you-type; search matches the page's printed text only).

Security

  • Bumps pypdf 6.13.3 → 6.14.2, fixing four upstream crafted-PDF denial-of-service advisories (CVE-2026-59935 / 59936 / 59937 / 59938). pypdf is the best-effort fallback engine (PyMuPDF is authoritative and handles text extraction), so exposure was limited and DoS-only.

What's Changed

  • fix(viewer): zoom holds the viewport centre instead of drifting to a corner by @utyagi24 in #158
  • Plan R6 "Simplify & Read" (M71-M79): Preview-inspired UI simplification by @utyagi24 in #157
  • M71: Two-tier toolbar - resting reading bar + summoned markup bar by @utyagi24 in #159
  • M72: One Redact tool - the press point picks the gesture by @utyagi24 in #160
  • M73: Sticky markup arming - HUS + Pen stay armed across gestures by @utyagi24 in #161
  • M74: Arrow ends as line style - Arrow merges into Line, both-ended arrows by @utyagi24 in #162
  • M75: Find bar match options - Match case + Whole words toggles by @utyagi24 in #163
  • M76: Markup context menu - recolour / add / remove layers in place by @utyagi24 in #164
  • M77: Annotations sidebar tab - every mark listed, click to jump by @utyagi24 in #165
  • M78: View modes - Full Screen, Slideshow, Two-Page view by @utyagi24 in #166
  • M76.1: Markup context menu as Preview's swatch rows - one removal path by @utyagi24 in #167
  • M76.2: HUS colours always visible in Markup menu + armed-highlight preview colour by @utyagi24 in #168
  • feat: Dashed stroke style for drawn marks (Width menu -> Line Style) by @utyagi24 in #169
  • M78.1: slideshow steps rows, wheel steps slides, F11 exits full screen by @utyagi24 in #170
  • M75.1: Whole words picks words vs phrase; dead hit verbs disabled by @utyagi24 in #171
  • M63.1: remember a signature's transparency settings per image by @utyagi24 in #172
  • M63.2: name the recent submenu "Recent Signatures / Images" by @utyagi24 in #173
  • M77.1: the Annotations tab lists text markups, not every mark by @utyagi24 in #174
  • M79.1: sidebar without a title bar, Pages by default, tabs on demand by @utyagi24 in #175
  • M71.1: a page-and-pen icon for the Markup toggle by @utyagi24 in #176
  • M79.2: the sidebar's dropped arrow really goes by @utyagi24 in #177
  • M79.3: a new mark offers the Annotations tab, never mounts it by @utyagi24 in #178
  • docs(R6): plan M78.2–M78.6 — arrow-nudge, text-box width, icon polish, HUS swatches, style split by @utyagi24 in #179
  • fix(draw): keep a dashed line's arrowhead solid in the overlay (WYSIWYG) by @utyagi24 in #185
  • feat(M78.2): nudge object selection with arrow keys by @utyagi24 in #180
  • feat(M78.3): resize text-box width with a right-edge handle (reflow) by @utyagi24 in #181
  • feat(M78.4): redraw the Grab / Text Box / Pen markup-bar glyphs by @utyagi24 in #182
  • feat(M78.5): make Markup ▾ three arming swatch rows by @utyagi24 in #183
  • feat(M78.6): split the markup style button into three by @utyagi24 in #184
  • Fix find-as-you-type hanging on a large document (M78.7) by @utyagi24 in #186
  • Annotations rows read back what was highlighted, at one page read each (M78.8) by @utyagi24 in #187
  • Find toolbar button toggles; Tools menu grouped like the markup bar by @utyagi24 in #189
  • Document the search-vs-live-model bugs and the chosen fix (Direction A) by @utyagi24 in #188
  • Search matches the page's printed text only (Direction A) by @utyagi24 in #190
  • Release v0.16.0 "Simplify & Read" (R6, M71–M79) by @utyagi24 in #191
  • Bump pypdf 6.13.3 → 6.14.2 (CVE-2026-59935/36/37/38) by @utyagi24 in #192
  • Release v0.16.1 "Simplify & Read" (R6) — supersedes unpublished v0.16.0 by @utyagi24 in #193

Full Changelog: v0.15.0...v0.16.1

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 22 Jul 07:02
Immutable release. Only release title and notes can be modified.
557936f

What's Changed

  • fix: setuptools 82.0.1 → 83.0.0 in the build lock (PYSEC-2026-3447) by @utyagi24 in #144
  • docs: make the audit a release gate, and PR-merge an explicit step by @utyagi24 in #145
  • M61: unified content-draw engine (stamps, signatures, watermarks) by @utyagi24 in #146
  • M62: stamp, signature & watermark placement UI by @utyagi24 in #147
  • M63: image stamp / signature (white-background removal, recent list) by @utyagi24 in #148
  • M64: search & redact (review panel, case/whole-word, batched) by @utyagi24 in #149
  • M66: foreign-annotation infrastructure + delete by @utyagi24 in #150
  • M67: move foreign marks (appearance preserved verbatim) by @utyagi24 in #151
  • M68: adopt-on-edit (modeled types, precise degrade warning) by @utyagi24 in #152
  • M69: form-field creation (text, checkbox, dropdown) by @utyagi24 in #153
  • M69.1: R4 stamp polish — rotation, object menu, font size, sticky style by @utyagi24 in #154
  • M69.2–M69.3: watermark fixes, then stamp + watermark merged into one feature by @utyagi24 in #155
  • M70: v0.15.0 "Stamp, Sign & Watermark" — version bump + docs by @utyagi24 in #156

Full Changelog: v0.14.0...v0.15.0

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 07:35
Immutable release. Only release title and notes can be modified.
4125306

What's Changed

  • M56: underline & strikeout — the Highlight text-quad path + the Markup ▾ split-button by @utyagi24 in #130
  • M58: pen & shapes tools — draw / move / delete + the Draw ▾ split-button by @utyagi24 in #132
  • M59: copy / paste objects — in-process clipboard + focus-routed Ctrl+C/X/V by @utyagi24 in #133
  • M59.5: markup colour · width · fill — shared style for underline / strikeout + pen & shapes by @utyagi24 in #134
  • M59.6: multi-object selection — Objects mode, marquee + Ctrl-click, group style / move / delete by @utyagi24 in #135
  • M59.7: object resize — selection handles, single + group scaling by @utyagi24 in #136
  • M59.8: object z-order — Bring to Front / Forward · Send Backward / to Back by @utyagi24 in #137
  • M59.9: polish & fidelity — markup palettes, object opacity, layer + scroll fixes by @utyagi24 in #138
  • M59.10: markup merges instead of stacking by @utyagi24 in #139
  • M59.11: preview paint order follows the model's z-order by @utyagi24 in #140
  • M59.12: group copy / cut / paste by @utyagi24 in #141
  • M59.13: one dropdown-arrow position for every menu button by @utyagi24 in #142
  • v0.14.0: version bump + R3 wrap docs by @utyagi24 in #143

Full Changelog: v0.13.0...v0.14.0

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 02:24
Immutable release. Only release title and notes can be modified.
64076ce

What's Changed

  • docs(release): the AppMutex refusal exit code is not stable by @utyagi24 in #105
  • feat(g7): author-email guard, secret ignores, and the decided main ruleset by @utyagi24 in #106
  • fix(ci): a failed PR comment must not fail the pytest check by @utyagi24 in #109
  • feat(g6): donations via GitHub Sponsors + pre-author the G8 ruleset by @utyagi24 in #107
  • feat(brand): themed README hero, real app screenshots, brand badges by @utyagi24 in #108
  • chore(packaging): suffix release artifacts with -x64 by @utyagi24 in #110
  • docs(g8): record the public flip, correct G7's ruleset premise by @utyagi24 in #111
  • docs(g8): close out G8 — social preview verified, repo no longer "private" by @utyagi24 in #112
  • docs(readme): correct the headless test count (376 → 414) by @utyagi24 in #114
  • fix(tests): stop the headless suite hanging on QPrinter without CUPS by @utyagi24 in #113
  • docs(readme): reorganize the home page around a feature inventory by @utyagi24 in #115
  • plan: schedule the GUI feature tranche G1-G5 (M45-M70) from the owner decision by @utyagi24 in #116
  • fix: restore URI links PyMuPDF's insert_pdf silently drops at save by @utyagi24 in #122
  • feat(m45): Outline sidebar + Go to Page (Ctrl+G) by @utyagi24 in #117
  • feat(m49): night reading mode by @utyagi24 in #121
  • feat(r1): the Tools menu — modes out of View, Rotate into Edit by @utyagi24 in #123
  • release: v0.12.0 "Navigate & Polish" (R1, M45–M50) by @utyagi24 in #124

Full Changelog: v0.10.1...v0.12.0

v0.10.1

Choose a tag to compare

@github-actions github-actions released this 10 Jul 07:48
f6309d3

What's Changed

  • docs(release): close the app before uninstalling by @utyagi24 in #101
  • fix(icon): app icon spans its canvas (tile); .pdf gets its own document icon by @utyagi24 in #102
  • feat(installer): refuse to install or uninstall while KlarPDF is running by @utyagi24 in #103
  • release: v0.10.1 — Windows shell-integration patch by @utyagi24 in #104

Full Changelog: v0.10.0...v0.10.1