https://github.com/moayaan1911/pdftools
18 free PDF tools that run entirely in your browser. Zero server, zero signup, 100% private.
https://github.com/moayaan1911/pdftools
client-side nextjs pdf pdf-converter pdf-parser pdfjs
Last synced: 1 day ago
JSON representation
18 free PDF tools that run entirely in your browser. Zero server, zero signup, 100% private.
- Host: GitHub
- URL: https://github.com/moayaan1911/pdftools
- Owner: moayaan1911
- Created: 2026-06-01T14:39:48.000Z (11 days ago)
- Default Branch: main
- Last Pushed: 2026-06-01T15:13:06.000Z (11 days ago)
- Last Synced: 2026-06-01T17:05:16.966Z (11 days ago)
- Topics: client-side, nextjs, pdf, pdf-converter, pdf-parser, pdfjs
- Language: TypeScript
- Homepage: https://18pdf.vercel.app
- Size: 13.6 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# ๐จโ๐ป About the Developer
Assalamualaikum guys! ๐ This is Mohammad Ayaan Siddiqui (โฆmoayaan.ethโฆ). Iโm a **Full Stack Blockchain Developer** , **Crypto Investor** and **MBA in Blockchain Management** with **2 years of experience** rocking the Web3 world! ๐ Iโve worn many hats:
- Research Intern at a Hong Kong-based firm ๐ญ๐ฐ
- Founding Engineer at a Netherlands-based firm ๐ณ๐ฑ
- Full Stack Intern at a Singapore-based crypto hardware wallet firm ๐ธ๐ฌ
- Blockchain Developer at a US-based Bitcoin DeFi project ๐บ๐ธ
- PG Diploma in Blockchain Management from Cambridge International Qualifications (CIQ) ๐ฌ๐ง
- MBA in Blockchain Management from University of Studies Guglielmo Marconi, Italy ๐ฎ๐น
Letโs connect and build something epic! Find me at [moayaan.com](https://moayaan.com) ๐ or on [X @moayaan1911](https://x.com/moayaan1911)
---
# 18PDF
**18 free PDF tools that run entirely in your browser. Zero server, zero signup, 100% private.**

[**Try it now**](https://18pdf.vercel.app) ยท [**Report bug**](../../issues) ยท [**Request feature**](../../issues)
---
## Why 18PDF
Most "free" online PDF editors have a hidden cost: your files. They get uploaded to a server, scanned, sometimes sold, and almost always limited to a few operations or a small file size.
**18PDF is different.** Every tool runs locally in your browser using WebAssembly. Your files never leave your device. There is no signup, no telemetry, no limit, and no premium tier.
| | |
| --- | --- |
| **Files uploaded?** | No. Everything runs in your browser. |
| **Signup required?** | No. Open the tool and start. |
| **File size limit?** | No. Limited only by your device memory. |
| **Watermarks on output?** | Never. |
| **Pricing?** | Free. Forever. |
| **Works offline?** | After first load, most tools keep working without a network. |
| **Open source?** | Yes. See `LICENSE`. |
Built with [pdf-lib](https://github.com/Hopding/pdf-lib), [PDF.js](https://mozilla.github.io/pdf.js/), [jsPDF](https://github.com/parallax/jsPDF), and [Tesseract.js](https://tesseract.projectnaptha.com/).
---
## Screenshots
### Desktop
ย
More desktop screenshots
| Tool | Screenshot |
| --- | --- |
| Merge PDFs |
|
| HTML to PDF |
|
| OCR Text |
|
| Tool grid |
|
| FAQ section |
|
### Mobile
ย
ย
Every layout is designed mobile-first and verified with automated screenshot tests on iPhone 15 viewport.
---
## The 18 tools
Organized into four categories. Click any name to try it.
### Organize
| Tool | What it does |
| --- | --- |
| [Merge PDFs](https://18pdf.vercel.app/tool/merge) | Combine multiple PDFs into one document, in any order. |
| [Split PDF](https://18pdf.vercel.app/tool/split) | Extract page ranges or every page into a ZIP of separate PDFs. |
| [Rotate Pages](https://18pdf.vercel.app/tool/rotate) | Rotate one, many, or all pages in 90 degree increments. |
| [Reorder Pages](https://18pdf.vercel.app/tool/reorder) | Drag and drop to rearrange page order. Remove pages with one click. |
| [Extract Pages](https://18pdf.vercel.app/tool/extract-pages) | Save selected pages as a new PDF in the original order. |
| [Batch Process](https://18pdf.vercel.app/tool/batch) | Apply one operation to many files at once. Bundles results into a ZIP. |
### Convert
| Tool | What it does |
| --- | --- |
| [PDF to Images](https://18pdf.vercel.app/tool/pdf-to-images) | Export every page as PNG or JPEG, bundled into a ZIP. |
| [Images to PDF](https://18pdf.vercel.app/tool/images-to-pdf) | Bundle images into a single PDF. |
| [Extract Text](https://18pdf.vercel.app/tool/extract-text) | Extract the text layer of a PDF. Copy or download as .txt. |
| [HTML to PDF](https://18pdf.vercel.app/tool/html-to-pdf) | Convert HTML markup into a PDF. Templates included. |
| [OCR Text](https://18pdf.vercel.app/tool/ocr) | Recognize text from scanned or image-based PDFs. |
### Edit
| Tool | What it does |
| --- | --- |
| [Page Numbers](https://18pdf.vercel.app/tool/page-numbers) | Stamp page numbers in any corner. Formats: `1`, `Page 1`, `1 of N`, `-1-`. |
| [Watermark](https://18pdf.vercel.app/tool/watermark) | Add text or image watermarks. Apply to all, odd, or even pages. |
| [Edit Metadata](https://18pdf.vercel.app/tool/metadata) | Change title, author, subject, keywords, and creator. |
| [Fill Forms](https://18pdf.vercel.app/tool/forms) | Open an AcroForm PDF, fill text fields, checkboxes, and dropdowns, then download. |
| [Crop Pages](https://18pdf.vercel.app/tool/crop) | Trim margins or apply a preset aspect ratio. |
### View
| Tool | What it does |
| --- | --- |
| [PDF Viewer](https://18pdf.vercel.app/tool/viewer) | Read any PDF in a clean, in-browser reader with zoom. |
| [Compare PDFs](https://18pdf.vercel.app/tool/compare) | Open two PDFs side by side and navigate them in sync. |
---
## How it works
The architecture is simple: a static site that loads the right library for the job, on demand.
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Next.js 16 โ
โ App Router ยท React 19 ยท Tailwind ยท Framer โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โ
โ โ pdf-lib โ โ PDF.js โ โ jsPDF โ ... โ
โ โ merge โ โ render โ โ HTML out โ โ
โ โ split โ โ extract โ โ โ โ
โ โ rotate โ โ OCR src โ โ โ โ
โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโ โ
โ โ Tesseract โ โโ runs in Web Worker โ
โ โ .js โ โ
โ โโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโ
โ Your browser only โ
โ No server contact โ
โโโโโโโโโโโโโโโโโโโโโโโ
```
**Key choices:**
- **No backend.** The app is a static export. There is no API route that touches a file.
- **Dynamic OG images.** Each tool page has its own gradient, generated at request time from the tool's accent hue.
- **No CDN auth.** No Cloudflare, no Cloudfront workers, no serverless functions. Just static files.
- **No analytics.** No Google Analytics, no Plausible, no PostHog. Zero tracking.
---
## SEO and AI search
18PDF is built to be findable both by humans and by AI assistants. Every page has rich structured data, every tool is described in a way that an LLM can cite, and the entire app is indexable.
### Per-page metadata
Every tool page includes:
- Unique title, description, and 5 search keywords
- Canonical URL
- OpenGraph + Twitter Card with a unique gradient image
- 7 JSON-LD blocks: Organization, WebSite, WebApplication, global FAQ, HowTo, per-tool FAQ, BreadcrumbList
- Last-modified timestamps on the sitemap
### Files for AI agents
- `/llms.txt` - natural-language description of every tool, formatted for LLM ingestion
- `/sitemap.xml` - generated for all 22 routes (home, 18 tool pages, FAQ, privacy, OG gallery)
- `/robots.txt` - allows all major AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, Applebot-Extended, Amazonbot, Bytespider, cohere-ai, DuckAssistBot, Meta-ExternalAgent, and others)
### OpenGraph previews
Each tool has a unique gradient OG image, generated server-side:
| | |
| --- | --- |
|
|
|
|
| |
---
## Getting started
### Run locally
```bash
git clone https://github.com/USER/pdf-toolkit.git
cd pdf-toolkit
npm install
npm run dev
```
Open `http://localhost:3000`.
### Build for production
```bash
npm run build
npm start
```
The app builds to a fully static export. Deploy `out/` (or `.next/`) to any static host: Vercel, Netlify, Cloudflare Pages, GitHub Pages, S3, or your own nginx.
### Tech stack
- **Framework:** Next.js 16 (App Router, Turbopack)
- **UI:** React 19, Tailwind CSS 4, Framer Motion, Lucide icons
- **PDF engines:** pdf-lib, PDF.js, jsPDF
- **OCR:** Tesseract.js
- **Fonts:** Geist, Geist Mono
- **Testing:** Playwright (Chromium, 18 tool flows ร 2 viewports)
---
## Project structure
```
pdf-toolkit/
โโโ app/
โ โโโ layout.tsx # Root metadata, JSON-LD, fonts
โ โโโ page.tsx # Home: hero, value props, FAQ, tool grid
โ โโโ icon.tsx # Favicon
โ โโโ apple-icon.tsx # iOS home screen icon
โ โโโ opengraph-image.tsx # Static OG image
โ โโโ manifest.ts # PWA manifest
โ โโโ robots.ts # robots.txt with AI bot allowlist
โ โโโ sitemap.ts # sitemap.xml
โ โโโ tool/
โ โโโ [id]/
โ โโโ page.tsx # Per-tool page + generateMetadata
โ โโโ ToolClient.tsx # Client wrapper
โ โโโ opengraph-image.tsx # Dynamic per-tool OG
โโโ components/
โ โโโ Header.tsx
โ โโโ ToolGrid.tsx
โ โโโ ThemeProvider.tsx
โ โโโ ActionButton.tsx
โ โโโ Toaster.tsx
โ โโโ tools/ # 18 tool implementations
โ โโโ MergeTool.tsx
โ โโโ SplitTool.tsx
โ โโโ ... (18 files)
โโโ lib/
โ โโโ tools.ts # Tool registry, keywords, FAQs
โ โโโ pdfjs-client.ts # PDF.js loader + thumbnail render
โ โโโ utils.ts
โโโ public/
โ โโโ llms.txt
โ โโโ humans.txt
โ โโโ .well-known/
โ โโโ security.txt
โโโ tests/
โ โโโ scripts/ # 18 e2e tests + helpers
โ โโโ README.md
โโโ screenshots/ # Used in this README
โโโ next.config.ts
โโโ package.json
โโโ README.md
```
---
## Adding a new tool
1. **Register the tool** in `lib/tools.ts`:
```ts
{
id: "my-tool",
name: "My Tool",
desc: "Short tagline",
longDesc: "Full description for SEO and AI citation.",
keywords: ["keyword 1", "keyword 2"],
howItWorks: ["Step 1", "Step 2"],
useCases: ["Use case 1", "Use case 2"],
faq: [{ q: "Question?", a: "Answer." }],
icon: MyIcon, // from lucide-react
category: "organize", // organize | convert | edit | view
color: "220", // HSL hue for the OG image gradient
}
```
2. **Create the component** in `components/tools/MyTool.tsx`.
3. **Done.** Sitemap, OG image, JSON-LD, and SEO metadata are all generated automatically from the registry.
---
## License
MIT. See `LICENSE`.
## Acknowledgments
- [pdf-lib](https://github.com/Hopding/pdf-lib) by Andrew Dillon
- [PDF.js](https://mozilla.github.io/pdf.js/) by Mozilla
- [Tesseract.js](https://github.com/naptha/tesseract.js) by Naptha
- [Lucide](https://lucide.dev/) icons
- The open-source community
Made with care. Your files never leave your browser.