PaperPilot – Zero-Cloud, Pure-Rust PDF Engine with WASM and MCP
Posted by vardhan1237 3 days ago
Comments
Comment by fschuett 2 days ago
One Google search (yeah I'm old, sorry, nobody "Googles" anymore) for "rust pdf library" shows this. Yet people now redo and redo and redo everything again just to have "their" semi-broken copy of a HTML -> PDF renderer (and then run into the same edge cases that were already fixed before). There are lots of edge cases in typography especially, I recently had a lot of fixes as I was trying to ocr-and-cleanup a 1732 scan of some books with Claude auto-extracting the font. There were a ton of edge cases in the layout, esp. related to column, footnote and sidebar handling, or things like "Hebrew RTL text accidentally disappears if text breaks weirdly", "1-bit image compression", etc.
I have nothing against AI, I use it heavily myself, but what is annoying is people completely ignoring the years of work of existing projects that do the exact same thing - instead of just forking, but instead re-tokenizing the exact same work again. Most likely the author didn't research "does this already exist" and that's annoying, then you get 100 of similar projects reinventing the world with tokens again and again. Sometimes its beneficial and can lead to faster exploration of new approaches, but in most cases its not and misses edge cases that were solved before.
Comment by tchalla 2 days ago
It seems like fschutt/printpdf is your project. You should definitely at least disclose it in your comment, if that's the case.
Comment by fschuett 2 days ago
Comment by rubyfan 2 days ago
Comment by vardhan1237 2 days ago
When we evaluated the Rust PDF landscape, printpdf was actually one of the first crates we looked at for PDF generation. The reason we opted for a stack centered around lopdf and pdf-writer was architectural: PaperPilot's primary focus is heavy manipulation and non-destructive AST transformation of existing, arbitrary, often malformed real-world PDFs (re-ordering cross-reference tables, granular /P permission bitmask hashing, raw object streams, page imposition, booklet folding, and outline splitting).
For document synthesis (HTML/Markdown to PDF), typography and edge-cases (like the RTL/footnote issues you mentioned) are notoriously hard, and we'd love to learn from or collaborate with printpdf's battle-tested approaches there. Thank you for the feedback and all your contributions to Rust's PDF ecosystem!
Comment by NullifyNAN 2 days ago
Comment by whizzter 2 days ago
Comment by thadt 2 days ago
> Strategic Vision: Evolve PaperPilot from a best-in-class PDF workstation into the Universal Document Operating System for humans and AI agents. [2]
[1] https://github.com/KrushnaVardhanReddy/PaperPilot/blob/main/...
[2] https://github.com/KrushnaVardhanReddy/PaperPilot/blob/main/...
Comment by fschuett 2 days ago
Comment by ashkankiani 2 days ago
Comment by voidhorse 2 days ago
I explicitly start most programming projects with a request for existing libraries and explicit instructions to the model to prefer using them and keep our logic exclusively to what we need beyond that.
People are forgetting and/or don't realize that just because the actual generation is zero cost does not mean the code is zero cost. Every line of bespoke code is a liability. Every piece of duplicative software you produce for no reason other than "this one is mine" is polluting the ecosystem and creating a noisy landscape in which such problems will just get worse. We are seeing the complete erosion of collective contribution models which has negative implications for the collective maintenance and enhancement of shared knowledge over time.
Comment by rererereferred 2 days ago
Comment by suhlig 1 day ago
Comment by frumiousirc 2 days ago
Maybe that's your answer. Search is so bad and LLM so good that it's faster and easier to re-implement than reuse.
The only thing that slows down the new paradigm is the apparent requirement of posting the output to HN so others will find it.
That irony is not lost on me.
Comment by anhyz 2 days ago
This is a scary level of AI mania.
Even if you're being assisted by the best frontier model, there is no way that reimplementing a PDF engine from scratch is faster than just using the one that's already there. AI-driven coding still takes time and tokens. A web search takes maybe 60 seconds to search and find the existing implementations?
You could even tell the LLM to configure (or even fork) one of the existing implementations for you, and that would still be way faster than a from-scratch implementation.
Comment by gtirloni 2 days ago
I use AI heavily but it's not this omnipresent deity that knows everything at all times.
Comment by swsieber 2 days ago
The first project you linked explicitly calls out broken pdf handling.
Comment by SecondCrack 2 days ago
Comment by teh 2 days ago
Comment by giancarlostoro 2 days ago
Comment by j45 2 days ago
Comment by t_mahmood 2 days ago
Comment by ecto 2 days ago
Comment by piokoch 2 days ago
I see the outbreak of PDF readers, AI TUI harnesses, etc.
Comment by geraneum 2 days ago
Can I get some of those free tokens you’re having?
Comment by zamadatix 2 days ago
In the last 5 days alone I've had the equivalent of 2+ years of ChatGPT Plus Codex quota given for free via resets. I literally leave my PC running in Codex with 8+ Sol 6.1 Max sessions jamming away most of the day writing a desktop environment from scratch (and other things) just because the reset tokens will evaporate if I don't use them. I've even had days with > 1 billion tokens used where it was reset by the morning.
That said, who knows what free ride will appear with AI capital next month!
Comment by geraneum 2 days ago
Comment by zamadatix 2 days ago
After all, a year ago and doing these same tasks would just fall on its face. The hard part of the problem is solved, now it's not even "do LLMs continue to get better" but "do LlMs keep getting cheaper".
Comment by lelanthran 2 days ago
Nothing surprising here; pre-2022/2023, Rust was used primarily for rewriting things (compared to, for example, Go, which was used to write new things, not replacements).
I don't find it surprising that the pattern is continuing.
Comment by stymaar 2 days ago
It's not that Rust or Go aren't used to write new things, it's just that the bar for reaching the HN front page with new things is much higher than for mere copycats.
Comment by embedding-shape 2 days ago
How could you possibly know this, for either languages?
FWIW, I've only worked and written greenfield software with Rust, and have only worked professionally with Golang to replace existing services. I'm sure I'm not alone in this, nor in the complete opposite. But I don't think either of us could say how either of the languages or "primarily used", that's a bit too much.
Comment by lelanthran 2 days ago
But... Rewrite-it-in-Rust is a meme, while rewrite in Go is not.
Comment by embedding-shape 2 days ago
I'm glad you got the gist of my comment :)
> But... Rewrite-it-in-Rust is a meme, while rewrite in Go is not.
Today no, but it definitely was when it first became popular, "X but in Go" was fairly common on the HN frontpage and elsewhere. Just like "X but in Ruby" used to be a thing too, but isn't anymore.
Comment by devy 2 days ago
I just ran an security analysis on the repo. As is, it's not looking great (again nothing against vibe/agentic coded projects) the lack of security consideration is astonishing (not suggesting a malice). Definitely NOT production ready.
Context: about 98% of the commits are by AI bots (Antigravity, Google Jules).
That explains the bugs below.
Security bugs
1. High: the local web API lets any website use the user's files.
- paperpilot-gateway/src/server.rs:95-98 allows requests from any website, and
there's no login or authentication.
- POST /api/v1/pdf/mcp-exec (handlers.rs:233) runs any tool with any file path
on the machine.
- So while the API is running, any web page the user visits can make it
overwrite files with PDFs, create folders, and read back text from any local
PDF.
- In the desktop app the user has to switch the API on. But docker-compose.yml
opens it to the network with no authentication.
- There's also no limit on request size (usize::MAX), so one huge request can
exhaust memory.
2. High: a malicious document can run code in the desktop app.
- Search results display text from the user's own documents as raw HTML
without escaping it:
- WorkspaceSearchModal.svelte:297
- workspaceSearch.ts:84
- WorkspaceSearchModal.svelte:118
- The app has no Content Security Policy, and lets its window read any file on
disk (tauri.conf.json:28-33, scope "**").
- So a PDF or DOCX carrying an <img onerror=…> payload could read any local
file and send it out once the user searches it.
3. Medium: downloaded models and add-on packs are never verified.
- There's no checksum check on models (ai_commands.rs, ocr_commands.rs). Some
come straight from the repo's live main branch, so whatever lands there
ships to users.
- Pack downloads (pack_commands.rs:147-151) put pack_id straight into the file
path. A value containing ../ writes outside the app's data folder.
- Packs come from huggingface.co/paperpilot/packs, an account I didn't confirm
the project owns.
4. Medium/Low: the protection against fetching internal addresses can be
bypassed (paperpilot-core/src/url_fetch.rs:24-40).
- It only checks IP addresses typed directly into the URL, not what a domain
name resolves to.
- It follows redirects, so a public URL can redirect to an internal one.
- IPv6 addresses ([::1]), 0.0.0.0 and the 100.64.0.0/10 range get through.
- The impact is limited because the response must start with %PDF.
5. Low: CI supply chain.
- release.yml installs wasm-pack via curl | sh.
- GitHub Actions are pinned to version tags, not commit hashes.
- The Android build ignores the lockfile (--no-frozen-lockfile).Comment by vardhan1237 2 days ago
Comment by vardhan1237 2 days ago
Comment by geraneum 2 days ago
Like this case, the open source project here could be used as a base for further development by AI!
Comment by rptx 56 minutes ago
Comment by colesantiago 3 days ago
If it is you should disclose it and the license should be AGPLv3 instead of Apache.
Comment by ligarota 3 days ago
Comment by vardhan1237 2 days ago
The core PDF parsing and AST manipulation is built on pure Rust libraries: lopdf (0.45), pdf-writer, hayro, and image. All of these are Apache 2.0 or MIT licensed.
Any mention of MuPDF in the documentation/planning notes was strictly part of an architectural trade-off analysis (evaluating existing Python/C extraction pipelines like PyMuPDF vs. pure Rust). The entire crate stack in paperpilot-pdf is 100% Apache 2.0 / MIT clean.
Comment by salahalhaismawi 2 days ago
Comment by jacquesm 3 days ago
Seriously though, can you list some examples?
Comment by tredre3 3 days ago
> **The Opportunity:** Capturing the high-growth enterprise AI engineering market by replacing bloated, slow Python extraction pipelines (`Unstructured.io`, `Docling`, `Marker`, `LlamaParse`, `PyMuPDF4LLM`) with a pure-Rust, sub-10ms, multi-format ingestion kernel.
- This structure guarantees that if we ever swap the PDF engine to `pdfium` or `mupdf`, not a single line of business logic in `paperpilot-core` or CLI tools will need to be rewritten.
> Directly captures the high-growth AI Engineering & RAG pipeline market (displacing bloated Python stacks like Docling, Marker, PyMuPDF4LLM, and Camelot) with sub-10ms, pure-Rust, on-device parsing.
| A.2.5 | `MuPdfBackend` adapter (Future) | Use MuPDF for OCR-heavy workflows via FFI |Comment by jacquesm 2 days ago
Comment by jasomill 2 days ago
Comment by darkwater 2 days ago
Comment by djoldman 2 days ago
I like to check out everyone's first commits :)
Comment by pinyencheng 2 days ago
Comment by Surac 3 days ago
Comment by foresterre 3 days ago
Asking because I've recenly been doing something similar, but since my typst files are templates, which with the same inputs can differ and may need different translations as well, I've written a small i18n library in typst (but I guess you could require a set of translations to be present with a given typst file as well).
Comment by Surac 2 days ago
Comment by evilmonkey19 2 days ago
Comment by febed 3 days ago
Comment by vardhan1237 2 days ago
Comment by alwinaugustin 2 days ago
Comment by _rwo 2 days ago
Comment by Latitude7973 2 days ago
It runs in the browser, is private and no-fuss. You can also host it locally if you like.
Comment by bawana 2 days ago
Comment by ffin 2 days ago
i'm not convinced a human has ever actually looked at this project; this must be the work of someone's overzealous openclaw agent or something.
Comment by efields 2 days ago
Comment by spwa4 3 days ago
First, how do you "sign" a PDF using this tool?
If you're going to build this, can you find a small, even tiny model that has decent tool calling and, effectively turn that in combination with this tool into a single HTML page that I can use everywhere?
Literally something I could save on a work laptop or cloud desktop and would actually work (even if it would be slow, it'd still be a great improvement)
Comment by vardhan1237 2 days ago
Comment by totetsu 2 days ago
Comment by Tepix 2 days ago
Comment by R1ck404 2 days ago
Comment by vardhan1237 2 days ago
Comment by darksim905 3 days ago
Comment by Gigachad 2 days ago
Comment by darksim905 2 days ago
Comment by aidotguru 2 days ago
Comment by aidotguru 2 days ago
Comment by measurablefunc 3 days ago
Comment by chiharukiryu 2 days ago
Comment by vardhan1237 2 days ago
Comment by mkl 2 days ago
Comment by vardhan1237 2 days ago
Comment by mastic 23 hours ago
Comment by Nightbowl12 1 day ago
Comment by artiz 2 days ago
Comment by usefulbasis 2 days ago
Comment by djellicoe 2 days ago
Comment by deakmisra 3 days ago
Comment by jacquesm 3 days ago
""" I built PaperPilot because I was frustrated by the privacy trade-offs of modern PDF utilities.
Whenever you need to split, merge, compress, or sign a confidential document (tax forms, legal contracts, medical paperwork) using online tools, your files are transmitted to a third-party server. Most "free" tools retain copies or run in closed-source cloud environments.
PaperPilot is a 100% zero-cloud, local-first engine written in pure Rust (built on top of lopdf, pdf-writer, and image). 0 bytes are ever sent to an external server.
Key aspects of the project:
1. Penta-Interface Architecture: Instead of building just another web app or CLI, the same core Rust operations run across 5 surfaces: - Terminal CLI: High-throughput local processing and bash scripting. - Local Desktop App: Native cross-platform GUI built with Tauri 2 and Svelte 5. - Client-Side Web: Runs 100% inside your browser via WebAssembly (https://usepaperpilot.com/). - REST / Gateway API: Standalone local daemon (localhost:7823) for local microservices. - Model Context Protocol (MCP): Connects local AI agents (Claude Desktop, Cursor, OpenCode) directly to local PDF tools so LLMs can inspect, redact, and sign PDFs on disk without cloud upload.
2. Capabilities (75+ Tools): - Standard operations: Merge, split, rotate, reorder, burst, booklet imposition, and N-up grid. - Privacy & Compliance: Local PII regex redaction (SSNs, cards, emails), metadata striping, and digital signature verification. - Document Extraction: PDF to structured Markdown tables (no coordinate loss), PDF to JSON, and pure-Rust layout analysis. - Offline RAG: Embedded vector store (libsql_vector) with an actionable visual citation canvas.
3. Performance & License: - Average operation latency is ~20ms to 130ms. - 100% Free and Open Source under the Apache 2.0 license.
The GitHub repository is at https://github.com/KrushnaVardhanReddy/PaperPilot and the browser-based WASM sandbox is live at https://usepaperpilot.com/.
I’d love to hear your feedback on the architecture, performance benchmarks, and any edge-case PDF formats we should test against! """
Which reads very much LLM produced.
Comment by lionkor 2 days ago
That's not native, and if you pointed it out to the LLM that wrote this, it would agree. It's just dumb so it didn't think of the fact that that's entirely the wrong term.
Comment by Shorel 3 days ago
Really. All he wants was very easy to do already.
Comment by selcuka 3 days ago
I think you've missed this part:
> Terminal CLI: High-throughput local processing and bash scripting.
Comment by Shorel 3 days ago
I am interested in the following use case: convert the PDF to e-pub, then edit it with Calibre to fix some issues that always happen.
Currently using pandoc.
Comment by vardhan1237 2 days ago
Comment by postbye 1 day ago
Comment by vardhan1237 3 days ago
I built PaperPilot because I was frustrated by the privacy trade-offs of modern PDF utilities.
Whenever you need to split, merge, compress, or sign a confidential document (tax forms, legal contracts, medical paperwork) using online tools, your files are transmitted to a third-party server. Most "free" tools retain copies or run in closed-source cloud environments.
PaperPilot is a 100% zero-cloud, local-first engine written in pure Rust (built on top of lopdf, pdf-writer, and image). 0 bytes are ever sent to an external server.
Key aspects of the project:
1. Penta-Interface Architecture: Instead of building just another web app or CLI, the same core Rust operations run across 5 surfaces: - Terminal CLI: High-throughput local processing and bash scripting. - Local Desktop App: Native cross-platform GUI built with Tauri 2 and Svelte 5. - Client-Side Web: Runs 100% inside your browser via WebAssembly (https://usepaperpilot.com/). - REST / Gateway API: Standalone local daemon (localhost:7823) for local microservices. - Model Context Protocol (MCP): Connects local AI agents (Claude Desktop, Cursor, OpenCode) directly to local PDF tools so LLMs can inspect, redact, and sign PDFs on disk without cloud upload.
2. Capabilities (75+ Tools): - Standard operations: Merge, split, rotate, reorder, burst, booklet imposition, and N-up grid. - Privacy & Compliance: Local PII regex redaction (SSNs, cards, emails), metadata striping, and digital signature verification. - Document Extraction: PDF to structured Markdown tables (no coordinate loss), PDF to JSON, and pure-Rust layout analysis. - Offline RAG: Embedded vector store (libsql_vector) with an actionable visual citation canvas.
3. Performance & License: - Average operation latency is ~20ms to 130ms. - 100% Free and Open Source under the Apache 2.0 license.
The GitHub repository is at https://github.com/KrushnaVardhanReddy/PaperPilot and the browser-based WASM sandbox is live at https://usepaperpilot.com/.
I’d love to hear your feedback on the architecture, performance benchmarks, and any edge-case PDF formats we should test against!
Comment by Shorel 3 days ago
Comment by ligarota 3 days ago
Comment by moooff 2 days ago
https://moooff.github.io/HermitUI/hermit-agent/
So this Tool comes in very handy and will try to integrate it.
Comment by metchio 2 days ago
Comment by Shorel 2 days ago
Comment by smartbit 3 days ago
Question: seemingly you’re using Antigravity, an harness not many use. Please tell use about the choice of LLM and your experience with it.
Comment by vardhan1237 2 days ago
Having a strict test-first harness where every PR has to run against real PDF byte fixtures (zero mocks) and compile across CLI, WASM, and MCP kept the codebase consistent even when moving fast.
Comment by smartbit 1 day ago
Are you using Antigravity IDE v2.5.5 that hasn't been updated since 2026-08-13 and that supports 3 legacy models + Gemini Flash 3.8? I assume you're using Gemini Flash 3.8?
[0] https://news.ycombinator.com/item?id=44034918 [1] https://news.ycombinator.com/item?id=44813854
Comment by PavelGIL 2 days ago
Comment by hackerbone 3 days ago
Comment by mrheosuper 2 days ago
Comment by mashally 2 days ago
Comment by vardhan1237 2 days ago