An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# ๐Ÿ‘จโ€๐Ÿ’ป About the Developer


Mohammad Ayaan Siddiqui

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.**


Live
License
Next.js 16
TypeScript
React 19


No upload
No signup
File size limit
PWA
SEO
AI bots


18PDF home page




[**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


Home - light mode
ย 
Home - dark mode

More desktop screenshots

| Tool | Screenshot |
| --- | --- |
| Merge PDFs | Merge tool |
| HTML to PDF | HTML to PDF |
| OCR Text | OCR |
| Tool grid | Tool grid |
| FAQ section | FAQ |

### Mobile


Mobile home
ย 
Mobile merge tool
ย 
Mobile forms tool

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:

| | |
| --- | --- |
| Merge OG | OCR OG |
| HTML to PDF OG | |

---

## 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.