GoEditPDF is a powerful, secure, and 100% client-side PDF editor built with modern web technologies. Edit, merge, sign, and secure PDF documents directly in your browser without uploading any data to a server.
🚀 Live Demo: https://goeditpdf.com
- Merge PDFs: Combine multiple documents into a single file
- Page Management: Reorder, rotate, delete, or extract specific pages
- Range Extraction: Split documents by selecting custom page ranges
- Add Text & Images: Insert content anywhere with customizable fonts and colors
- Drawing Tools: Freehand drawing, highlighting, shapes (rectangles, circles, lines)
- Whiteout: Redact sensitive information easily
- Local Processing: Files processed entirely in browser using WebAssembly - no server upload
- Encryption: Password-protect PDFs with AES-256 encryption
- Watermarking: Add custom text watermarks to all pages
- E-Signature: Draw and place signatures directly on documents
- OCR (Optical Character Recognition): Extract text from scanned documents using Tesseract.js
- Multilingual Support: Interface in English 🇬🇧, French 🇫🇷, and Spanish 🇪🇸
- Responsive Design: Optimized for desktop, tablet, and mobile devices
frontend/
├── assets/
│ ├── css/
│ │ ├── main.css # Homepage & landing page styles
│ │ ├── editor.css # PDF editor core styles
│ │ └── mobile.css # Responsive mobile optimizations
│ ├── js/
│ │ ├── main.js # Homepage interactions (mobile menu, etc.)
│ │ ├── article-loader.js # Blog article translation loader
│ │ └── articles-translations.js # Blog content translations
│ └── img/ # Static assets (favicons, illustrations)
├── pages/
│ ├── editor.html # 🎯 PDF Editor (main application)
│ ├── blog.html # Blog listing page
│ ├── article.html # Dynamic blog post viewer
│ ├── article-*.html # Individual blog articles
│ ├── features.html # Features showcase page
│ ├── about.html # About page
│ ├── contact.html # Contact form
│ └── privacy.html # Legal pages
└── index.html # Landing page with SEO optimization
Built with Vanilla JavaScript for maximum performance and zero build-step complexity.
| Technology | Purpose | Version |
|---|---|---|
| pdf-lib | PDF creation & modification | 1.17.1 |
| pdf.js | PDF rendering | 3.11.174 |
| fabric.js | Interactive canvas editing | 5.3.1 |
| tesseract.js | OCR text recognition | 4.0+ |
- Modern web browser (Chrome, Firefox, Safari, Edge)
- No Node.js or backend server required
-
Clone the repository
git clone https://github.com/yourusername/goeditpdf.git cd goeditpdf -
Run locally
Use any static file server:# Option 1: Python python3 -m http.server 8000 # Option 2: PHP php -S localhost:8000 # Option 3: Node.js (http-server) npx http-server -p 8000
-
Access the app
Openhttp://localhost:8000/frontend/index.htmlin your browser
User drops PDF → FileReader API reads bytes → pdf.js renders pages →
fabric.js creates interactive canvas for each page → User edits →
pdf-lib generates final PDF with edits → User downloads
User clicks OCR → Current page canvas exported as image →
Tesseract.js analyzes image → Text extracted and displayed →
User can copy/paste text
How OCR Works Technically:
- Canvas rendered page converted to PNG data URL
- Tesseract.js loads trained data for language recognition
- Image preprocessing (binarization, noise reduction)
- Character segmentation and pattern matching
- Text output with ~95% accuracy for good quality scans
User sets password → pdf-lib generates PDF → encrypt() method
applies AES-256 encryption → Encrypted PDF downloaded →
Password required to open
Note: Encryption relies on browser capabilities. Some browsers may not support all encryption features.
User draws on HTML5 canvas → fabric.js captures signature →
Converted to PNG image → Image embedded in PDF at specified
coordinates → Signature becomes part of document
- Push code to GitHub
- Import project into Vercel
- Set Root Directory to
frontend - Deploy!
- Connect GitHub repository
- Set Base directory to
frontend - Set Publish directory to
.(current dir) - Deploy!
- Go to repository Settings → Pages
- Select branch
mainand folder/frontend - Save and wait for deployment
GoEditPDF operates on a privacy-first architecture:
- ✅ No Server Upload: All processing happens in browser memory
- ✅ No Tracking: No analytics or user document storage
- ✅ Open Source: Full code transparency
- ✅ HTTPS Only: Secure connection required for production
Security Best Practices:
- Files never leave your device
- WebAssembly sandboxed execution
- Local encryption for sensitive documents
- No third-party data sharing
Main application file containing:
- Canvas rendering logic for PDF pages
- fabric.js integration for interactive editing
- Tool state management (text, draw, shapes, etc.)
- File merge, rotate, delete operations
- Download/export functionality
Key Functions:
loadPdfSource()- Loads and renders PDF using pdf.jscreatePageCanvas()- Creates editable canvas per pagegeneratePDF()- Compiles edits and exports final PDFperformOCR()- Runs Tesseract.js text extractionaddWatermark()- Applies text watermark to all pages
Contains styles for:
- Landing page hero section
- Feature cards and grids
- Navigation bar
- Footer
- Responsive breakpoints
- Call-to-action sections
Contains styles for:
- PDF viewer area (
.scroll-area) - Toolbar and sidebar (
.sidebar) - Floating properties panel (
.floating-props) - Canvas wrappers (
.page-wrapper) - Button styles (
.btn-tool,.btn-primary) - Upload screen (
.upload-zone)
Mobile-specific optimizations:
- Hamburger menu sidebar overlay
- Bottom sheet properties panel
- Touch-friendly button sizes (44px minimum)
- Safe area insets for iPhone X+
- Landscape mode adjustments
Contributions welcome! Please follow these guidelines:
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Code Style:
- Use vanilla JavaScript (no frameworks)
- Follow existing code formatting
- Add comments for complex logic
- Test on mobile and desktop
Distributed under the MIT License. See LICENSE for more information.
[IDRISSI Hafid]
- LinkedIn: linkedin.com/in/hafid-idrissi
- Email: idrissihafez@gmail.com(idrissihafez@gmail.com)
- pdf-lib - Excellent PDF manipulation library
- Mozilla PDF.js - Industry-standard PDF rendering
- fabric.js - Powerful canvas library
- Tesseract.js - OCR made simple
Made with ❤️ for the open-source community