PdfCraft is a free, open-source PDF application designed as an alternative to Adobe Acrobat. Built from scratch in Rust, it combines PDF viewing, document organization, page management, file merging, splitting, and encryption tools in a native desktop application.
Unlike cloud-based PDF services, PdfCraft is designed to process documents locally without requiring an account, telemetry, or cloud processing. It supports Windows, macOS, Linux, and FreeBSD, with a WebAssembly version that runs in a browser.
PdfCraft is particularly interesting for users who want a lightweight, privacy-focused PDF workbench without a subscription. However, it is still an early-stage project, and users who depend on advanced PDF editing, digital signatures, or OCR should consider its current limitations before adopting it.
Features
PDF Viewing and Search
PdfCraft provides a document viewer with text selection, page navigation, and search-as-you-type functionality. Its text selection follows the document's reading order, making it easier to select and copy content from complex layouts.
The renderer is designed to handle international text, vertical Japanese writing, color emoji, and transparency. The application also includes a dark theme and two-page reading mode for a more comfortable reading experience.
A command palette provides quick access to tools and commands, reducing the need to navigate through multiple menus.
Organize and Rearrange Pages
PdfCraft includes a visual page organizer that makes managing PDF documents straightforward. Users can rotate, delete, insert, and reorder pages, with undo support for reversing changes.
These tools are useful for rearranging reports, removing unwanted pages, correcting scanned documents, and assembling documents in the desired order.
The application also supports incremental editing and atomic saves, alongside autosave and crash recovery features designed to reduce the risk of losing work.
Merge, Extract, and Split PDFs
PdfCraft allows users to combine multiple PDF files into a single document, extract selected pages, and split documents into smaller files.
Its document-processing engine aims to preserve important PDF structures during these operations, including links, form fields, layers, and bookmarks.
This makes it useful for administrative work, combining reports, preparing documents for submission, and separating large files into manageable sections.
However, complex documents should be checked after processing to ensure that their formatting and interactive elements remain intact.
PDF Security and Encryption
PdfCraft supports opening encrypted PDF files using older RC4 encryption and modern AES-256 encryption.
It also respects document permissions specified by the author. This is useful when working with protected documents that restrict certain operations.
Encryption support does not mean that PdfCraft provides every security feature available in professional PDF software. Users who require certificate-based digital signatures, advanced redaction, or specialized document-security workflows should verify those capabilities separately.
Forms, Layers, and Document Structure
PdfCraft is designed to preserve PDF features beyond ordinary page content. These include form fields, layers, links, and bookmarks when combining or splitting documents.
This is important because PDF files often contain interactive elements and structural information that can be lost when processed by simpler PDF utilities.
The project emphasizes document integrity, although its developers acknowledge that its rendering quality has not yet been comprehensively compared against Adobe Acrobat.
Command-Line Tools and AI Automation
PdfCraft includes a command-line interface for inspecting documents, extracting text, rendering pages, editing PDF files, combining documents, extracting pages, and splitting files.
For example, you can inspect a PDF's structure in JSON format:
pdfcraft-cli info document.pdf
Extract text from a specific page:
pdfcraft-cli text document.pdf --page 3
Rotate pages, delete a page, and update the document title:
pdfcraft-cli edit input.pdf \
--rotate 1,2:90 \
--delete 5 \
--title "Q3" \
--out output.pdf
These capabilities make PdfCraft useful for batch processing, scripts, and automated document workflows. Its agent-oriented architecture also makes it suitable for integration with compatible AI tools.
Download PdfCraft v0.9.0 - Software Mirrors |
|---|
PdfCraft v0.9.0 for Windowspdfcraft-0.9.0-windows-x86.msi | 66.72 MB pdfcraft-0.9.0-windows-x86-portable.zip | 78.64 MB pdfcraft-0.9.0-windows-x64.msi | 68.66 MB pdfcraft-0.9.0-windows-x64-portable.zip | 82.25 MB pdfcraft-0.9.0-windows-arm64.msi | 64.65 MB pdfcraft-0.9.0-windows-arm64-portable.zip | 78.74 MB |
PdfCraft v0.9.0 for macOSpdfcraft-cli-0.9.0-macos-universal.zip | 58.66 MB pdfcraft-0.9.0-macos-universal.dmg | 90.77 MB |
PdfCraft v0.9.0 for Linuxpdfcraft-cli-0.9.0-linux-x86_64.tar.gz | 29.27 MB pdfcraft-cli-0.9.0-linux-aarch64.tar.gz | 27.82 MB pdfcraft-0.9.0-linux-x86_64.tar.gz | 81.8 MB pdfcraft-0.9.0-linux-x86_64.rpm | 82.43 MB pdfcraft-0.9.0-linux-x86_64.flatpak | 61.94 MB pdfcraft-0.9.0-linux-x86_64.deb | 82.85 MB pdfcraft-0.9.0-linux-x86_64.AppImage.zsync | 273.11 kB pdfcraft-0.9.0-linux-x86_64.AppImage | 77.96 MB pdfcraft-0.9.0-linux-riscv64.tar.gz | 79.54 MB pdfcraft-0.9.0-linux-riscv64.rpm | 80.19 MB pdfcraft-0.9.0-linux-riscv64.deb | 80.43 MB pdfcraft-0.9.0-linux-aarch64.tar.gz | 78.32 MB pdfcraft-0.9.0-linux-aarch64.rpm | 79.61 MB pdfcraft-0.9.0-linux-aarch64.flatpak | 58.27 MB pdfcraft-0.9.0-linux-aarch64.deb | 80.15 MB pdfcraft-0.9.0-linux-aarch64.AppImage.zsync | 261.77 kB pdfcraft-0.9.0-linux-aarch64.AppImage | 74.72 MB |
PdfCraft v0.9.0 for BSDpdfcraft-0.9.0-freebsd-x86_64.tar.gz | 81.23 MB |
Others Download related to PdfCraft v0.9.0pdfcraft-web-0.9.0.zip | 13.78 MB |
PdfCraft v0.9.0 Source Code
PdfCraft v0.9.0 Source code (zip)
PdfCraft v0.9.0 Source code (tar.gz)
|
PdfCraft v0.9.0 Release Notes: What's Changed- Make a missing external oracle loud instead of a silent pass by @tanish2k09 in #2266
- One way to write a synthetic PDF fixture by @tanish2k09 in #2275
- Measure rendering against Poppler, and turn the pixel test on by @tanish2k09 in #2286
- Say what the render-oracle score does and does not mean by @tanish2k09 in #2290
- Pin that every JBIG2 conformance fixture decodes to the same picture by @tanish2k09 in #2300
- The fonts README still called the standard-14 widths an estimate by @tanish2k09 in #2304
- The text oracle scored us zero for honouring a no-copy document by @tanish2k09 in #2312
- Fix oracle Clippy failure for four-byte pixel chunks by @sanyamsingh001 in #2342
- Preserve precision when writing page transforms by @sanyamsingh001 in #946
- Printing: a layer that is off in the document stays off on the sheets by @Byxis in #1135
- Clear image leftovers by @not-a-feature in #1151
- Tests: use 300 DPI synthetic scan for OCR searchability by @earlvanze in #1197
- M8: Bound and reuse repeated redaction overlays by @LabDennis in #1426
- M4: keep the last saved revision across undo (#1310, #1311, #1312) by @bartalos86 in #1435
- M5: add comment and reply submission shortcuts by @Luchsen in #1457
- M12: mark leaf tags as artifacts by @earlvanze in #1475
- COS: index cross-reference entries on demand by @cyfung1031 in #1505
- feat(ui): drop files on the Pages panel to insert pages by @tylerstoltz in #1547
- Clamp extracted Indexed image samples to the declared palette range by @FredApps in #1581
- Keep page labels and focused navigation consistent across reloads by @sanyamsingh001 in #1667
- Keep the full final spread reachable with unequal page heights by @FredApps in #1672
- Text selection: dragging to the top or bottom edge of the view scrolls it by @marcoarnulfo in #1675
- Edit text & images: a dragged image's pixels follow its frame instead of waiting for the release by @marcoarnulfo in #1677
- Text selection: a drag after a double- or triple-click extends by whole words or lines by @marcoarnulfo in #1689
- fix(render, ui): form-heavy documents draw and fill fast (spot-colour images, widget placement, Fields panel) by @Piohrun in #1691
- i18n(pt-br): fix 6 Brazilian Portuguese strings by @s17sh70x2jfl031ag in #1694
- Sinhala and Tamil interface: draw with an installed font (part of #1688) by @manchitmr in #1706
- M5: Fill & Sign text reads across on rotated pages by @alexanderalber in #1710
- M14: add Vietnamese interface and date localization by @duydev in #1712
- Edit text: the four-way arrow wherever a drag moves, and a sharp page while editing by @ch0kemeister in #1717
- macOS: the standard About panel shows the website and Discord links (#1287) by @ch0kemeister in #1718
- M6: detect form fields on scanned pages (#1721) by @alexanderalber in #1722
- M2: Make literal text search linear and tolerate missing layout metadata by @LabDennis in #1725
- fix(ui): clicking a theme card in Preferences picks that theme by @umesh429 in #1727
- Issue #1676: put fallback faces on the interface baseline by @mtlcl410 in #1743
- M7: fold repeated image transforms into one cm instead of nesting q by @komo1iddin in #1746
- i18n: Taiwan vocabulary and the missing entries in zh-hant by @mtlcl410 in #1750
- M7: keep the source operators of rows a text edit doesn't reach by @komo1iddin in #1754
- M7: draw new characters with the source font's own embedded program by @komo1iddin in #1760
- Automation: tell a tool name or an unknown id from a command without a tool in command_run by @marcoarnulfo in #1765
- M7: reuse a page's font resource and program when embedding again by @komo1iddin in #1779
- M2: Add word and character counts with optional content exclusions by @LabDennis in #1780
- M7: read the page once per keystroke when measuring a text draft by @komo1iddin in #1781
- M11: merge image fragments, and the Standard and Mobile optimizer presets (closes #1783) by @magdale76 in #1784
- M7: rewrap Chinese and Japanese text between characters by @komo1iddin in #1827
- M7: justify paragraphs whose font shows the space with another code by @komo1iddin in #1832
- Edit image: give each flip button the icon of its own mirror axis by @marcoarnulfo in #1841
- M10: A6 paper in the print dialog and doc_print by @marcoarnulfo in #1849
- M7: Add / Update / Remove menu on Header and footer, Watermark, Background by @Byxis in #1857
- fix(a11y): mark_decorative no longer panics on an unpaired ParentTree key (#1809) by @mtlcl410 in #1862
- M2: a /Rotate that isn't a quarter turn counts as 0, as the page is drawn by @pauliusiv123-rgb in #1863
- fix(cos): a nonpositive crypt-filter /Length no longer overflows (#1816) by @mtlcl410 in #1864
- fix(audit): find rectangle covers closed with h or painted with b/b* (#1817) by @mtlcl410 in #1865
- fix(sign): an unreadable extendedKeyUsage allows no purpose (#1807) by @mtlcl410 in #1866
- audit: harden finding classes with golden tests and docs by @ejbarraza in #1892
- fix(audit): an applied redaction at the end of a line is not a faux redaction by @CouchRiv in #1898
- fix(a11y): bookmarks from structure keep the words of glyph-by-glyph headings by @CouchRiv in #1899
- fix(audit): report faux-redaction rectangles in top-left page points by @CouchRiv in #1900
- fix: render CCITT Group 4 images that declare /Rows 0 by @ehinderer in #1903
- fix(automation): a missing path under --root says where it was looked for (#1890) by @mtlcl410 in #1907
- M3: touchpad swipes glide on after the fingers lift on Wayland (#531) by @mlkonrad in #1909
- fix(redact): the tail of a longer number is not a phone number (#1884) by @mtlcl410 in #1911
- fix(forms): new text and date fields take Acrobat's Auto font size (#1888) by @mtlcl410 in #1912
- feat(ui): a middle click closes a tab (#1853) by @mtlcl410 in #1920
- fix(organize): bound how deep an import follows the object graph (#1800) by @mtlcl410 in #1921
- M2: Bound page-tree traversal memory for repeated children (#1798) by @LabDennis in #1926
- Compare files: side by side, scrolled and zoomed together by @regendorf-ux in #1927
- M11: measure every use of an image drawn through deeply nested forms (#1811) by @mlkonrad in #1933
- fix(edit): flattening keeps a widget it cannot draw and an undrawn reply (#1794) by @mtlcl410 in #1934
- fix(control): a deadline and a cap for connections that have not authenticated (#1806) by @mtlcl410 in #1939
- Issue #305: an update keeps the File Explorer menu choices, and the image menu gets a switch by @jcl-bit in #1941
- fix(sign): a signed revision of a password-protected file opens with the document's key (#1808) by @mtlcl410 in #1945
- feat(organize): Insert pages from file brings the file's bookmarks by @CouchRiv in #1947
- XFA: flatten a form into a plain PDF, or convert it to a static form by @ysrdevs in #1948
- feat(cli): page lists take ranges, and a missing page is named as typed (#1923) by @mtlcl410 in #1950
- M9: signature labels follow the interface language, and one the font can't draw is refused, never written as ? by @kekeandzeyu in #1951
- Keep native open replies queued while dialogs and pickers are active by @sanyamsingh001 in #1953
- M2: bound ASCII85 decoding by the stream's output limit (#1796) by @Ridzzz0Alam in #1954
- M4: write each page label dictionary as an indirect object by @marcoarnulfo in #1959
- M6: auto-size text fields shrink and wrap typed text on screen, as on the page by @dsskaggs-ai in #1964
- Print: print as image (Advanced), with grayscale pictures by @regendorf-ux in #1965
- fix(automation): no top-level oneOf in form_set_props input schema (#1961) by @andreero0 in #1967
- CLI: run --script --report prints one JSON document for the run (#1891) by @vangel76 in #1974
- Issue #1910: Organize opens on the current page by @alehel in #1975
- Signature pad: Undo button and Ctrl/Cmd+Z take back the last stroke (#1963) by @vangel76 in #1978
- View: show page size when hovering the bottom-left of the page view (#1855) by @vangel76 in #1979
- Export to Word: show pictures on positioned pages, bound the pictures (#1936) by @vangel76 in #1981
- M2: keep the raw crop minimum in physical points by @sanyamsingh001 in #1982
- Comments: font size for text boxes in Comment Properties (#1908) by @vangel76 in #1984
- Viewer: a press on a page makes it the current page (#1956) by @vangel76 in #1985
- View: Single Page wheel turns to the next page at the edge of a zoomed-in page (#1924) by @vangel76 in #1986
- Draw: a released pen stroke stays on screen until the page raster has it (#1858) by @vangel76 in #1987
- Forms: simplified field notation written as real JavaScript, not AFMakeNumber(0) by @regendorf-ux in #1995
- Edit: crop an existing page image with its handles by @regendorf-ux in #2002
- Redaction Tool Properties: the mark's appearance, and Make properties default by @regendorf-ux in #2008
- fix(ui): wrap long filenames and metadata in Document Properties (#2011) by @Osaym in #2012
- M2: clip intersection starts its row walk at the first shared row by @cyfung1031 in #2026
- fix(render): a Multiply highlight inside a transparency group keeps the text (#1968) by @mtlcl410 in #2027
- M7: list Edit text & images first under Modify page by @lava in #2028
- Linux/BSD: open files from later launches in the running PdfCraft (#1726) by @tydude001 in #2037
- fix(forms): read each JavaScript name tree node once by @Dev-next-gen in #2040
- Wait for remote-link errors before asserting in UI tests by @sanyamsingh001 in #2041
- M2: heavy-sheet generator and page timing harness (item 8 of storytold/pdfcraft#623) by @cyfung1031 in #2042
- perf(xfa): make som index lookup linear by @osaidahmed in #2047
- i18n(es): translate the new print and Add text strings, Type on the signature pad, tú register by @txiki739 in #2049
- fix(ui): preserve Ctrl+Alt+Q during digital ID creation by @sampaiodias in #2055
- chore(contributors): credit mtlcl410 by display name by @mtlcl410 in #2065
- M4: read page transitions and display times (/Trans, /Dur) into DocInfo by @mtlcl410 in #2074
- M4: set page transitions and display times (/Trans, /Dur) through the engine and the tools by @mtlcl410 in #2083
- M12: the geometry of page transitions (ISO 32000-2 table 164) by @mtlcl410 in #2084
- M3: a document that asks to open in Full Screen mode asks first (/PageMode /FullScreen) by @mtlcl410 in #2086
- chore(packaging): give test-msi.ps1 a UTF-8 BOM so Windows PowerShell 5.1 parses it by @mtlcl410 in #2092
- fix(organize): keep page labels on their pages when pages are deleted by @marcoarnulfo in #2093
- fix(ui): check boxes over text should show the pointing hand, not the I-beam by @alehel in #2099
- M3: preserve coordinate clicks across slow frames by @sanyamsingh001 in #2100
- fix(a11y): mark_decorative finds MCIDs in named property lists (#1813) by @jonathanwxh-cell in #2106
- fix(ui): header, footer and watermark dialogs refuse undrawable text … by @jonathanwxh-cell in #2107
- M7: Hebrew in Add text (#128) by @michaelsh1 in #2109
- fix(sign): a signed page's resources are page content whatever keys a later revision writes (#1787) by @mtlcl410 in #2115
- fix: Space Audit lines up its columns and counts form fonts as fonts by @alehel in #2118
- test(ui): wait for the save to write the file instead of a fixed frame count by @lhymes in #2122
- fix(render): a soft mask fades a gradient fill again by @marcoarnulfo in #2132
- OCR: Downsample to shrinks a page box given in pixels by @marcoarnulfo in #2135
- Fix multi-select choice index ordering by @sanyamsingh001 in #2144
- M3: Improve Back/Forward page navigation (fixes #2080) by @srt8hellcat2-ui in #2151
- fix(fonts): keep a subset Type 0 font for glyphs /W leaves to /DW by @marcoarnulfo in #2153
- M1: every PDF leaves the engine checked, and every writer uses one staging-file writer (#2166) by @mtlcl410 in #2182
- M9: harden .p12 digital IDs (#1847) by @Ridzzz0Alam in #2201
- packaging: RPM requires library sonames, so openSUSE can install it by @tydude001 in #2205
- fix(edit): keep the runs of untouched text between two edits by @marcoarnulfo in #2209
- Forms: fields that share a name take the same value by @marcoarnulfo in #2217
- M3: Save asks before writing over a changed file, one tab per file, locked autosaves (#2166) by @mtlcl410 in #2218
- fix(redact): size image clearing with checked arithmetic (#2177) by @atahabilder1 in #2221
- fix(forms): open a text field on press so dragging over it selects text by @marcoarnulfo in #2226
- fix(test): reload tests pin the English interface like every other harness by @abc2cb in #2239
- M7: the Edit tab turns on Edit text & images, as in Acrobat by @abc2cb in #2241
- fix(edit): keep Edit text & images boxes drawn while page input waits by @abc2cb in #2242
- fix(organize): draw a rotated page large and centred in its grid cell by @abc2cb in #2243
- M4: lay out Organize pages as Acrobat's panel by @abc2cb in #2248
- feat(ui): Shift on a corner handle keeps proportions for comments, stamps, and form fields by @adrianiglesiass in #2252
- Refuse header/footer Bates numbers that would overflow u64 by @Silvertree2010 in #2253
- fix(preflight): read device colour from content operators, not whitespace-split bytes by @guillehr2 in #2260
- docs: catalog hashes in ATTRIBUTION.toml are updated by hand by @vangel76 in #2271
- Tabs: show the drop line in front of the first tab (#2225) by @vangel76 in #2278
- M0: the every-command test never opens a real file dialog by @abszar in #2281
- Export All Images: zero-pad the page number so files sort in page order (#2208) by @snipeTR in #2295
- edit: commit the open paragraph when a click switches text boxes by @midasmatterhorn in #2302
- Read WinAnsi 0xAD as a hyphen, so search and redaction can see it by @tanish2k09 in #2305
- fix(engine): give a host with no clock or time zone a real one (Session::with_wall_clock) by @bonfim6P in #2317
- feat(automation): Automation::render_pixels returns a page as RGBA, without the PNG round trip by @bonfim6P in #2318
- M14: Italian catalog: complete the missing entries by @kcobelli-pixel in #2320
- fix(ui): stop dropping cached tiles when zooming away and back (#2196) by @Hathor875 in #2323
- test(ui): wait for the text layer by state, not for a fixed second (#1277) by @mtlcl410 in #2327
- fix(print): the Print dialog waits for the printer list instead of offering Save as PDF (#160) by @mtlcl410 in #2332
- M3: arrow keys follow the Scroll speed preference (#985) by @mtlcl410 in #2333
- Requeue render requests after parse cancellation by @sanyamsingh001 in #2334
- feat(automation): accessibility_tags lists tags a page at a time, with filters by @CouchRiv in #2335
- feat(automation): bookmarks and links say where on the page they go by @CouchRiv in #2344
- fix(ui): on macOS, dragging a tab moves the tab, not the window by @tisca26 in #2347
- M10.5: convert print previews to grayscale by @earlvanze in #2351
- Preserve literal spaces in page-label prefixes by @sanyamsingh001 in #2355
- crypt: property tests for encrypted content, crypt filters and damaged ciphertext by @amoisttowe1 in #2358
- fix(ui): a shape just drawn resizes from its handles without the Select tool by @cortenburg28-arch in #2362
- fix(cli): render comments the app renders when /AP is missing by @earlvanze in #2382
- Fix util.printd panic on an escaped multi-byte character by @Silvertree2010 in #2386
- Reject impossible dates such as Feb 30 in FormCalc Date2Num and Parse by @Silvertree2010 in #2388
- M5: Make Properties Default in Comment Properties by @DCM4711 in #2031
- M1: keep unknown trailer entries on a full save (#1338) by @bartalos86 in #1431
- Tests: viewer find test waits by a deadline (flaky under load) by @echelon in #779
- Add permission-aware selected-text Copy to Edit and context menus by @FredApps in #1244
- M6: expose dropdown and list-box field alignment (#1208) by @DWAA1660 in #1263
- M14: correct localization and installer parity statuses (gap 24) by @rp6186030 in #1211
- M1: repair exhausted xref hints without object-number overflow (#1337) by @DWAA1660 in #1359
- M10: Windows print jobs show per-sheet progress; printers list faster (follow-up to #944) by @TKIPisalegacycipher in #1236
- Keep selected form values and page content through later edits (#1319, #1305, #1324, #1306) by @bartalos86 in #1452
- M7: keep line breaks when editing a multi-line paragraph (#1443) by @rp6186030 in #1486
- MCP: confine file access with --automation-read-root and --automation-write-root by @isaac-levine in #1448
- fix(macos): Cmd+Q asks about unsaved changes (#1136) by @Mahmud-Baspehlivan in #1533
- M3: scroll the view when drawing at an edge; take back a polygon's last point by @philip-tam in #1549
- M2: preserve inline-image pixels when rewriting page content by @MMexicann in #1562
- Perf: defer marker and link index scans until first use by @cyfung1031 in #1434
- M12: tag unstructured AcroForm widgets by @earlvanze in #1451
- M12: find untagged accessibility content by @earlvanze in #1463
- feat(ui): preference to hide author-only highlight hover previews (#1432) by @Totopo27 in #1466
- Print: 4 x 6 in label paper and a Label layout for shipping labels by @Ace40063 in #1583
- M12: show structure tag content by @earlvanze in #1496
- Keep added text selectable over form fields by @FredApps in #1528
- M7: Cut, Redact, Create Link and Recognize Text in the picture menu; keep the menu open by @philip-tam in #1621
- M6: preserve XFDF field text around XML comments by @storybored379 in #1647
- M14: store XDG preferences in configuration directory (#1395) by @DWAA1660 in #1536
- M7: grow text boxes and edit existing text by @YouseifUS in #1539
- M6: make list boxes directly selectable and scroll to selection (#1524) by @lollinoo in #1543
- Complete the Arabic (العربية) catalog: every missing row translated by @hasan-sdaif in #1559
- M1: edit finds the pages a damaged file's readers find by @marcoarnulfo in #1664
- M14: Fix(nixos): discover installed UI fallback fonts on NixOS by @tomasmark79 in #1553
- M6: preserve carriage returns in form CSV exports by @MMexicann in #1563
- M6: export valid XML tags for Unicode field names by @MMexicann in #1588
- Keep annotations readable under reading colours (#1548) by @edurbs in #1557
- Comments panel: page groups fold from their chevron by @marcoarnulfo in #1614
- M3: Wayland: stop retaining Ctrl zoom for pixel-only wheel input by @tomasmark79 in #1569
- Tests: the signing test's password meets the 8-character minimum (#2417) by @wstock in #2420
- fix(parity): merge the keys concurrent merges left twice in acrobat-features.toml by @mtlcl410 in #2419
- fix(i18n): zh-hant had two keys twice after concurrent merges by @mtlcl410 in #2414
- Tests: repair stale save and search regressions without weakening validation by @FredApps in #2484
- Fix main UI regressions in paging, fonts and test expectations by @FredApps in #2502
- i18n: fill Vietnamese and Lithuanian coverage gaps on main by @FredApps in #2510
- Read the Annex D.2 alias codes as the ink they draw, in both tables by @tanish2k09 in #2656
- Score reading order in the text oracle, which word F1 cannot see by @tanish2k09 in #2680
- Record the day's two changes in the roadmap and gap 12 by @tanish2k09 in #2682
- fix(render): faster sampled functions, image decodes across zoom levels and patch meshes (vendored hayro-interpret patches 31–33) by @Piohrun in #2436
- fix(ui): validated signature display, snapshot tab reuse by @chiranjeevi-max in #1895
- ci: add nix check workflow by @dylanmtaylor in #2727
- test: retain open regressions and deterministic fixtures by @skylartaylor in #2067
- M8: the redaction audit finds a cover over one word of a long line (#2662) by @mtlcl410 in #2698
- Resolve remote links and document-supplied output names safely by @skylartaylor in #3083
- M6: preserve complete plain XML form values by @MMexicann in #2686
- deny: acknowledge the new zbus unmaintained advisories by @skylartaylor in #3091
- M6: preserve whitespace in XML and XFDF attributes by @MMexicann in #1917
- fix(filters): preserve output-limit errors in raw Flate fallback by @MMexicann in #2267
- Read stream-boundary comments as the renderer does, and isolate new marks from appended graphics state by @skylartaylor in #3102
New Contributors- @Luchsen made their first contribution in #1457
- @tylerstoltz made their first contribution in #1547
- @s17sh70x2jfl031ag made their first contribution in #1694
- @manchitmr made their first contribution in #1706
- @alexanderalber made their first contribution in #1710
- @duydev made their first contribution in #1712
- @ehinderer made their first contribution in #1903
- @regendorf-ux made their first contribution in #1927
- @andreero0 made their first contribution in #1967
- @vangel76 made their first contribution in #1974
- @alehel made their first contribution in #1975
- @Osaym made their first contribution in #2012
- @lava made their first contribution in #2028
- @tydude001 made their first contribution in #2037
- @Dev-next-gen made their first contribution in #2040
- @osaidahmed made their first contribution in #2047
- @txiki739 made their first contribution in #2049
- @sampaiodias made their first contribution in #2055
- @jonathanwxh-cell made their first contribution in #2106
- @michaelsh1 made their first contribution in #2109
- @lhymes made their first contribution in #2122
- @atahabilder1 made their first contribution in #2221
- @abc2cb made their first contribution in #2239
- @adrianiglesiass made their first contribution in #2252
- @Silvertree2010 made their first contribution in #2253
- @abszar made their first contribution in #2281
- @midasmatterhorn made their first contribution in #2302
- @bonfim6P made their first contribution in #2317
- @kcobelli-pixel made their first contribution in #2320
- @tisca26 made their first contribution in #2347
- @amoisttowe1 made their first contribution in #2358
- @cortenburg28-arch made their first contribution in #2362
- @DCM4711 made their first contribution in #2031
- @TKIPisalegacycipher made their first contribution in #1236
- @isaac-levine made their first contribution in #1448
- @Ace40063 made their first contribution in #1583
- @hasan-sdaif made their first contribution in #1559
- @tomasmark79 made their first contribution in #1553
Full Changelog: v0.8.0...v0.9.0 |
Performance and Compatibility
PdfCraft is written in Rust, with its PDF parsing, rendering, and editing logic organized into reusable libraries. The graphical interface is built on top of this underlying engine.
The project emphasizes faithful document rendering, reliable file operations, and local processing. Its developers report zero crashes across a test corpus of 983 PDF files, although this result should not be interpreted as a guarantee of compatibility with every PDF document.
Supported platforms include Windows, macOS, Linux, FreeBSD, and modern web browsers through WebAssembly. Available packages include Windows installers and portable archives, a universal macOS disk image, Linux AppImage packages, Debian packages, RPM packages, and other distribution formats.
PdfCraft is still in early development. Its roadmap identifies renderer improvements, stronger compatibility testing, editing existing PDF content, digital signatures, OCR, Office-related workflows, preflight tools, and XFA support as areas for further development.
Consequently, it is best viewed as a promising PDF workbench rather than a complete replacement for every Adobe Acrobat workflow.
System Requirements
Operating systems: Windows, macOS, Linux, and FreeBSD.
Browser support: WebAssembly build for modern browsers.
Windows architectures: x86, x64, and ARM64.
Linux architectures: x86-64 and ARM64.
macOS: Universal build for Intel and Apple silicon.
Build requirements: Rust 1.90 or newer, along with the project's documented development dependencies.
The project does not establish a comprehensive minimum RAM or processor specification in the information reviewed. Basic PDF viewing should be suitable for a broad range of modern computers, but performance will depend on document complexity and system resources.
Pros and Cons
Pros
Free and open-source under permissive licenses.
Native applications for major desktop operating systems.
Local document processing without mandatory accounts or cloud uploads.
PDF viewing with text search and selection.
Page rotation, deletion, insertion, and reordering.
PDF merging, extraction, and splitting.
Support for encrypted PDFs and document permissions.
Designed to preserve links, form fields, layers, and bookmarks.
Autosave, crash recovery, and undo support.
Command-line tools for scripting and batch processing.
WebAssembly version for browser-based use.
Cons
Still in early development, with some features planned rather than implemented.
PDF rendering quality has not yet been comprehensively benchmarked against Adobe Acrobat.
Advanced editing of existing PDF content remains a development priority.
Digital signatures, OCR, and specialized document workflows are not yet comprehensive.
Compatibility with complex forms and unusual PDF documents requires further testing.
Professional publishing and document-preflight capabilities are limited.
How to Install
The easiest way to install PdfCraft is to visit its official website and download the package for your operating system.
Windows users can choose an installer or portable archive. macOS users can download the universal disk image, while Linux users can select AppImage, DEB, RPM, or another available package.
To build PdfCraft from source, install Rust 1.90 or newer and run:
git clone https://github.com/storytold/pdfcraft.git
cd pdfcraft
cargo run --release -p pdfcraft
For command-line PDF processing, build or install the CLI package provided by the project. Consult the official documentation for supported commands, build dependencies, and platform-specific installation instructions.
Final Verdict
PdfCraft is a promising open-source PDF editor for users who want to read, organize, combine, split, and secure documents without relying on a cloud service or paid subscription.
Its strongest advantages are local processing, cross-platform availability, careful handling of PDF structure, and a command-line interface that supports automation. These features make it appealing to developers, privacy-conscious users, and anyone who regularly manages PDF documents.
The main limitation is maturity. PdfCraft does not yet cover every advanced capability offered by established PDF applications, particularly for editing existing content, digital signatures, OCR, and specialized document workflows.
For everyday PDF viewing and organization, PdfCraft is worth trying. Users who need a complete professional PDF solution should evaluate its current feature set against their specific requirements before replacing their existing software.
Post a Comment/Report Broken Link: