Skip to content

About

A lightning-fast, ultra-lightweight PDF reader and annotator built as a Chrome Extension. Designed for privacy, speed, and memory efficiency, it allows you to intercept local PDFs, draw freehand, and insert custom text without ever sending your data to a server.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Freedom PDF Viewer Extension

License Chrome

A PDF reader and annotator built as a Chrome extension. It bundles Mozilla PDF.js, opens PDF files you visit, drag into Chrome, or pick from your computer, and lets you annotate, sign and fill them without an account and without uploading anything to a server.

Features

  • Local by design: rendering, annotation and form filling all happen in the tab, using a bundled copy of PDF.js. Documents are never uploaded.
  • Opens PDFs automatically: top-level navigations to a URL ending in .pdf are shown in this viewer instead of Chrome's built-in one. Embedded PDFs inside web pages are left alone.
  • Fillable forms: AcroForm text fields, checkboxes, radio buttons and dropdowns are editable, and their values are written into the file you save or download.
  • Annotations: freehand ink, highlights, free text, images, stamps and comments, with undo and redo.
  • Left vertical toolbar: sidebar, bookmarks, read aloud, theme, single-page view, scroll mode, fullscreen and toolbar auto-hide in one column beside the page.
  • Bookmarks panel: save the current page with the toolbar button or Ctrl+B, and manage the list in the sidebar. Each PDF has its own bookmarks.
  • Open from the popup: "Open Local PDF" picks a file inside the popup, so cancelling never leaves an empty tab. Dragging a PDF onto the viewer window also works, with or without Chrome's "Allow access to file URLs".
  • Right-click to open: "Open with Freedom PDF Viewer" on any .pdf link.
  • Page tools: extract a page range to a new PDF, reorder pages by dragging thumbnails, delete pages, and export the current page to PNG.
  • Merge and watermark: append another local PDF to the open document, or stamp configurable text across every page.
  • Signatures: draw a signature and drop it onto the page as an image stamp you can move and resize.
  • Themes: Light, Dark, Sepia and Night, remembered between sessions and independent of your OS setting. The popup follows your OS light/dark setting.
  • Read aloud: text-to-speech that advances page by page using a locally installed browser voice. Network speech voices are excluded.
  • Saving: Ctrl+S writes annotations, signatures and form values back into the file and downloads it; the Download button saves the untouched original.

Page tools preserve current annotations, form values and page labels. When reordering, deleting or merging pages in the viewer, bookmarks follow retained pages. PNG exports include current annotations and form values and follow the selected page rotation. Opening a corrupt PDF or cancelling its password prompt keeps your current document open.

Getting Started

  1. Download the latest release .zip from the Releases page.
  2. Unzip it into a folder on your computer.
  3. Open Google Chrome and go to chrome://extensions/.
  4. Turn on Developer mode in the top-right corner.
  5. Click Load unpacked and select the folder you unzipped.
  6. The extension is installed. Open any PDF link, drag a PDF onto the browser, or use the toolbar icon → Open Local PDF.

Building for Release

chmod +x build.sh && ./build.sh

The version is read from manifest.json, so the archive name can never drift from the manifest. The script excludes development files such as .git and source maps. Both build scripts work from any working directory and replace the previous archive only after packaging succeeds.

Verification

Run node scripts/verify.mjs with Node.js 22+ and native Chrome installed. Set CHROME_BIN if Chrome is not at /usr/bin/google-chrome-stable. This optional regression check uses an isolated, temporary Chrome profile and generated PDFs; it needs no package install. It checks saving, form/annotation preservation, page tools, popup handoffs, navigation, relay limits, and dialog/keyboard behavior. It disables newer JavaScript APIs in the page and PDF workers to exercise Chrome 123 compatibility paths on current Chrome. The script and its fixtures are excluded from release archives.

The suite includes a synthetic encrypted PDF with the test password audit-password. To check ZIP contents, asset references and failed-build recovery after building, run python3 scripts/verify-release.py.

Permissions

This extension requests the minimum permissions it needs:

Permission Purpose
webNavigation Notice a top-level navigation whose URL ends in .pdf and rewrite that tab to the viewer
contextMenus Add "Open with Freedom PDF Viewer" to the right-click menu for PDF links
file:///* (host permission) Read a local PDF you open or drag into Chrome
http://*/*, https://*/* (host permissions) See a navigation's URL and retrieve the PDF it points at, on any site

Note: The extension does not request the tabs permission, and it has no analytics, telemetry, or third-party servers. See PRIVACY.md for exactly what is handled and what is stored.

Local files: Chrome disables file:// access for extensions until you turn on Allow access to file URLs under the extension's details on chrome://extensions. You only need it for PDFs opened from the address bar or a file manager — picking a file from the popup, or dragging it onto an open viewer window, works without it.

Chrome Web Store: Broad http(s)://*/* access is required so the extension can act as a PDF handler for links on any site. See STORE_SUBMISSION.md for the reviewer-facing wording.

Browser version: The viewer stylesheet uses light-dark() and related modern CSS, and the manifest declares "minimum_chrome_version": "123". Older Chromium builds will refuse to install the extension.

Contributing

Contributions, issues, and feature requests are welcome. Feel free to check the issues page if you want to contribute.

License

This project is licensed under the MIT License - see the LICENSE file for details.

This project utilizes PDF.js by Mozilla, which is licensed under the Apache License 2.0; its licence text is bundled at pdfjs/LICENSE.

About

A lightning-fast, ultra-lightweight PDF reader and annotator built as a Chrome Extension. Designed for privacy, speed, and memory efficiency, it allows you to intercept local PDFs, draw freehand, and insert custom text without ever sending your data to a server.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages