Frontend-only PDF merger built with React + Vite + TypeScript.
Drag & drop PDFs, reorder them visually, and merge into a single file - all locally in your browser.
No server. No uploads. 100% client-side.
👉 Live demo: kraspel.com/pdf-tools
- 📂 Drag & Drop PDFs into the page
- 🔀 Reorder PDFs via drag-and-drop (powered by @dnd-kit)
- 📄 Thumbnail previews of the first page
- 📝 Rename output file before downloading
- ⚡ Fast & secure - all work is done in your browser using:
pdf-lib(merging pages)pdfjs-dist(rendering thumbnails)
- 🛡️ Privacy-friendly - your PDFs never leave your device
Clone the repo and install dependencies:
git clone https://github.com/yourusername/pdf-tools.git
cd pdf-tools
npm installRun in development mode:
npm run devBuild for production:
npm run buildPreview the build:
npm run previewpdf-tools/
├── public/ # static assets (favicon, logo, etc.)
├── src/
│ ├── components/ # UI components (e.g. SortableCard)
│ ├── lib/ # PDF helpers (fileToBytes, makeThumb, types)
│ └── App.tsx # main app logic
├── vite.config.ts
├── index.html
└── package.json
- React + Vite + TypeScript
- Tailwind CSS (utility-first styling)
- @dnd-kit (sortable drag & drop)
- pdf-lib (PDF manipulation)
- pdfjs-dist (PDF parsing + thumbnails)
- Open the app in your browser (demo link).
- Drop one or more PDFs into the upload box.
- Reorder them as needed.
- Set an output filename (optional).
- Click Merge PDFs and download the merged file.
MIT License © 2025 \Tal Kramer