https://github.com/ez-biz/easy-pdf
Free online PDF tools — merge, split, compress, convert, OCR, and more. 100% client-side processing, your files never leave your device.
https://github.com/ez-biz/easy-pdf
js nodejs pdf pdf-editor pdf-processing
Last synced: about 1 month ago
JSON representation
Free online PDF tools — merge, split, compress, convert, OCR, and more. 100% client-side processing, your files never leave your device.
- Host: GitHub
- URL: https://github.com/ez-biz/easy-pdf
- Owner: ez-biz
- License: mit
- Created: 2026-01-19T05:52:11.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-04-01T17:37:17.000Z (3 months ago)
- Last Synced: 2026-04-02T03:37:53.674Z (3 months ago)
- Topics: js, nodejs, pdf, pdf-editor, pdf-processing
- Language: JavaScript
- Homepage: https://easypdf.biz
- Size: 2.85 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Roadmap: ROADMAP.md
Awesome Lists containing this project
README
# EasyPDF - Free Online PDF Tools
A modern, privacy-focused PDF manipulation suite built with Next.js 15. All processing happens client-side in your browser - your files never leave your device.
[](https://nextjs.org/)
[](https://www.typescriptlang.org/)
[](https://zustand-demo.pmnd.rs/)
[](LICENSE)
## ✨ Features
### 17 Complete PDF Tools
| Category | Tools | Status |
|----------|-------|--------|
| **Organize** | Merge PDFs, Split PDF, Rotate Pages | ✅ Live |
| **Convert** | PDF to Image, Image to PDF | ✅ Live |
| **Optimize** | Compress PDF | ✅ Live |
| **Edit** | Add Watermark, Add Page Numbers, Remove Pages, Extract Pages, Edit Metadata, Add Text, Add Image, **Sign PDF** | ✅ Live |
| **Security** | Password Protect PDF, Unlock PDF | ✅ Live |
### Core Features
- 🔒 **100% Client-Side Processing** - Files never leave your browser
- 🎯 **State Management** - Zustand for settings, activity tracking & preferences
- 🎉 **Toast Notifications** - Real-time feedback with animated notifications
- 🌙 **Dark Mode** - Persistent theme with automatic detection
- 🚀 **Performance Optimized** - Next.js Image optimization & lazy loading
- 📱 **Fully Responsive** - Works seamlessly on all devices
- ♿ **Accessible** - WCAG compliant with keyboard navigation
- 💾 **LocalStorage Persistence** - Settings & recent activity saved
- 🎨 **Modern UI/UX** - Beautiful interface with Framer Motion animations
- 📄 **Legal Pages** - Privacy Policy, Terms of Service, Contact
## 🚀 Getting Started
### Prerequisites
- Node.js 18.x or higher
- npm, yarn, or pnpm
### Installation
```bash
# Clone the repository
git clone https://github.com/ez-biz/easy-pdf.git
cd easy-pdf
# Install dependencies
npm install
# Run development server
npm run dev
```
Open [http://localhost:3000](http://localhost:3000) in your browser.
### Build for Production
```bash
# Create optimized production build
npm run build
# Start production server
npm start
# Or deploy to Vercel (recommended)
vercel deploy
```
## 🏗️ Tech Stack
### Core
- **Framework:** Next.js 15.5.9 (App Router)
- **Language:** TypeScript 5+
- **Styling:** Tailwind CSS 3.4
- **State Management:** Zustand 5.0 (with persistence)
### Libraries
- **PDF Processing:** pdf-lib (client-side manipulation)
- **Animations:** Framer Motion 11+
- **Icons:** Lucide React
- **File Handling:** react-dropzone
### Features
- **Toast System:** Custom context with auto-dismiss
- **Dark Mode:** Persistent theme switching
- **Image Optimization:** Next.js Image component
- **Type Safety:** Strict TypeScript configuration
## 📁 Project Structure
```
easy-pdf/
├── src/
│ ├── app/
│ │ ├── (tools)/ # Tool pages (merge, split, etc.)
│ │ ├── docs/ # Documentation site (MDX)
│ │ ├── layout.tsx # Root layout with providers
│ │ └── page.tsx # Homepage
│ ├── components/
│ │ ├── layout/ # Header, Footer, ToolLayout
│ │ ├── tools/ # FileUploader, DownloadButton
│ │ └── ui/ # Button, ProgressBar, Toast
│ ├── contexts/
│ │ └── ToastContext.tsx # Toast notification provider
│ ├── store/
│ │ └── useAppStore.ts # Zustand global state
│ ├── lib/
│ │ ├── pdf/ # PDF utilities (merge, split, etc.)
│ │ ├── constants.ts # App constants & tool definitions
│ │ └── utils.ts # Helper functions
│ └── types/
│ └── tools.ts # TypeScript type definitions
├── public/ # Static assets
├── .gitignore # Git ignore patterns
├── LICENSE # MIT License
└── README.md # This file
```
## 🎯 Key Features Explained
### 1. Client-Side Processing
All PDF operations happen in your browser using `pdf-lib`:
- ✅ **Zero Server Costs** - No backend required
- ✅ **Complete Privacy** - Files never uploaded
- ✅ **Offline Capable** - Works after initial load
- ✅ **Fast Processing** - No network latency
- ✅ **Unlimited Usage** - No file size restrictions
### 2. State Management (Zustand)
Lightweight, powerful state management:
```typescript
const { settings, toggleDarkMode, addActivity } = useAppStore();
```
- **Settings:** Dark mode, default page sizes, compression levels
- **Activity:** Track last 10 PDF operations
- **Stats:** Total files processed
- **Persistent:** Auto-saved to localStorage
### 3. Toast Notifications
Elegant feedback system with 4 types:
- ✅ **Success** - Operation completed
- ❌ **Error** - Operation failed
- ⚠️ **Warning** - User attention needed
- ℹ️ **Info** - Process updates
### 4. PDF Tools
#### Organize Tools
- **Merge PDFs** - Combine multiple PDFs with drag-and-drop reordering
- **Split PDF** - Extract pages or split by page count
- **Rotate Pages** - Rotate individual or all pages (90°, 180°, 270°)
#### Convert Tools
- **PDF to Image** - Export pages as JPG/PNG with quality settings
- **Image to PDF** - Convert multiple images with page size options
#### Optimize
- **Compress PDF** - Reduce file size while maintaining quality
#### Edit Tools
- **Add Watermark** - Text or image watermarks with positioning
- **Add Page Numbers** - Customizable page numbering
- **Remove Pages** - Select and delete specific pages
- **Extract Pages** - Create new PDF from selected pages
- **Edit Metadata** - View and modify PDF title, author, subject, and keywords
- **Add Text** - Insert text boxes with custom fonts, colors, and positioning
- **Add Image** - Overlay images on PDF pages with resizing and rotation
#### Security
- **Protect PDF** - Add password protection (note: client-side limitation)
- **Unlock PDF** - Remove password from protected PDFs
## 🔧 Available Scripts
| Command | Description |
|---------|-------------|
| `npm run dev` | Start development server on port 3000 |
| `npm run build` | Build optimized production bundle |
| `npm start` | Run production server |
| `npm run lint` | Run ESLint with Next.js config |
## 🔐 Security & Privacy
### What We Track
- ✅ **Anonymous Analytics** (optional) - Page views only
- ✅ **LocalStorage** - User preferences & settings
- ❌ **No File Upload** - Files stay on your device
- ❌ **No User Data** - No accounts or personal info
- ❌ **No Cookies** - Except essential preferences
### Data You Control
All data stored locally via `localStorage`:
- Theme preferences (dark/light mode)
- Default tool settings
- Recent activity (tool names & timestamps only)
- Usage statistics
## 🚢 Deployment
### Vercel (Recommended)
```bash
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel
```
### Other Platforms
Works on any platform supporting Next.js:
- Netlify
- AWS Amplify
- Cloudflare Pages
- Docker
## 🤝 Contributing
Contributions welcome! Please follow these steps:
1. Fork the repository
2. Create feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit changes (`git commit -m 'Add AmazingFeature'`)
4. Push to branch (`git push origin feature/AmazingFeature`)
5. Open Pull Request
### Development Guidelines
- Follow TypeScript strict mode
- Use ESLint configuration provided
- Write meaningful commit messages
- Update documentation as needed
## 📄 License
This project is licensed under the MIT License - see [LICENSE](LICENSE) for details.
## 🙏 Acknowledgments
### Core Libraries
- [pdf-lib](https://pdf-lib.js.org/) - PDF manipulation
- [Next.js](https://nextjs.org/) - React framework
- [Zustand](https://zustand-demo.pmnd.rs/) - State management
- [Tailwind CSS](https://tailwindcss.com/) - Styling
- [Framer Motion](https://www.framer.com/motion/) - Animations
- [Lucide](https://lucide.dev/) - Icons
### Inspiration
- Privacy-first design philosophy
- Modern web application standards
- User-centric PDF tools
## 📊 Stats
- **Bundle Size:** ~147 KB (gzipped)
- **Lighthouse Score:** 95+ Performance
- **TypeScript Coverage:** 100%
- **Tools Available:** 12
- **Supported Formats:** PDF, JPG, PNG, WEBP, GIF, BMP
## 📞 Support
- **Issues:** [GitHub Issues](https://github.com/ez-biz/easy-pdf/issues)
- **Contact:** [Contact Page](/contact)
- **Documentation:** See [`/docs`](/docs) for detailed architectural and feature documentation.
---
**Made with ❤️ by ez-biz** • **Privacy First** • **100% Open Source**