A privacy-first PDF toolkit built with Next.js. The app currently includes 18 browser-based tools for splitting, merging, editing, annotating, converting, and securing PDFs without uploading files to a server.
Live demo: arungupta1526.github.io/pdf-tools
- 100% local processing in the browser
- 18 PDF tools in one app
- Live previews for visual tools like invert, grayscale, watermark, page numbers, and signatures
- Progress feedback for heavier operations
- Cancel controls during long-running processing flows
- Static Next.js app with Docker support for self-hosting
Split PDF- Extract selected pages or ranges and export as a merged PDF or ZIP.Merge PDFs- Combine multiple PDFs and reorder inputs before merging.Remove Pages- Select pages visually and export the remaining document.Rotate Pages- Rotate all pages globally or adjust individual pages.Pages Per Sheet- Create N-up layouts with presets or custom rows and columns.Reorder Pages- Drag and drop page thumbnails into a new order.
Invert Colors- Invert PDF pages with presets, custom tinting, and preview.Grayscale PDF- Convert a PDF to black and white with preview.Images to PDF- Turn JPG, PNG, and WebP images into a PDF and reorder them first.
Compress PDF- Reduce file size with presets or a target size.Page Numbers- Add page numbers with adjustable style and placement.Watermark- Add configurable text watermarks.Sign PDF- Draw or type a signature and place it on a page.Edit PDF- Add, move, resize, and remove signature or image layers.Edit Metadata- Update title, author, subject, keywords, creator, and producer fields.
Protect PDF- Apply password protection and permission controls.Unlock PDF- Remove password protection when the password is known.Extract Text- Read text from a PDF, copy it, or download it as.txt.
All PDF processing happens client-side in the browser using JavaScript libraries such as pdf-lib, pdfjs-dist, and jszip. Files are not uploaded to a backend for processing.
For longer tasks, the UI shows progress and supports cancellation. Cancellation is cooperative, so work stops at the next processing checkpoint rather than in the middle of a synchronous render step.
Next.js 16React 19TypeScriptTailwind CSS 4pdf-libpdfjs-distjsziplucide-react
- Clone the repository:
git clone https://github.com/arungupta1526/pdf-tools.git
cd pdf-tools- Install dependencies:
npm install- Start the development server:
npm run dev- Open
http://localhost:3000
npm run build
npm run startThis project uses output: "export", so npm run start serves the generated out/ folder with a small static Node server.
npm run lintDocker support is included for local deployment and self-hosting.
See DOCKER.md for the full guide.
Quick start:
docker build -t pdf-tools .
docker run -p 3000:3000 pdf-tools- The app is built with the Next.js App Router.
- Each tool lives under its own route in
src/app. - The landing page automatically reflects the current number of tools from the in-app tool list.
- GitHub: github.com/arungupta1526
- LinkedIn: linkedin.com/in/arungupta1526
MIT