{"id":32793900,"url":"https://github.com/rudi-q/leed_pdf_viewer","last_synced_at":"2026-04-04T15:01:09.401Z","repository":{"id":308182809,"uuid":"1011979844","full_name":"rudi-q/leed_pdf_viewer","owner":"rudi-q","description":"Open-source PDF annotation and drawing tool built for privacy. Sketch and annotate PDFs with natural pen-like precision, drawing tablet support. SvelteKit + Tauri.","archived":false,"fork":false,"pushed_at":"2026-04-04T11:16:57.000Z","size":80860,"stargazers_count":354,"open_issues_count":7,"forks_count":30,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-04T13:06:54.905Z","etag":null,"topics":["annotation-tool","canvas-api","offline-first","open-source","pdf-editor","pdf-js","pdf-signing","pdf-viewer","svelte","sveltekit","tauri","typescript"],"latest_commit_sha":null,"homepage":"https://leed.my","language":"Svelte","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rudi-q.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"rudi-q"}},"created_at":"2025-07-01T16:10:01.000Z","updated_at":"2026-04-04T11:17:01.000Z","dependencies_parsed_at":"2025-12-05T19:04:40.895Z","dependency_job_id":null,"html_url":"https://github.com/rudi-q/leed_pdf_viewer","commit_stats":null,"previous_names":["rudi-q/leed_pdf_viewer"],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/rudi-q/leed_pdf_viewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudi-q%2Fleed_pdf_viewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudi-q%2Fleed_pdf_viewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudi-q%2Fleed_pdf_viewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudi-q%2Fleed_pdf_viewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rudi-q","download_url":"https://codeload.github.com/rudi-q/leed_pdf_viewer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudi-q%2Fleed_pdf_viewer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31403952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["annotation-tool","canvas-api","offline-first","open-source","pdf-editor","pdf-js","pdf-signing","pdf-viewer","svelte","sveltekit","tauri","typescript"],"created_at":"2025-11-05T18:05:42.261Z","updated_at":"2026-04-04T15:01:09.380Z","avatar_url":"https://github.com/rudi-q.png","language":"Svelte","funding_links":["https://github.com/sponsors/rudi-q","https://buy.polar.sh/polar_cl_tPmQ3d72uYwrYvzzIUM4R7cku7hg2kmEQqruI1its5c"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"static/logo.png\" alt=\"LeedPDF Logo\" width=\"160\" height=\"160\"\u003e\n  \n  # LeedPDF - Free PDF Annotation Tool\n  \n  **Add drawings and notes to any PDF.**\n  \n  *Works with mouse, touch, or stylus - completely free and private.*\n\u003c/div\u003e\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL%203.0-87A96B.svg)](https://www.gnu.org/licenses/agpl-3.0)\n[![Commercial License](https://img.shields.io/badge/Commercial%20License-Available-87A96B.svg)](https://buy.polar.sh/polar_cl_tPmQ3d72uYwrYvzzIUM4R7cku7hg2kmEQqruI1its5c)\n[![Free for Personal Use on Web](https://img.shields.io/badge/Free-Web%20App-87A96B.svg)](#web-app-agpl)\n[![GitHub Stars](https://img.shields.io/github/stars/rudi-q/leed_pdf_viewer?color=87A96B\u0026style=flat\u0026logo=github)](https://github.com/rudi-q/leed_pdf_viewer/stargazers)\n[![Downloads](https://img.shields.io/github/downloads/rudi-q/leed_pdf_viewer/total?label=Downloads\u0026logo=github\u0026color=87A96B)](https://github.com/rudi-q/leed_pdf_viewer/releases)\n[![WCAG AAA Compliant](https://img.shields.io/badge/WCAG%20AAA-Compliant-87A96B?style=flat\u0026logo=accessibilityalt\u0026logoColor=white)](https://www.w3.org/WAI/WCAG2AAA-Conformance)\n\n[![SvelteKit](https://img.shields.io/badge/SvelteKit-FF3E00?style=flat\u0026logo=svelte\u0026logoColor=white)](https://kit.svelte.dev/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Tauri](https://img.shields.io/badge/Tauri-24C8D8?style=flat\u0026logo=tauri\u0026logoColor=white)](https://tauri.app/)\n[![PDF.js](https://img.shields.io/badge/PDF.js-000000?style=flat\u0026logo=mozilla\u0026logoColor=white)](https://mozilla.github.io/pdf.js/)\n[![Brave Search API](https://img.shields.io/badge/Brave%20Search-FB542B?style=flat\u0026logo=brave\u0026logoColor=white)](https://api.search.brave.com/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-06B6D4?style=flat\u0026logo=tailwindcss\u0026logoColor=white)](https://tailwindcss.com/)\n[![Vite](https://img.shields.io/badge/Vite-646CFF?style=flat\u0026logo=vite\u0026logoColor=white)](https://vitejs.dev/)\n[![CodeRabbit](https://img.shields.io/badge/CodeRabbit-FF570A?style=flat\u0026logo=coderabbit\u0026logoColor=white)](https://coderabbit.ai/)\n[![Appwrite](https://img.shields.io/badge/Appwrite-F02E65?style=flat\u0026logo=appwrite\u0026logoColor=white)](https://appwrite.io/)\n[![Vercel](https://img.shields.io/badge/Vercel-000000?style=flat\u0026logo=vercel\u0026logoColor=white)](https://vercel.com/)\n\n\u003c/div\u003e\n\n**A modern, open-source PDF annotation tool that runs entirely in your browser**\n\nTransform any PDF into an interactive canvas. Draw, annotate, and collaborate without uploading your documents to external servers.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"static/screenshot.png\" alt=\"LeedPDF in action - annotating a Y Combinator fundraising guide with highlights, comments, and drawings\" width=\"800\" style=\"border-radius: 12px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\"\u003e\n\u003c/div\u003e\n\n[**Try it now →**](https://leed.my) | [**Report Issues**](https://github.com/rudi-q/leed_pdf_viewer/issues) | [**Contribute**](https://github.com/rudi-q/leed_pdf_viewer/blob/main/CONTRIBUTING.md)\n\n## ✨ Features\n\n### 🔍 **PDF Search \u0026 Discovery**\n- **Web-wide PDF search** powered by Brave Search API\n- **Direct PDF opening** from search results\n- **Smart filtering** for PDF documents only\n- **Pagination** through search results\n- **Real-time search** with instant results\n- **Setup guide**: See [docs/SEARCH_FEATURE.md](docs/SEARCH_FEATURE.md) for configuration\n\n### 🎨 **Drawing \u0026 Annotation**\n- **Freehand drawing** with customizable pencil and highlighter tools\n- **Shape tools** including rectangles, circles, arrows, and stars\n- **Text annotations** with inline editing\n- **Sticky notes** for quick comments\n- **Smart eraser** that removes intersecting elements\n\n### 📱 **Universal Access**\n- Works on **any device** - desktop, tablet, or phone\n- **Touch-optimized** with Apple Pencil support\n- **Mobile-friendly** interface that works seamlessly on smartphones and tablets\n- **No installation required** - runs in your browser\n- **Fast loading** with optimized caching\n\n### ♿ **Accessibility First**\n- **WCAG AAA compliant** - exceeds accessibility standards with 7.06:1 contrast ratios\n- **Keyboard navigation** - full functionality without a mouse\n- **Screen reader friendly** - semantic HTML and proper ARIA labels\n- **High contrast mode** support for visually impaired users\n- **Scalable interface** - works with browser zoom up to 200%\n- **Color blind friendly** - doesn't rely solely on color for information\n- **Focus indicators** - clear visual focus states for all interactive elements\n\n### 🔒 **Privacy First**\n- **100% client-side** - your PDFs never leave your device\n- **No account required** - start annotating immediately\n- **Local auto-save** - your work is preserved automatically\n\n### ⚡ **Performance**\n- **Instant loading** from URLs (including Dropbox links)\n- **High-DPI rendering** for crisp display on all screens\n- **Infinite canvas** - pan and zoom without limits\n- **Full undo/redo** with keyboard shortcuts\n\n## 🚀 Quick Start\n\n### Option 1: Use Online\nVisit [leed.my](https://leed.my) and start annotating immediately.\n\n### Option 2: Load from URL\nShare annotated PDFs by adding `/pdf/` to any URL:\n```\nhttps://leed.my/pdf/https://example.com/document.pdf\n```\n\n### Option 3: Run Locally\n```bash\ngit clone https://github.com/rudi-q/leed_pdf_viewer.git\ncd leed_pdf_viewer\npnpm install\npnpm build \u0026\u0026 pnpm preview\n\n# Or just use the shorthand:\npnpm prev\n```\n\nOpen `http://localhost:4173` in your browser.\n\n## 🛠️ Tech Stack\n\n- **Framework**: SvelteKit + TypeScript\n- **PDF Rendering**: PDF.js\n- **Drawing Engine**: HTML5 Canvas\n- **Styling**: Tailwind CSS\n- **Build**: Vite\n\n## 📖 Usage\n\n### Basic Controls\n- **Upload**: Drag \u0026 drop a PDF or click the folder icon\n- **Draw**: Select the pencil tool and start drawing\n- **Navigate**: Use arrow keys or toolbar buttons\n- **Zoom**: Ctrl + scroll wheel or toolbar buttons\n- **Pan**: Ctrl + drag (or just drag outside PDF area)\n\n### Keyboard Shortcuts\n| Action | Shortcut |\n|--------|----------|\n| Tools | `1-9` (pencil, eraser, text, etc.) |\n| Navigation | `←/→` for pages, `W/H` for fit |\n| Zoom | `Ctrl +/-`, `Ctrl 0` to reset |\n| Actions | `Ctrl Z/Y` for undo/redo |\n| Upload | `U` to choose file |\n| Help | `?` or `F1` |\n\n## 🎯 Perfect For\n\n- **Students** reviewing lecture slides and textbooks\n- **Professionals** annotating contracts and reports\n- **Researchers** marking up papers and documentation\n- **Teams** collaborating on design mockups\n- **Anyone** who needs to mark up PDFs quickly\n\n## 🔧 Development\n\n### Prerequisites\n- Node.js 18+\n- npm/pnpm/yarn\n\n### Setup\n```bash\n# Install dependencies\npnpm install\n\n# Build for production\npnpm build\n\n# Preview production build\npnpm preview\n\n# Or use the shorthand:\npnpm prev\n```\n\n### Building the Tauri Desktop App\n```bash\n# 1. Install dependencies\npnpm install\n\n# 2. Install Rust (if you don't have it)\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# 3. Build your native app\npnpm tauri build\n```\n\n### Project Structure\n```\nsrc/\n├── lib/\n│   ├── components/     # Svelte components\n│   ├── stores/         # State management\n│   └── utils/          # PDF and drawing utilities\n├── routes/             # SvelteKit routes\n└── app.html           # App template\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Here's how to get started:\n\n1. **Fork** the repository\n2. **Create** a feature branch: `git checkout -b feature/awesome-feature`\n3. **Commit** your changes: `git commit -m 'Add awesome feature'`\n4. **Push** to the branch: `git push origin feature/awesome-feature`\n5. **Open** a Pull Request\n\n### Development Guidelines\n- Follow the existing code style (ESLint + Prettier configured)\n- Test your changes across different devices/browsers\n- Update documentation for new features\n- Keep commits atomic and well-described\n\n## 💬 Community \u0026 Feedback\n\nWe'd love to hear from you! Join our community discussions:\n\n- **💚 [Wall of Love](https://github.com/rudi-q/leed_pdf_viewer/discussions/categories/wall-of-love)** - Share your feedback about what you loved about LeedPDF and why\n- **🙏 [Q\u0026A](https://github.com/rudi-q/leed_pdf_viewer/discussions/categories/q-a)** - Ask any questions you may have\n- **🗳️ [Polls](https://github.com/rudi-q/leed_pdf_viewer/discussions/categories/polls)** - Poll on ideas\n- **💡 [Ideas](https://github.com/rudi-q/leed_pdf_viewer/discussions/categories/ideas)** - Share new ideas\n- **🙌 [Show and Tell](https://github.com/rudi-q/leed_pdf_viewer/discussions/categories/show-and-tell)** - Show us how you're using LeedPDF\n\nYou can also use [GitHub Issues](https://github.com/rudi-q/leed_pdf_viewer/issues) for bug reports.\n\n## 🌱 Support the Project\n\nLove LeedPDF? Help us keep it free and open source!\n\n### ☕ GitHub Sponsors\n**[💝 Sponsor on GitHub](https://github.com/sponsors/rudi-q)**\n\nYour sponsorship helps us:\n- ✨ Add new features and improvements\n- 🔧 Fix bugs and maintain code quality\n- 📖 Create better documentation and tutorials\n- 🌍 Keep the project free for everyone\n- 🚀 Improve performance and accessibility\n\n*Every contribution, big or small, makes a difference!*\n\n## 📄 License\n\nLeedPDF is **flexibly licensed** to give you options:\n\u003ca id=\"web-app-agpl\"\u003e\u003c/a\u003e\n### 🆓 **Web App - AGPL-3.0 (Free \u0026 Open Source)**\n**[✨ Try LeedPDF Web App](https://leed.my)** - Always free, no account required\n\nPerfect for:\n- ✅ Personal projects and learning\n- ✅ Educational and research use\n- ✅ Full PDF annotation features\n- ✅ Privacy-focused (local processing)\n- ✅ Contributing back to the community\n\n### 🖥️ **Desktop App - PAID**\n**[💻 Download Desktop App for Windows](https://leed.my/download-for-windows)** - One-time purchase\n- 🎯 **Windows:** Pay-what-you-want\n- ✅ Native desktop experience\n- ✅ Better performance\n- ✅ Offline sync capabilities\n- ✅ Lifetime updates\n- 📋 Governed by [End User License Agreement](LICENSE-DESKTOP-EULA)\n\n*Mac desktop app coming soon!*\n\n### 💼 **Commercial License for developers (Paid)**\nRequired for:\n- 🏢 Commercial products and services\n- 🏢 Proprietary software integration\n- 🏢 SaaS applications and hosted services\n- 🏢 Client work and consulting projects\n- 🏢 Removing AGPL-3.0 obligations\n\n---\n\n## 💳 **Developer Commercial Licensing Options**\n\n**[🛒 Get Commercial License](https://buy.polar.sh/polar_cl_tPmQ3d72uYwrYvzzIUM4R7cku7hg2kmEQqruI1its5c)**\n\nAvailable options:\n- **Individual License** - Solo developers and small companies\n- **Enterprise License** - Large organizations with custom terms\n\n*For Enterprise licensing and custom requirements, contact [reach@rudi.engineer](mailto:reach@rudi.engineer)*\n\n### 🤝 **What You Get With Commercial License:**\n- ✅ Remove AGPL-3.0 copyleft requirements\n- ✅ Use in proprietary/commercial applications\n- ✅ No source code disclosure obligations\n- ✅ Distribute without open-sourcing your app\n- ✅ Remove attribution requirements\n- ✅ Email support for integration questions\n- ✅ Perpetual license (no expiration)\n\n### ❓ **Need Help Choosing?**\n- **Personal project for web?** → Use AGPL-3.0 (free)\n- **Building a commercial product?** → [Individual License](https://buy.polar.sh/polar_cl_tPmQ3d72uYwrYvzzIUM4R7cku7hg2kmEQqruI1its5c)\n- **Large company/custom terms?** → [Enterprise License](https://buy.polar.sh/polar_cl_tPmQ3d72uYwrYvzzIUM4R7cku7hg2kmEQqruI1its5c)\n\n**Questions about licensing?** Contact us: [reach@rudi.engineer](mailto:reach@rudi.engineer)\n\n---\n\n*By using LeedPDF, you agree to comply with the terms of your chosen license. The AGPL-3.0 license requires that any network-accessible modifications be open-sourced.*\n\n## 🙏 Acknowledgments\n\n- **PDF.js** - Mozilla's excellent PDF rendering engine\n- **SvelteKit** - The framework that makes this possible\n- **Brave Search API** - Powering our web-wide PDF search functionality\n- **Vite** - Lightning-fast build tool\n- **Tauri** - For building lightweight desktop apps\n- **Tailwind CSS** - Utility-first CSS framework\n\n---\n\n**Built with ❤️ for the open web**\n\n*Privacy-focused • Lightweight • No tracking • No accounts • No servers*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frudi-q%2Fleed_pdf_viewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frudi-q%2Fleed_pdf_viewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frudi-q%2Fleed_pdf_viewer/lists"}