A professional, feature-rich PDF reader built with Electron and TypeScript, designed for seamless PDF viewing, annotation, form filling, and document management.
- High-quality PDF rendering powered by PDF.js
- Smooth scrolling with lazy page loading (renders only visible pages)
- Zoom in/out with keyboard shortcuts and GUI controls
- Page rotation, fullscreen mode, and continuous/single page view
- Bookmarks and thumbnail sidebar
- Highlight, Underline, Strikeout text
- Free Draw with adjustable color palette
- Sticky Notes for comments
- Eraser tool
- Annotations are saved into the PDF via pdf-lib
- Auto-detects PDF form fields (text, checkbox, dropdown)
- Inline interactive inputs positioned directly on the page
- Two-way sync between inline fields and sidebar panel
- Form data is embedded when saving/printing
- Save — overwrite current PDF with annotations & form data
- Save As — export current page as PDF, PNG, or JPEG
- Print — merges annotations, opens in system PDF viewer for printing
- Dark, Light, Midnight, Rose, Forest, Sunset color themes
- Persistent theme selection via localStorage
- Automatic update checks via GitHub Releases using
electron-updater - Prompts user to restart when a new version is downloaded
| Shortcut | Action |
|---|---|
| Ctrl+O | Open PDF |
| Ctrl+S | Save |
| Ctrl+Shift+S | Save As |
| Ctrl+P | |
| Ctrl+= | Zoom In |
| Ctrl+- | Zoom Out |
| Ctrl+0 | Reset Zoom |
| Ctrl+F | Find/Search |
| Ctrl+B | Toggle Sidebar |
| F11 | Fullscreen |
git clone https://github.com/needyamin/pdf-reader.git
cd pdf-reader
npm installnpm run devBuild a Windows installer (single .exe):
npm run distOutput will be in the out/ directory.
- Electron — Desktop application framework
- TypeScript — Main & preload processes
- PDF.js (
pdfjs-dist) — PDF rendering - pdf-lib — PDF modification, form filling, annotation embedding
- electron-updater — Auto-update from GitHub Releases
- electron-builder — Packaging & distribution
PDF_READER/
├── src/
│ ├── main.ts # Electron main process
│ └── preload.ts # Context bridge API
├── renderer/
│ ├── index.html # Application UI
│ ├── renderer.js # Renderer logic
│ └── styles.css # Themes & styling
├── assets/ # Icons & resources
├── package.json
└── tsconfig.json
- Bump
versioninpackage.json - Run
npm run dist - Create a GitHub Release with the matching tag (e.g.
v1.1.0) - Upload the
.exeinstaller andlatest.ymlfromout/ - Existing users will be prompted to update automatically
YAMiN HOSSAIN — @needyamin