BentoPDF
BentoPDF is a powerful, privacy-first, client-side PDF toolkit that is self hostable and allows you to manipulate, edit, merge, and process PDF files directly in your browser. No server-side processing is required, ensuring your files remain secure and private.
π Licensing
BentoPDF is dual-licensed:
- AGPL-3.0 for open-source projects where you share your full source code publicly
- Commercial License for proprietary/closed-source applications - Get Lifetime License for $49 (a one-time lifetime purchase, includes all feature updates forever)
For more details, see our Licensing Page
β Stargazers over time
β¨ Why BentoPDF?
- Privacy First: All processing happens in your browser. Your files are never uploaded to a server, guaranteeing 100% privacy.
- No Limits: Manipulate as many files as you want, as often you want. There are no restrictions or upload limits.
- High Performance: Built with modern web technologies, BentoPDF is fast and efficient, handling even large PDF files with ease.
- Completely Free: BentoPDF is a free and open-source tool for everyone.
π οΈ Features / Tools Supported
BentoPDF offers a comprehensive suite of tools to handle all your PDF needs.
Organize & Manage PDFs
| Tool Name | Description |
|---|---|
| Merge PDFs | Combine multiple PDF files into one. |
| Split PDFs | Extract specific pages or divide a document into smaller files. |
| Organize Pages | Reorder, duplicate, or delete pages with a simple drag-and-drop interface. |
| Extract Pages | Save a specific range of pages as a new PDF. |
| Delete Pages | Remove unwanted pages from your document. |
| Rotate PDF | Rotate individual or all pages in a document. |
| N-Up PDF | Combine multiple pages onto a single page. |
| View PDF | A powerful, integrated PDF viewer. |
| Alternate & Mix pages | Merge pages by alternating pages from each PDF. |
| Posterize PDF | Split a PDF into multiple smaller pages for print. |
| PDF Multi Tool | Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface. |
| Add Attachments | Embed one or more files into your PDF. |
| Extract Attachments | Extract all embedded files from PDF(s) as a ZIP. |
| Edit Attachments | View or remove attachments in your PDF. |
| Divide Pages | Divide pages horizontally or vertically. |
| Combine to Single Page | Stitch all pages into one continuous scroll. |
| Add Blank Page | Insert an empty page anywhere in your PDF. |
| Reverse Pages | Flip the order of all pages in your document. |
| View Metadata | Inspect the hidden properties of your PDF. |
| PDFs to ZIP | Package multiple PDF files into a ZIP archive. |
| Compare PDFs | Compare two PDFs side by side. |
Edit & Modify PDFs
| Tool Name | Description |
|---|---|
| PDF Editor | A comprehensive editor to modify your PDFs. |
| Create Fillable Forms | Create professional fillable PDF forms with text fields, checkboxes, dropdowns, radio buttons, signatures, and more. Fully compliant with PDF standards for compatibility with all PDF viewers. |
| Add Page Numbers | Easily add page numbers with customizable formatting. |
| Add Watermark | Add text or image watermarks to protect your documents. |
| Header & Footer | Add customizable headers and footers. |
| Crop PDF | Crop specific pages or the entire document. |
| Invert Colors | Invert the colors of your PDF pages for better readability. |
| Change Background | Modify the background color of your PDF. |
| Change Text Color | Change the color of text content within the PDF. |
| Fill Forms | Fill out PDF forms directly in your browser. |
| Flatten PDF | Flatten form fields and annotations into static content. |
| Remove Annotations | Remove comments, highlights, and other annotations. |
| Remove Blank Pages | Auto detect and remove blank pages in a PDF. |
| Edit Bookmarks | Add, Edit, Create, Import and Export PDF Bookmarks. |
| Add Stamps | Add image stamps to your PDF using the annotation toolbar. |
| Table of Contents | Generate a table of contents page from PDF bookmarks. |
| Redact Content | Permanently remove sensitive content from your PDFs. |
Convert to PDF
| Tool Name | Description |
|---|---|
| Image to PDF | Convert JPG, PNG, WebP, SVG, BMP, HEIC, and TIFF images to PDF. |
| JPG to PDF | Convert JPG images to PDF. |
| PNG to PDF | Convert PNG images to PDF. |
| WebP to PDF | Convert WebP images to PDF. |
| SVG to PDF | Convert SVG images to PDF. |
| BMP to PDF | Convert BMP images to PDF. |
| HEIC to PDF | Convert HEIC images to PDF. |
| TIFF to PDF | Convert TIFF images to PDF. |
| Markdown to PDF | Convert .md files into professional PDF documents. |
| Text to PDF | Convert plain text files into a PDF. |
| JSON to PDF | Convert JSON to PDF. |
Convert from PDF
| Tool Name | Description |
|---|---|
| PDF to Image | Convert PDF pages to JPG, PNG, WebP, BMP, or TIFF formats. |
| PDF to JPG | Convert each PDF page into a JPG image. |
| PDF to PNG | Convert each PDF page into a PNG image. |
| PDF to WebP | Convert each PDF page into a WebP image. |
| PDF to BMP | Convert each PDF page into a BMP image. |
| PDF to TIFF | Convert each PDF page into a TIFF image. |
| PDF to Greyscale | Convert a color PDF into a black-and-white version. |
| OCR PDF | Make scanned PDFs searchable and copyable using Optical Character Recognition. |
| PDF to JSON | Convert PDF files to JSON format. |
Secure & Optimize PDFs
| Tool Name | Description |
|---|---|
| Compress PDF | Reduce file size while maintaining quality. |
| Repair PDF | Attempt to repair and recover data from a corrupted PDF. |
| Encrypt PDF | Add a password to protect your PDF from unauthorized access. |
| Decrypt PDF | Remove password protection from a PDF (password required). |
| Change Permissions | Set or modify user permissions for printing, copying, and editing. |
| Sign PDF | Add your digital signature to a document. |
| Redact Content | Permanently remove sensitive content from your PDFs. |
| Edit Metadata | View and modify PDF metadata (author, title, keywords, etc.). |
| Remove Metadata | Strip all metadata from your PDF for privacy. |
| Linearize PDF | Optimize PDF for fast web view. |
| Sanitize PDF | Remove potentially unwanted or malicous files from PDF. |
| Fix Page Size | Standardize all pages to a uniform size. |
| Page Dimensions | Analyze page size, orientation, and units. |
| Remove Restrictions | Remove password protection and security restrictions associated with digitally signed PDF files. |
π Getting Started
You can run BentoPDF locally for development or personal use.
Prerequisites
- Node.js (v18 or higher recommended)
- npm (or yarn/pnpm)
- Docker & Docker Compose (for containerized setup)
π Quick Start with Docker
You can run BentoPDF directly from Docker Hub or GitHub Container Registry without cloning the repository:
You can also watch the video on how to set it up π BentoPDF Docker Setup
Using Docker Hub:
docker run -p 3000:8080 bentopdf/bentopdf:latestUsing GitHub Container Registry:
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latestOpen your browser at: http://localhost:3000
This is the fastest way to try BentoPDF without setting up a development environment.
π Self-Hosting
Since BentoPDF is fully client-side, all processing happens in the user's browser and no server-side processing is required. This means you can host BentoPDF as simple static files on any web server or hosting platform.
Download from Releases (Recommended):
The easiest way to self-host is to download the pre-built distribution file from our GitHub releases. Each release includes a dist-{version}.zip file that contains all necessary files for self-hosting.
- Go to BentoPDF Releases
- Download the latest
dist-{version}.zipfile - Extract the zip file
- Serve the extracted folder with your preferred web server
Navigate to the extracted Folder:
# Navigate to the extracted folder
cd dist-1.7.3 # Replace with your versionServe with Python:
# For Python 3
python -m http.server 8000The website can be accessible at: http://[::1]:8000/
Serve with Node.js:
# Install a simple server
npx serve .
# Or if you have serve installed globally
npm install -g serve
serve .The website can be accessible at: http://localhost:3000/
Serve with other tools:
You can also use other static file servers like:
- Go:
go run main.gowith a simple Go server - PHP:
php -S localhost:8000 - Ruby:
ruby -run -e httpd . -p 8000
The website can be accessible at:
- Go:
http://localhost:8080/(default) or as specified - PHP:
http://localhost:8000/ - Ruby:
http://localhost:8000/(default port can be changed)
Simply serve the extracted folder using any static file server, and BentoPDF will work completely client-side without any server-side dependencies.
Build from Source (Advanced):
If you prefer to build from source:
# Clone the repository
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
# Install dependencies
npm install
# Build the project
npm run build
# Package the distribution for hosting (optional)
npm run package
# Serve the dist folder
npx serve distThe website can be accessible at: http://localhost:3000/
The npm run package command creates a dist-{version}.zip file that you can use for self-hosting.
π Run with Docker Compose (Recommended)
For a more robust setup with auto-restart capabilities:
- Download the repo and create a
docker-compose.ymlfile or use the one given in repo:
services:
bentopdf:
image: bentopdf/bentopdf:latest
container_name: bentopdf
ports:
- '3000:8080'
restart: unless-stopped- Start the application:
docker-compose up -dThe application will be available at http://localhost:3000.
π’ Simple Mode for Internal Use
For organizations that want a clean, distraction-free interface focused solely on PDF tools, BentoPDF supports a Simple Mode that hides all branding and marketing content.
What Simple Mode does:
- Hides navigation, hero section, features, FAQ, testimonials, and footer
- Shows only the essential PDF tools
- Updates page title to "PDF Tools"
- Perfect for internal company tools and educational institutions
For more details, see SIMPLE_MODE.md.
π Security Features
BentoPDF runs as a non-root user using nginx-unprivileged for enhanced security:
- Non-Root Execution: Container runs with minimal privileges using nginx-unprivileged
- Port 8080: Uses high port number to avoid requiring root privileges
- Security Best Practices: Follows Principle of Least Privilege
Basic Usage
docker build -t bentopdf .
docker run -p 8080:8080 bentopdfFor detailed security configuration, see SECURITY.md.
π¦ Version Management
BentoPDF supports semantic versioning with multiple Docker tags available on both Docker Hub and GitHub Container Registry:
Docker Hub:
- Latest:
bentopdf/bentopdf:latest - Specific Version:
bentopdf/bentopdf:1.0.0 - Version with Prefix:
bentopdf/bentopdf:v1.0.0
GitHub Container Registry:
- Latest:
ghcr.io/alam00000/bentopdf:latest - Specific Version:
ghcr.io/alam00000/bentopdf:1.0.0 - Version with Prefix:
ghcr.io/alam00000/bentopdf:v1.0.0
Quick Release
# Release a patch version (0.0.1 β 0.0.2)
npm run release
# Release a minor version (0.0.1 β 0.1.0)
npm run release:minor
# Release a major version (0.0.1 β 1.0.0)
npm run release:majorFor detailed release instructions, see RELEASE.md.
π Development Setup
Option 1: Run with npm
-
Clone the Repository:
git clone https://github.com/alam00000/bentopdf.git cd bentopdf -
Install Dependencies:
npm install
-
Run the Development Server:
npm run dev
The application will be available at
http://localhost:5173.
Option 2: Build and Run with Docker Compose
-
Clone the Repository:
git clone https://github.com/alam00000/bentopdf.git cd bentopdf -
Run with Docker Compose:
docker-compose -f docker-compose.dev.yml up -d
The application will be available at
http://localhost:3000.Note: After making any local changes to the code, rebuild the Docker image using:
docker-compose -f docker-compose.dev.yml up --build -d
This ensures your latest changes are applied inside the container.
π οΈ Tech Stack & Background
BentoPDF was originally built using HTML, CSS, and vanilla JavaScript. As the project grew, it was migrated to a modern stack for better maintainability and scalability:
- Vite: A fast build tool for modern web development.
- TypeScript: For type safety and an improved developer experience.
- Tailwind CSS: For rapid and consistent UI development.
Note: Some parts of the codebase still use legacy structures from the original implementation. Contributors should expect gradual updates as testing and refactoring continue.
πΊοΈ Roadmap
Planned Features:
- HTML to PDF: Convert HTML files or web pages into PDF documents.
- Markdown to PDF: Enhanced support for converting
.mdfiles to PDF. - Convert to PDF/A: Convert PDFs to the PDF/A archival format.
- Edit PDF Content: Directly edit text and other content within your PDF.
- PDF to Office: Converts PDF files into editable Word, Excel, and PowerPoint formats.
- Office to PDF: Converts Word, Excel, and PowerPoint documents into optimized PDFs.
Contributions and discussions on the roadmap are welcome! Join the conversation via Discord.
π€ Contributing
We welcome contributions from the community! Here's how you can get started:
- Fork the repository and create your branch from
main. - Follow the Getting Started steps to set up your local environment.
- Make your changes and commit them with a clear message.
- Open a Pull Request and describe the changes you've made.
Have an idea for a new tool or an improvement? Open an issue to discuss it first.
Special Thanks
BentoPDF wouldn't be possible without the amazing open-source tools and libraries that power it. We'd like to extend our heartfelt thanks to the creators and maintainers of:
- PDFLib.js β For enabling powerful client-side PDF manipulation.
- PDF.js β For the robust PDF rendering engine in the browser.
- PDFKit β For creating and editing PDFs with ease.
- EmbedPDF β For seamless PDF editing in pure JS.
- Cropper.js β For intuitive image cropping functionality.
- Vite β For lightning-fast development and build tooling.
- Tailwind CSS β For rapid, flexible, and beautiful UI styling.
- qpdf and qpdf-wasmβ A powerful command-line tool and library for inspecting, repairing, and transforming PDF file ported to wasm
- cpdf β For content preserving pdf operations.
Your work inspires and empowers developers everywhere. Thank you for making open-source amazing!
