Release notes
A summary per version, taken from the project changelog. Its own rule applies here too: dates are the day a change was verified on a working installation, and every entry was tested — not just written.
| Version | Date | Headline |
|---|---|---|
| 1.7.0 final build | 2026-10-11 | Rebuilt after full review: new icon and palette, 12 security findings closed |
| 1.7.0 | 2026-10-05 | Print, cached previews, navigation state, real icon and launcher |
| 1.6.0 | 2026-10-04 | PDF to Excel, image tools, target-size compression, local assistant, multi-user |
| 1.5.0 | 2026-10-04 | Form editing and OCR fidelity — the page must not change |
| 1.4.0 | 2026-10-04 | Full-text search across the library |
| 1.3.0 | 2026-10-03 | Document comparison and batch processing with a working Stop |
| 1.2.0 | 2026-10-03 | 16 new security, finishing and page tools |
| 1.1.0 | 2026-10-03 | Health check, logging, installer, portable package, product renamed |
| 1.0.0 | “earlier” — no date recorded | English OCR, desktop shell, first 13 tools |
1.7.0 final build — 2026-10-11
- Rebuilt after a full review; the suite re-run before and after, totals unmoved: 39 suites / 1,101 checks / 0 failures.
- New icon — red tile (#FF0000 → #CC0000), white IP monogram, folded page corner — drawn by one script into both
IrfanPDF.icoand the favicon; the same geometry went into the sidebar logo. - Interface colours tuned for contrast: brand red #CC0000 (5.88:1 where pure red fails at 4.0:1), black primary buttons, dark-mode links at #FF6B6B.
- Eight security findings fixed: DNS-rebinding Host check, UNC export targets refused, editor save no longer reads arbitrary paths, autosave ids validated, activity-log 401, first administrator from this computer, no raw exception text to the client, plus
nosniff/SAMEORIGIN/no-referrerheaders. - Four more: PBKDF2-HMAC-SHA256 raised to 600,000 iterations, sign-in rate limited (5 failures / 5 min → 429), cross-site writes refused (foreign Origin 403,
text/plain415), and a 512 MB request ceiling. - An earlier claim corrected: the runtime does not carry two copies of OpenCV — overhead measured at 0.6 MB — and the “100 MB wasted” finding is retracted.
1.7.0 — 2026-10-05
- Folder open cost: previews cached on disk (keyed on size + mtime), small JPEGs, two renders at once, lazy loading, 120-row paging — ~78 s of CPU → 0.08 s.
- Back keeps your place: central state store and navigation history, Back button and Alt+Left; folder, selection, tool options and editor page/zoom survive.
- A real
IrfanPDF.ico(three places referenced one that never existed) and a realIrfanPDF.exelauncher — single-instance, icon embedded, findable in Windows Search. - Print: page ranges (
1,3,5,3-5,odd,even,first,last), N-up 2/4/6/8/9, a 200-DPI print view at true paper size, Windows hand-over that never claims a sheet printed. - Deleted documents forget every cascaded output in the text index; the dead Health-check Start Menu shortcut was repaired (its script had never been installed).
- Editor zoom became three real modes (Whole page / Fill width / Actual size); results gained Show in folder, Open output folder and retry of just a batch’s failures.
1.6.0 — 2026-10-04
- PDF to Excel: .xlsx written from scratch, validated structurally and opened in real Excel — 21000 reads back as a number,
C2 + C3computes to 24500. - Image to Text (OCR → editable text → .txt) and Extract Images (embedded objects, each re-opened and checked against its declared pixel dimensions).
- Compress to a size you name — up to 7 validated passes, an already-small file copied byte for byte, an honest warning when the target cannot be reached safely; plus the Image Compressor and an Image Quality Enhancer that states it is not an AI upscaler.
- PDF AI Assistant: local text analysis quoting your document verbatim — no API key, no URL, no network call, enforced by a test.
- Optional multi-user: sign-in starts off; an administrator can add people and limit which tools each may use, with salted PBKDF2 hashes and a uniform error message.
_IPDFoutput naming, andvalidate_pdf()run before any tool reports success.
1.5.0 — 2026-10-04
- Editing a form no longer eats the form: redaction constants read by name, cover boxes fitted to the ink they hide, and a silently dropped save payload kept — each gated by a test.
- OCR view fidelity: words placed one by one at their own box, size and colour; table words written back in reading order instead of being dropped.
- The freshness gate now compares letters for wording and digits for numeric content, so re-segmenting a table cell cannot look like lost data.
- Status line: 23 suites / 476 checks, overall PASS, plus the 20-check self-test from a portable package in a folder with a space in its path (PASS 20 FAIL 0).
1.4.0 — 2026-10-04
- Search that reads your documents: names + text, AND matching, a snippet and an IN TEXT badge; one click switches between names-only, text-only and both.
- A scan becomes searchable the moment it is made editable — a test finds a picture-only PDF absent and its OCR’d copy present.
- The index rebuilds on upload, after OCR and after an edited save; deleting forgets the words; Repair clears stale entries; per-file text capped at 400,000 characters.
- Fixes: routes swallowed by a wildcard answered 404, Repair reported failure while doing the right thing, and the status counted non-PDF files as missing.
- Health check grew to 20 checks;
_test_text_searchadded with 38 checks.
1.3.0 — 2026-10-03
- Compare documents: one self-contained HTML report with a word-level text diff and a page-by-page pixel comparison, both measured from the files, working offline as a single file.
- Batch processing of up to 200 documents with per-file outcomes and a CSV report; one damaged or password-protected file fails alone while the rest save.
- A Stop that works: a batch stops between documents, a stopped job reports
cancelled, neverdone, and the results already finished are kept. - Fixes found while testing: the Stop button never sent its request, a stopped job left a dead screen, a cancelled batch lost its results.
1.2.0 — 2026-10-03
- 16 new tools: Protect with password (real AES-256), Remove password, permanent Redact, Watermark, page numbers, Extract text, Document details, Flatten, Greyscale, Repair, and six page tools (duplicate, insert, reorder, crop, resize, remove blank).
- Password-protected PDFs became usable: a LOCKED badge explains the blank preview, other features refuse them with a message naming the fix, Remove password produces a working copy.
- Fixes: text page ranges were off by one, blank detection could delete a sparse real page, inserting at the front did nothing, an all-blank document crashed, invalid filenames broke uploads.
- Status line: 18 suites / 323 checks plus a 19-check self-test; the desktop window’s Save dialog — the one thing no script can check — was verified by hand.
1.1.0 — 2026-10-03
- Downloads in the desktop window were silently cancelled — fixed (WebView2 downloads enabled), verified by hand.
- Fixes: PDF to Word crashed on every multi-page scan, table cells fused into one line, a registry read error could orphan every file on disk, two suites could never fail.
- Health check / self-test added (Run full test, Quick test, Repair, Export diagnostic report), plus rotating logging to
data\logs\irfan-pdf.log(5 × 2 MB) where nothing logs document content. - The portable package and the first Windows installer arrived: shortcuts, .pdf association, Open with verb, uninstall entry, no admin rights.
- Renamed to Irfan PDF; paths derive from the application folder (never a user profile), with
IRFAN_PDF_HOMEto relocate data. - Known limitations published: encrypted PDFs refused (opening with a password is not implemented), no single-file EXE, some table regions not yet editable, no AI features.
1.0.0 — earlier (no date recorded)
- OCR with the official English PP-OCRv5 model, keeping inter-word spacing.
- Orientation auto-fix for sideways and upside-down scans.
- Per-word background covers (no grey boxes), font-size caps, single-shade editor rendering.
- Save / Save As with overwrite protection; 13 PDF/OCR tools; the desktop shell.
- A 14-suite regression run.
No release date for 1.0.0
After the last release: the regression gate
The full gate (py -3.12 tests\run_regression.py) was run on 2026-10-17 against the source tree, with the application started on 127.0.0.1:8765 exactly as the runner starts it. After the Stop fix described below, the re-run returned 43 of 43 suites passing — including test_e2e (37/37), test_document_integrity (52/52), test_package (52/52), test_batch_compare (46/46) and _test_deskew (16/16).
What this gate caught on 2026-10-17 — recorded, not hidden
The first run of the gate that day was 42 of 43: test_batch_compare finished at 43 of 46 checks, all three failures being one scenario — a 4-page OCR job submitted and cancelled 0.2 s later.
- What the application did: accepted the stop —
ok: true, “Stopping after the current step” — and then ran the OCR to completion anyway and wrote its result file. A single-document job ignored the stop. - Why it looked like a timing flake: the same suite passed 46/46 on 2026-10-14 with “cancelled after 99%”, on the same machine and the same code. The outcome tracked how fast the OCR finished relative to the test’s 0.2 s window.
- Why that was not accepted as “just timing”: a stop the application acknowledges and then ignores is a defect, not a test artifact — on a slow machine the user would wait for a cancelled-looking job to finish anyway.
The fix, its measurements and the re-run are in the next note. After the fix the same command returned 43 / 43 suites PASS with 0 failures, test_batch_compare among them at 46/46.
Fixed after 1.7.0 — Stop now reaches a running job (source, 2026-10-17)
While documenting the failure above, the cause was fixed in the application source rather than left as a footnote. Two changes, both verified against a running app:
- Stop is honoured between OCR pages.
scanned_pdf_to_editable()now polls a stop flag at every page boundary and raises the job worker’s ownJobCancelled, and the single-file OCR handler passes it. A stopped multi-page OCR ends ascancelledwith no result file — measured at 95% progress on a 12-page document. - The Analyst’s Stop was silently dead. Its handler passed the job’s
cancelledproperty where the analyser polls a callable (callable(should_cancel) and should_cancel()), so a long analysis could never be stopped. A callable is passed now, which restores what that screen already offers. - The gate check itself was made honest: its cancel fixture was a 4-page OCR that could finish inside the 0.2 s cancel window, so it was testing timing rather than behaviour. It now uses a 12-page document; the three assertions are unchanged and pass (46/46).
Where the fix can be got: all three packages were rebuilt on 2026-10-22 and carry it — the installer was re-run into a clean folder and self-tested (PASS 20 / FAIL 0), and a stop issued mid-document on a 12-page scan ended the job as cancelled with no output file (measured at 5% on the installed copy and on the extracted Professional package; the earlier 2026-10-17 builds measured the same behaviour at 12% and 95%). The entry is also recorded in the project’s CHANGELOG.md under the entry dated 2026-10-17.
Auto-deskew, stated precisely
server\core\ocr\text_layer.py, with its suite tests\_test_deskew.py beside it. That suite was added to the gate on 2026-10-16 and passes 16/16 on every run since — and the packages on disk were rebuilt on 2026-10-22 from this same source, then installed and self-tested. What is verified: the feature exists in the installed build and is regression-tested. What is not claimed: that any package carries a later date than it actually does.The shipped test report — generated with the release — records 40 suites and 1,093 declared checks on 2026-10-05 (40/40, PASS). The full changelog ships inside every package at Documentation\CHANGELOG.md, and the test suite ships at tests\ so the numbers can be reproduced rather than trusted.
Next: Installation · Download · FAQ