mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Self-Hostedevaluationupdated 24 Aug 2026

bentopdf review

BentoPDF is a self-hostable collection of PDF tools that processes files inside the user's browser. It covers routine page work, editing, conversion, OCR, signatures, redaction, and visual workflows without sending documents to an application server.

+197stars / 7d
Verdict

BentoPDF is an excellent first choice for an internal PDF portal because the useful work happens in the browser and the self-hosted image does not remove PDF features. The source build is large, and advanced WASM features bring browser, header, and offline-asset complications that the one-line container command can hide. Deploy it for ordinary office work, but test signatures, large conversions, and every feature you plan to expose before replacing established desktop tools.

We ran it

Lab card: what happened when we ran bentopdfScreenshot of bentopdf (bentopdf.com)
Install✓ · 48s988 packages · 1138 MB
Build✓ · 132s
Tests✓ · 25s918 passed · 0 failed of 918 (vitest)
Known vulns110 critical · 1 high · 4 moderate · 6 low (npm audit)
Repo1680 files~295,361 lines of source · 181.8 MB · 9 CI workflows · Dockerfile

Answers from our run

Does bentopdf build from source?

Dependencies installed in 48 seconds (988 packages), and the build succeeded in 132 seconds. We cloned commit 4339d21 into a clean Debian container with 3 CPUs and no project-specific setup.

Do bentopdf's tests pass?

Yes: 918 of 918 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Does bentopdf have known vulnerabilities in its dependencies?

npm audit flagged 11 known advisories in the dependency tree at the time of our run.

Who should not use bentopdf?

Proprietary products whose owners will not publish their modifications under AGPL-3.0 or buy the separate commercial license.

What are the alternatives to bentopdf?

Stirling PDF, Gotenberg, pdfcpu. BentoPDF is an excellent first choice for an internal PDF portal because the useful work happens in the browser and the self-hosted image does not remove PDF features.

Setup4/5Container start is simple; offline WASM and Office conversion need care
Docs5/5Detailed paths for containers, static hosts, air gaps, and branding
Community4/5Current pushes, recent release work, and active technical issue reports
Maturity4/5Clean build and test run, with several feature-specific bugs still open

Discussed on

  1. hnBentoPDF: Local, browser-only tool to manipulate PDFs4 points
  2. hnStop Uploading Your PDFs to Random Websites3 points
  3. hnShow HN: BentoPDF, Hyper Compress and Kura3 points

Who it’s for

Teams that handle private PDFs and want a browser interface without uploading documents to a vendor.
Home labs, schools, and offices that need many PDF jobs behind one internal URL.
Administrators who want a static deployment or ready-made container with configurable tools and branding.
Air-gapped environments willing to prepare and host the required WASM and OCR assets themselves.

Who it’s NOT for

Proprietary products whose owners will not publish their modifications under AGPL-3.0 or buy the separate commercial license.
Anyone who assumes browser-only means every task works offline immediately: an open report says the service worker does not precache core assets before their first use.
Workflows that must preserve or validate digital signatures without independent checks: current reports cover signatures disappearing during merge and signature validation missing a signed document.
Users processing memory-heavy conversions on modest devices: a reproduced PDF-to-TIFF report ends in a WASM out-of-memory error on a valid multi-page file.
Operators serving Office conversion over a plain LAN address: LibreOffice WASM needs a secure, cross-origin-isolated context, and a current reverse-proxy report still describes initialization timeouts.

Setup reality

Our Node 22 sandbox installed 988 packages in 48 seconds and used 1,138 MB. The build succeeded in 132 seconds. Vitest then completed in 25 seconds with all 918 tests passing. The npm audit still found 11 known vulnerabilities: 1 high, 4 moderate, and 6 low.

The simplest deployment is the prebuilt bentopdf-simple container or a release archive served as static files. Building from source needs Node 18 or newer. Advanced tools load WASM in the browser, with jsDelivr URLs configured by default; a private or offline installation must decide whether to host those assets locally.

Office conversion needs HTTPS outside localhost plus COOP and COEP headers for SharedArrayBuffer. Air-gapped OCR requires its worker, core, language data, and fonts. Some certificate chains also need the optional CORS proxy for digital signing.

A private PDF counter for the whole office

BentoPDF puts a large menu of PDF operations behind a web page while keeping document processing in the browser. It can merge, split, reorder, crop, annotate, redact, fill forms, run OCR, convert office and image formats, manage bookmarks, compare documents, and build repeatable workflows. The server mostly delivers static assets. A file does not need to travel to a PDF-processing backend for the normal tool path.

That architecture is the main reason to choose it. An organization can host one internal URL and give nontechnical staff a familiar upload-and-download interface without creating a central pile of sensitive documents. The self-hosted image contains the same PDF tools as the public-facing build; it removes marketing sections rather than capabilities. Administrators can also disable selected tools through build arguments or runtime configuration.

The privacy claim needs a little precision. Several advanced engines arrive as WebAssembly, and the default production configuration points browsers to jsDelivr for PyMuPDF, Ghostscript, and CoherentPDF assets. The full marketing build can fetch the repository's star count unless that feature is disabled, while Simple Mode skips it. Those requests do not upload the user's PDF. A strict network policy should host all assets locally and inspect the browser's outbound traffic.

What happened when we ran it

We cloned commit 4339d21 into a fresh Debian container with Node 22, 3 CPUs, 8 GB of RAM, no secrets, and no elevated privileges. The checkout had 1,680 files, roughly 295,361 lines of source, and occupied 181.8 MB. Installation succeeded in 48 seconds. It added 988 packages and took 1,138 MB on disk, which is a substantial development footprint for an application ultimately served as web assets.

The build succeeded in 132 seconds. Vitest completed in 25 seconds with 918 passing tests and no failures. The repository has nine CI workflow files, a Dockerfile, and a compose file. It does not have a top-level tests directory, so the green result matters more than judging test presence from folder layout.

The weak spot in our run was dependency health. npm reported 11 known vulnerabilities: 1 high, 4 moderate, and 6 low. That does not prove an exploitable path in a deployed static build. An operator still needs to triage the findings before approving the image or source build. BentoPDF's latest release specifically addressed earlier security advisories, which shows the maintainer responds to verified reports; it does not make the current audit output disappear.

The easy deployment and the real deployment

For an internal trial, the recommended container is sensible: expose the included nginx service and open it in a browser. A release archive can also be served from an ordinary static host. Source builders get several compression modes, custom branding, language selection, base-path configuration, and a switch between CDN-backed and local WASM assets.

Office conversion is where a basic static site becomes infrastructure work. LibreOffice WASM uses SharedArrayBuffer, so anything outside localhost needs HTTPS and cross-origin isolation headers. An open issue describes Word conversion timing out behind an Nginx HTTPS proxy even though the browser reported a secure, isolated context. The report does not establish one universal cause. Test the actual proxy, browser, and documents your users will have.

Air-gapped deployment uses a preparation script that gathers the container, PDF engines, OCR language data, and fonts on an internet-connected machine. The default page is not ready for a first offline visit. Issue 830 reports that the service worker precaches no critical assets, so a fresh browser can fail after going offline before it has processed a PDF. Use the prepared bundle and verify a cold browser profile with the network disconnected.

Digital signing has another external edge. Some certificate chains require issuer data from servers that do not permit browser CORS requests. BentoPDF documents a Cloudflare Worker proxy for that case. Self-signed certificates may avoid it, but a company PKI should be tested before users are told that signing is entirely self-contained.

Breadth creates uneven edges

A toolbox this wide will not give every operation the same depth. Issue 829 reproduces PDF-to-TIFF exhausting WASM memory on a valid multi-page file while another conversion path accepts the same document. The visible error blames possible file corruption even though the console reports memory exhaustion. Users handling scans or large documents need representative fixtures and a fallback application.

Signed files deserve even stricter checks. One report says merging can remove a signature, and another says the validation tool reports no signatures on a signed PDF. A green application test suite cannot certify every real-world PDF producer, signature profile, font, or malformed object tree. For legal documents, compare the output in a second validator and retain the untouched original.

Subpath deployments also have a current rough edge. Issue 820 says the build-time canonical audit ignores BASE_URL, causing a documented GitHub Pages-style build to fail when hosted below the domain root. Root-hosted containers avoid that exact path, but organizations mounting BentoPDF under an existing portal should reproduce their release build early.

Licensing and the decision

The repository is AGPL-3.0, with a separate commercial license for closed-source use. An internal unmodified deployment and a branded proprietary service are not the same licensing decision. Teams planning to change the application or embed it in a product should review the published license terms before writing integrations.

BentoPDF is easiest to recommend as an internal service for common PDF jobs. It has unusually broad browser-side capability, good deployment documentation, and our build plus all 918 tests passed. Keep the recommendation scoped: large conversions, offline-first use, Office WASM, and signatures need their own acceptance tests. If those paths are central and a server-side processor is acceptable, Stirling PDF or a narrower API may be the safer fit.

Alternatives

ProjectWhat it isPick it when
Stirling PDF gh↗A self-hosted PDF workbench with a broad web UI and server-side processing.pick this instead when server-side jobs, automation APIs, and centralized processing matter more than keeping every document inside the browser.
Gotenberg gh↗A containerized API for converting documents and web pages to PDF.pick this instead when applications need a headless conversion service rather than an end-user PDF toolbox.
pdfcpuA Go command line and library for inspecting and changing PDF files.pick this instead when scripts and backend services need a focused native tool without a browser UI or large web build.

What people are saying

  1. [github-trending] alam00000/bentopdf

Sources

  1. BentoPDF repository and deployment documentation
  2. BentoPDF v2.8.7 security release
  3. Issue 830: service worker does not precache critical assets
  4. Issue 829: PDF-to-TIFF WASM memory failure
  5. Issue 807: signature removed during merge
  6. Issue 820: subpath canonical build failure

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →