How it works
When a user opens BentoPDF, the browser downloads the app’s JavaScript and, on demand, fetches WASM modules (PyMuPDF, Ghostscript, CoherentPDF, Tesseract) directly from a configured URL. Files are never sent to a server — all processing happens locally in the browser tab.Deployment options
Docker
The recommended method. Pull the pre-built image, run it, and you’re done. Supports Docker Compose and Podman Quadlet for systemd integration.
Vercel / Netlify
Connect your fork and deploy in minutes. Automatic builds on every push.
Cloudflare Pages
Free unlimited bandwidth with a global CDN and 300+ edge locations.
AWS S3 + CloudFront
Upload the
dist folder to S3, serve it through CloudFront with a response headers policy.Nginx / Apache
Serve the
dist folder directly. Requires adding COOP/COEP headers to the server config.Kubernetes
Deploy with Helm. The official image serves on port 8080 and includes all required headers.
Air-Gapped
For networks with no internet access. Bundle everything with the included
prepare-airgap.sh script.Configuration
All environment variables and build arguments for WASM URLs, branding, language, OCR, and more.
System requirements
| Requirement | Minimum |
|---|---|
| Storage | ~100 MB (core app; WASM modules are fetched at runtime) |
| RAM | 512 MB |
| CPU | Any modern processor |
Building from source
If you want to customize BentoPDF before deploying, build it from source:dist/ folder. Alternatively, download a pre-built dist-{version}.zip from GitHub Releases to skip the build step entirely.
Next steps
- Docker deployment: Docker Deployment
- Static platforms: Static Hosting Platforms
- All configuration options: Configuration
- No-internet networks: Air-Gapped Deployment
