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.14.0 - Software Mirrors |
|---|
PdfCraft v0.14.0 for Windowspdfcraft-0.14.0-windows-x86.msi | 68.29 MB pdfcraft-0.14.0-windows-x86-portable.zip | 81.03 MB pdfcraft-0.14.0-windows-x64.msi | 70.32 MB pdfcraft-0.14.0-windows-x64-portable.zip | 84.78 MB pdfcraft-0.14.0-windows-arm64.msi | 66.18 MB pdfcraft-0.14.0-windows-arm64-portable.zip | 81.2 MB |
PdfCraft v0.14.0 for macOSpdfcraft-cli-0.14.0-macos-universal.zip | 60.22 MB pdfcraft-0.14.0-macos-universal.dmg | 94.26 MB |
PdfCraft v0.14.0 for Linuxpdfcraft-cli-0.14.0-linux-x86_64.tar.gz | 30.03 MB pdfcraft-cli-0.14.0-linux-aarch64.tar.gz | 28.54 MB pdfcraft-0.14.0-linux-x86_64.tar.gz | 84.2 MB pdfcraft-0.14.0-linux-x86_64.rpm | 84.85 MB pdfcraft-0.14.0-linux-x86_64.pkg.tar.zst | 66.67 MB pdfcraft-0.14.0-linux-x86_64.flatpak | 63.37 MB pdfcraft-0.14.0-linux-x86_64.deb | 85.28 MB pdfcraft-0.14.0-linux-x86_64.AppImage.zsync | 281.03 kB pdfcraft-0.14.0-linux-x86_64.AppImage | 80.23 MB pdfcraft-0.14.0-linux-riscv64.tar.gz | 81.85 MB pdfcraft-0.14.0-linux-riscv64.rpm | 82.51 MB pdfcraft-0.14.0-linux-riscv64.deb | 82.77 MB pdfcraft-0.14.0-linux-aarch64.tar.gz | 80.63 MB pdfcraft-0.14.0-linux-aarch64.rpm | 81.98 MB pdfcraft-0.14.0-linux-aarch64.pkg.tar.zst | 64.34 MB pdfcraft-0.14.0-linux-aarch64.flatpak | 59.55 MB pdfcraft-0.14.0-linux-aarch64.deb | 82.54 MB pdfcraft-0.14.0-linux-aarch64.AppImage.zsync | 269.15 kB pdfcraft-0.14.0-linux-aarch64.AppImage | 76.83 MB |
PdfCraft v0.14.0 for BSDpdfcraft-0.14.0-freebsd-x86_64.tar.gz | 83.62 MB |
Others Download related to PdfCraft v0.14.0pdfcraft-web-0.14.0.zip | 15.22 MB |
PdfCraft v0.14.0 Source Code
PdfCraft v0.14.0 Source code (zip)
PdfCraft v0.14.0 Source code (tar.gz)
|
PdfCraft v0.14.0 Release Notes: What's Changed- fix(cos): one decode budget per page walk, so repeated stream references cannot multiply decoding by @aiongg in #4114
- fix(cos, content, filters, crypt, model, render, print, a11y): bound the work that repeated keys, streams and page values multiply by @aiongg in #4128
- fix(limits): bound the decoding and listing work that repeated references and small inputs multiply by @aiongg in #4117
- fix(js, xfa): bound the text and work that form scripts and XFA data can multiply by @aiongg in #4121
- fix(edit,organize,create): bound the work hostile files cause in editing, page organizing and image import by @aiongg in #4151
- chore(sonar): exclude vendored crates and the spec-mandated MD5/RIPEMD-160 (SonarCloud rust:S4790) by @dylanmtaylor in #4169
- fix(packaging): use [[ tests and name positional parameters (SonarCloud shelldre:S7688, S7679, S7682, S131) by @dylanmtaylor in #4170
- fix(audit): find covers the audit missed, bound its work and honour the copy permission by @aiongg in #4109
- fix(xfdf, sign, preflight, engine, forms, measure, annot): bound repeated work in form exchange, preflight and export, and check what imports and time stamps claim by @aiongg in #4129
- M14: update ctutils to 0.4.5 for RUSTSEC-2026-0385 by @Jayesh-Prajapati9 in #4220
- Fix FormCalc Str() printing small negative numbers as "-0" by @Silvertree2010 in #4108
- Accept long unit names in FormCalc UnitValue by @Silvertree2010 in #4116
- test(sign): serialize the Keychain search-list tests by @ffishman in #4124
- M9: sign_list lists a hidden or NoView signature field as not visible by @EricKaden in #4141
- M6: scripts see xfa_version, and xfa_installed in XFA forms by @EricKaden in #4142
- Regression tests for #246, #843 and #2028 by @skylartaylor in #4143
- fix(optimize): keep a destination referenced only through an indirect /Dest by @Matoo125 in #4212
- CI: the workflow token is read-only by @oracola91 in #4026
- ci(deps): bump Swatinem/rust-cache from 2.9.2 to 2.9.3 in the actions group by @dependabot[bot] in #4227
- FreeBSD: package the aarch64 cross build (craft-common-actions#39) by @zuujiscom in #4137
- Reject non-hex characters in XFDF colour parsing by @Silvertree2010 in #4145
- fix(edit): setting a paragraph's width no longer panics on text larger than a page by @Matoo125 in #4110
- fix(redact,sign,cos): close the still-open high-severity scan findings by @dylanmtaylor in #4244
- fix(docs): one row per crate in the vendor README table and remove duplicates by @alehel in #4015
- M10: odd and even pages are page numbers, as Acrobat counts them (#3984) by @mtlcl410 in #4034
- fix: Issue #4017. Flattening removes empty fields it cannot draw by @Ridzzz0Alam in #4033
- M11: Convert to PDF/A needs the owner's permission on an encrypted document (#3921) by @Jayesh-Prajapati9 in #4203
- M5: stamp_custom places a picture fitted inside a rect (#4077) by @Jayesh-Prajapati9 in #4233
- M5: sticky notes draw the icon they name (ISO 32000-2 Table 175) by @mtlcl410 in #4182
- M3: a Launch link that names a PDF opens it in PdfCraft (ISO 32000-2 §12.6.4.6) by @mtlcl410 in #4185
- ui: prevent top item clipping under panel header separators by @piyushgoel2808 in #4073
- fix(ui): keep colour popups open when "+" opens the custom colour picker by @agent-reed in #4066
- M6: calculations read their notation only from a comment, and a regex after a condition as a regex by @Piohrun in #3993
- Accessibility: set a table's Summary and a header cell's Scope (#4103, #4104) by @pat26-dotcom in #4130
- M4: bookmarks show and set their title colour and style (ISO 32000-2 Tables 151, 152) by @mtlcl410 in #4171
- Cancel stale Organize page drags after document changes by @ahmadmuj in #4039
- M2: text extraction finishes a column before the next one across a paragraph gap (#3658) by @Jayesh-Prajapati9 in #4214
- fix: Issue #4076, pdfcraft --help prints usage instead of opening the app. by @Ridzzz0Alam in #4093
- Open Save As and export dialogs in the document's own folder by @aalbertiarchitecte in #4012
- M9: visible signatures read upright on rotated pages by @vjeko2404 in #4067
- G14: Romanian: translate the 64 catalog rows still in English by @vioreltus in #4016
- Packaging: pin the signing client and appimagetool, and check their hashes by @aiongg in #3731
- fix(links): resolve remote document paths with craft-docpath's resolve_absolute by @aiongg in #3730
- Allow OFL typefaces, Noto CJK and Source Han included (AGENTS.md §1.1) by @aiongg in #3908
- CI: nextest, line tables only, one wasm check by @aiongg in #4269
- CI: shared gate workflow; nightly fuzzing in its own workflow by @aiongg in #4270
- test(automation): give sign_document a real digital ID and document in the hostile-arguments sweep by @aiongg in #4277
- release: the git-sources gate moves into craft-common-actions (storytold/craft-common-actions#78) by @dylanmtaylor in #4292
- Translations: a missing string never fails; xtask ci prints the gaps by @aiongg in #4302
- Assets: don't hash translation catalogs in ATTRIBUTION.toml by @aiongg in #4284
- ci(sonar): stop cancelling main-branch runs so coverage is published by @dylanmtaylor in #4321
- fix(render): bound xref streams, JBIG2 referred-to counts, saved graphics states and /W2 runs by @aiongg in #4350
- chore: resolve SonarCloud maintainability issues by @dylanmtaylor in #4356
- fix(deps): bump crypto-bigint to 0.7.6 (RUSTSEC-2026-0387) by @aiongg in #4366
- Tests: UI tests wait for background work by time, not frame count (#4186) by @Jayesh-Prajapati9 in #4242
- fix(demo): resolve SonarCloud web/css issues in showcase.html by @dylanmtaylor in #4402
- Integration batch 3: 47 contributor PRs (editing, forms, XFA, rendering) by @aiongg in #4390
- fix(xfa): skip PDF fallback scripts while XFA layout is active by @PerchAnton in #2648
- M6: dotted field names make parent fields (#2696) by @mtlcl410 in #2957
- fix(edit): batch styled paragraph fallback glyphs by @PerchAnton in #3000
- fix(ui): the header, footer and watermark previews show the page under the marks (#2837) by @guillehr2 in #3009
- M12: laying out a dynamic XFA form takes off the usage rights it voids by @EricKaden in #3401
- fix(forms): write each /DR font as its own object, so Acrobat keeps typed text (#3441) by @mtlcl410 in #3488
- Save commits the open Edit Text boxes before writing the file (#3496) by @MarekSpodBiedry in #3546
- M6: util.scand reads dates as another viewer does by @EricKaden in #3549
- Edit text: keep Tr, stroke, line width and gs set inside BT when rewriting a paragraph (#3508, #3509) by @cadelass in #3551
- M12: a date typed by another of an XFA field's edit patterns is kept in its first by @EricKaden in #3552
- M6: form buttons show the side panels (app.execMenuItem) by @EricKaden in #3580
- Redaction: follow nested forms as deep as the readers do by @Hamza0101 in #3670
- M6: values typed into Password fields are written to no file (#3926) by @mtlcl410 in #3943
- M6: a document script that throws no longer stops the form's other scripts (#3940) by @mtlcl410 in #3985
- fix: Issue #4018, form_fill warns when a value does not fit its field (#4018) by @Ridzzz0Alam in #4053
- M4: a save prompt that opens in the background asks for the user's attention by @EricKaden in #4155
- M2: a symbolic TrueType font reads its (3, 0) cmap before its (1, 0) one (#4156) by @mtlcl410 in #4157
- fix(ui): the added-text editor keeps the box's alignment by @RiceDee in #4178
- M11: PDF Optimizer ▸ Clean Up stores LZW streams with Flate (optimize.flate-unencoded) by @marcoarnulfo in #4181
- fix(audit): covered_text reports the words under the cover, not the whole line by @mercuryVM in #4198
- M7: edited text keeps the spaces typed, except at the edges of a stretched justified row (#4199, #3797) by @Jayesh-Prajapati9 in #4217
- M7: paste added text boxes and images in the engine and through content_copy (#2636) by @lev-n in #4230
- M7: a batch of content edits refreshes the added content and page marks by @lev-n in #4258
- M7: added text takes character spacing from Format text by @marcoarnulfo in #4266
- M12: XFA text is measured at its standard-14 font's own widths by @EricKaden in #4287
- Check boxes and radio buttons draw their mark in the field's text colour by @marcoarnulfo in #4295
- Omit minus sign when FormCalc Format() rounds to zero by @Silvertree2010 in #4299
- M6: Field Properties ▸ Actions: Edit opens an existing script (#4006) by @marcoarnulfo in #4307
- M11: honor page UserUnit when measuring image resolution by @KyleKassen in #4310
- M10: write DOCX cell widths from their grid columns by @KyleKassen in #4311
- M7: a bold paragraph's stand-in font no longer turns earlier edits bold (#4280) by @Lcoding15 in #4316
- M12: round XFA check buttons draw a round background and border by @EricKaden in #4317
- M12: links in XFA rich text become clickable links by @EricKaden in #4318
- M12: XFA borders and rectangles with rounded corners are drawn rounded by @EricKaden in #4319
- M10: preserve table text from covered export slots by @KyleKassen in #4329
- M8: redact labelled Italian international slash numbers by @KyleKassen in #4330
- M10: apply soft-mask Decode intervals to image exports by @KyleKassen in #4331
- M12: flowed XFA subforms are drawn with their border and fill by @EricKaden in #4338
- M6: fields that don't scroll stop taking text when full by @EricKaden in #4339
- M6: the date picker has a Today button (#4274) by @mtlcl410 in #4343
- M2: a DeviceN colour with twelve inks paints, and a colour that can't be evaluated no longer blanks the page (ISO 32000-2 §8.6.6.5) by @mtlcl410 in #4345
- M6: check boxes, radio buttons and push buttons without an appearance are drawn, and comb fields show their cells (ISO 32000-2 Table 192, 12.7.5) by @mtlcl410 in #4368
- M2: Invisible annotations of unknown types and popups don't paint their appearance on the page (ISO 32000-2 Table 167) by @mtlcl410 in #4371
- M2: a stand-in for a non-embedded font keeps its glyph shapes at wider /Widths advances (Arial,Bold no longer draws i and l as blocks) by @mtlcl410 in #4374
- M2: a non-embedded CIDFont's fallback request carries its descendant's font descriptor (ISO 32000-2 §9.7.4, §9.8) by @mtlcl410 in #4380
- fix(edit): Delete removes the selected paragraph or objects in Edit text by @meethere in #4111
- Integration batch 4: 26 contributor PRs (comments, viewer, pages, printing), after #4390 by @aiongg in #4391
- M5: sticky notes stay upright where they are placed on rotated pages (NoRotate, #2583) by @guillehr2 in #3016
- feat(organize): Extract pages takes typed page ranges (#3593) by @Lombardi2003 in #3750
- M5: the arrow keys move the selected comment by @ohagmann in #3786
- Leave the page grid when the Crop tool is chosen by @eliets2 in #3974
- fix(automation): guard MCP dispatch and bound line and file reads (#3924) by @jonathanwxh-cell in #3997
- M12: type or pick an architect's 1:N drawing scale in the Measure panel, applied at once by @aalbertiarchitecte in #4058
- i18n(fi): translate the 64 labels left in English after #2210 by @Janiz-zzz in #4068
- feat(ui): the secured-document notice can be turned off for good (#4035) by @Lombardi2003 in #4096
- fix(sign): judge a page's indirect /Annots array by the annotations it gains by @ffishman in #4132
- fix(sign): let an LTV update declare the ESIC extension in the catalog by @ffishman in #4133
- Flatten comments from the page's right-click menu and the Comments panel's menu by @ohagmann in #4147
- M10: every paper size reaches the printer, from the dialog and doc_print (#3752) by @thesilvjurado in #4161
- feat(ui): add 'Split document...' to page thumbnail context menus by @so-sai in #4211
- M3: a link without a position keeps the reader's place (ISO 32000-2 §12.3.2.2) by @Lcoding15 in #4303
- M10: preserve page artwork when printing annotations by @KyleKassen in #4312
- test(ui): recovery idle tests make folders that never share a name by @EricKaden in #4323
- M5: stamps without an appearance draw the stamp they name (ISO 32000-2 Table 184) by @mtlcl410 in #4349
- Reject open-ended page range on a document with no pages by @Silvertree2010 in #4352
- M3: a fresh install follows the desktop's appearance (#1248) by @mtlcl410 in #2190
- M3: restore last view settings when reopening documents (#1767) by @mtlcl410 in #2195
- organize: split a combined field/widget so every copied page owns its widget by @midasmatterhorn in #2289
- M10: a booklet decides two-sided itself, as Acrobat does (#2707) by @mtlcl410 in #2748
- cli: the argument bugs photocraft#7071 lists are live here too by @Hamza0101 in #3849
- M3: resize and move the window again right after a resize or move (Wayland) by @bmh129 in #3970
- Comments: the composer hides while its comment is scrolled away (#4021) by @mmmaarian03-crypto in #4095
- M5: comments without an appearance draw their /Border dashes, Ink dashes and the caret's ¶ (ISO 32000-2 Tables 166, 168, 183) by @mtlcl410 in #4362
- Integration batch 5: 9 contributor PRs (OCR, attachments, documents, selection), after #4391 by @aiongg in #4394
- M10: recognize a scanned page when Edit is turned on for it by @philip-tam in #1609
- Attachments: attach a file and delete one (panel, edit, tools); duplicate names numbered as text by @regendorf-ux in #1960
- M3: Document Properties shows a title and author stated only in XMP (#2373) by @magdale76 in #2588
- M11: Optimize keeps a JPEG's colour transform (#1201) by @guillehr2 in #3012
- fix(ui): the back arrows leave Edit as the Edit tab does by @guillehr2 in #3056
- Select All takes the whole document's text while scrolling continuously (fixes #2639) by @SBaksa in #3694
- Refuse an OCR batch whose inputs would write one output file by @eliets2 in #3765
- fix: Issue #4020, Extract keeps the bookmarks of the pages it copies by @Ridzzz0Alam in #4041
- OCR: a recognizer panic or a dead worker ends the run (#3919) by @mmmaarian03-crypto in #4196
- fix(forms): a multiline field rejects a glyph wider than the field by @aiongg in #4447
- fix(render): vendor hayro-postscript so a run of << in a CMap can't overflow the stack by @aiongg in #4363
- Fixed broken link to nFPM installation site by @roopeshor in #4372
- Redaction keeps images still drawn through a form without /Resources by @oracola91 in #4413
- fix(optimize): a GoToR or GoToE /D no longer keeps a local named destination by @dotCooCoo in #4445
- refactor(xtask): reduce cognitive complexity in parity and layers by @dylanmtaylor in #4406
- refactor(a11y): reduce cognitive complexity in autotag and alt by @dylanmtaylor in #4407
- refactor(engine): reduce cognitive complexity in camera_edges and word_count by @dylanmtaylor in #4408
- refactor(ui): split field-table divider input (Sonar S3776) by @FredApps in #4419
- fix(ui): seven tools take the page zoom from the side the page's width is on in a turned view by @Lombardi2003 in #4425
- M2: tiling pattern cells sit at their XStep/YStep multiples at every scale (ISO 32000-2 8.7.3.1) by @mtlcl410 in #4421
- fix(automation): roots-only mode refuses other shares and devices by name by @mercuryVM in #4289
- M12: XFA check boxes sit where their margins, caption and alignment put them by @EricKaden in #4300
- M5: line comments draw their leader lines and caption (ISO 32000-2 Table 178) by @mtlcl410 in #4354
- M3: a document opens at its /OpenAction destination, position and named destinations included (ISO 32000-2 Table 149, 12.3.2.4) by @mtlcl410 in #4376
- M4: Document Properties has a Custom tab for custom properties by @dotCooCoo in #4387
- M3: a closed top-level bookmark opens closed (ISO 32000-2 Table 151 /Count) by @mtlcl410 in #4389
- fix(ui): header, footer and watermark previews step through the pages by @aiongg in #4448
- Reject non-finite numbers in XFDF coordinate lists on import by @Silvertree2010 in #4449
- refactor(xfa): explicit model imports (Sonar S2208) by @dylanmtaylor in #4403
- M2: Type 3 text in rendering mode 7 is not rendered and adds no clip (ISO 32000-2 9.3.6) by @mtlcl410 in #4430
- M2: a Separation /All colour paints every colourant, gray 1 − tint on screen (ISO 32000-2 8.6.6.4) by @mtlcl410 in #4439
- Remember the annotation tool pin across restarts (#4253) by @PerchAnton in #4276
- M6: an editable combo box takes a typed value (ISO 32000-2 Table 233 Edit) by @mtlcl410 in #4451
- chore: order the render integration-test modules (fmt) by @echelon in #4486
- fix(ui): text typed into a new text box counts as unsaved work by @aiongg in #4441
- Integration batch 6: 6 contributor PRs (All tools view, page pointer, comments, redaction, Properties, Home) by @aiongg in #4566
- M3: All tools expands to a full, searchable view by @alehel in #2460
- fix(ui): Document Properties layout, Space Audit tab, no page cursors under dialogs by @alehel in #2556
- M3: the community card on Home can be closed for the rest of the run by @max1e6 in #2617
- fix(ui): one page pointer per frame, so taps work and nothing over a page lets it through by @alehel in #2685
- fix(comments): thread replies by their /IRT reference, count comments like Acrobat by @alehel in #4061
- fix(redact,cos): cleared redaction marks leave nothing behind by @alehel in #4226
- fix(xfa): require full save when stripping XFA packets by @dylanmtaylor in #4568
- fix(forms): align has_password_flag traversal depth with field enumeration by @dylanmtaylor in #4570
- fix(redact): remove AcroForm on Hidden::FormFields even when field count is zero by @dylanmtaylor in #4571
- forms: clear typed XFA password field values from datasets on save (#3944) by @jonathanwxh-cell in #4506
- fix(ui): the page ignores the pointer while a panel is being dragged by @aiongg in #4581
New Contributors- @Matoo125 made their first contribution in #4212
- @zuujiscom made their first contribution in #4137
- @piyushgoel2808 made their first contribution in #4073
- @agent-reed made their first contribution in #4066
- @pat26-dotcom made their first contribution in #4130
- @aalbertiarchitecte made their first contribution in #4012
- @vjeko2404 made their first contribution in #4067
- @vioreltus made their first contribution in #4016
- @cadelass made their first contribution in #3551
- @RiceDee made their first contribution in #4178
- @mercuryVM made their first contribution in #4198
- @lev-n made their first contribution in #4230
- @KyleKassen made their first contribution in #4310
- @meethere made their first contribution in #4111
- @thesilvjurado made their first contribution in #4161
- @so-sai made their first contribution in #4211
- @roopeshor made their first contribution in #4372
- @dotCooCoo made their first contribution in #4445
Full Changelog: v0.13.0...v0.14.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: