A free, open-source web application for PDF. Edit, merge, split, arrange, draw on, and convert PDFs to images—all without subscriptions or watermarks.

- React - UI library
- Next.js - React framework with SSR and static generation
- TypeScript - Type-safe development
- pdfjs-dist - PDF rendering and viewing
- pdf-lib - PDF manipulation and creation
- Tailwind CSS 4 - Utility-first CSS framework
- Radix UI - Headless UI components
- Shadcn - Component library built on Radix UI
- Lucide React - Icon library
- Framer Motion - Animation library
- jszip - ZIP file handling
- nuqs - URL search params state management
- Sonner - Toast notifications
- Tailwind Merge - Utility class merging
- clsx - Conditional className utility
- Node.js 18 or higher
- pnpm (or npm/yarn, but pnpm is recommended)
- Clone the repository:
git clone https://github.com/yourusername/pdf-tools.git
cd pdf-tools- Install dependencies:
pnpm installThis automatically runs the postinstall hook to set up the PDF.js worker file.
Development Server
pnpm devOpen http://localhost:3000 in your browser.
Production Build
pnpm build
pnpm startLinting
pnpm lint- Edit PDF - Modify text, add annotations, and edit PDF content
- Draw on PDFs - Add freehand drawings and markup to documents
- Merge PDFs - Combine multiple PDF files into one
- Split PDFs - Extract specific pages or split documents
- Arrange Pages - Reorder and reorganize PDF pages
- Convert to Images - Export PDF pages as PNG/JPG images
- Full-Page PDF Viewer - Open remote PDFs at
/viewer?url=https://...and render all pages on high-quality canvas
- Watermark PDFs - Add text and image watermarks to documents
- Compress PDFs - Reduce file size while maintaining quality
- Extract Text - OCR support for scanned documents
- Form Filling - Interactive form field support
- Digital Signatures - Sign and verify document signatures
- Batch Processing - Process multiple files at once
The app now includes a dedicated full-page PDF viewer route:
/viewer?url=https://pub-69efd47650a0420f8446677d9eef8f8f.r2.dev/portfolio/Niraj_Pradhan_Resume.pdf- Renders pages using
pdf.json<canvas>(no iframe) - Uses a same-origin proxy endpoint (
/api/pdf) to avoid browser CORS issues - Applies high-resolution rendering for sharper text quality
For local development, localhost PDF URLs are allowed through the proxy, for example:
/viewer?url=http://localhost:3000/Niraj_Pradhan_Resume.pdfIn production, localhost/private hostnames remain blocked.
src/
├── app/ # Next.js app directory and pages
├── components/ # React components
│ ├── tools/ # PDF tool components (Edit, Draw, Merge, etc.)
│ └── ui/ # UI components (buttons, dialogs, etc.)
├── hooks/ # Custom React hooks
└── lib/ # Utility functions and helpers
We welcome contributions! Here's how to get involved:
- Fork the repository
- Create a new branch:
git checkout -b feature/your-feature-name- Install dependencies and run the dev server:
pnpm install
pnpm dev- Keep changes focused and atomic
- Run linting before committing:
pnpm lint- Follow the existing code style (TypeScript, functional components)
- Commit your changes with clear messages
- Push to your fork
- Open a pull request with a description of your changes
- Ensure all linting passes
This project is open source and available under the MIT License.
If you find this tool helpful, please consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs and issues
- 💡 Suggesting new features
- 🤝 Contributing code improvements