FullSnap is a privacy-first Chrome extension for full-page screenshots, visible-area captures, annotation, redaction, zoom, clipboard copy, and PNG/JPEG/PDF export.
It is built for people who need to capture and explain web pages without sending screenshots to a cloud service. Everything runs locally in the browser: no account, no analytics, no tracking, no upload.
Screenshots often contain sensitive information: work dashboards, forms, invoices, internal tools, customer data, drafts, research, or personal browsing context. Many screenshot tools make capture convenient but unclear about where the image goes.
FullSnap keeps the workflow simple and local:
- capture the page you are actively viewing
- annotate or redact in the browser
- export or copy the result
- leave no external trail
FullSnap is a working local Chrome extension and a strong public-good candidate. It is not yet submitted to the Chrome Web Store.
| Area | Status |
|---|---|
| Manifest V3 extension | Working |
| Full-page capture | Working, with large-page segmentation |
| Visible-area capture | Working |
| Annotation and blur/redaction | Working |
| PNG/JPEG/PDF export | Working; PDF long-page behavior still needs final manual test |
| Privacy policy | Live through GitHub Pages |
| Chrome Web Store readiness | Pending store screenshots, final browser testing, and permission review copy |
See docs/STATUS.md for the maintained status and RELEASE_CHECKLIST.md for the original v1.0 checklist.
- Full-page capture with automatic stitching
- Visible-area capture for the current viewport
- Annotation tools: draw, arrow, text, highlight, blur/redact
- Viewer with zoom, pan, filters, dark/light theme, and multipart navigation for large pages
- Export to PNG, JPEG, or PDF
- Copy to clipboard
- OS-aware shortcuts:
- Mac:
Command+Shift+Sfor full page,Command+Shift+Vfor visible area - Windows/Linux:
Ctrl+Shift+Sfor full page,Ctrl+Shift+Vfor visible area
- Mac:
FullSnap does not collect, transmit, or store personal data on external servers.
- Screenshots are captured by Chrome APIs after a user action.
- Screenshot segments are stored temporarily in the browser's IndexedDB.
- Settings are stored locally in
chrome.storage.local. - No analytics, telemetry, external APIs, or remote scripts are used.
- The bundled PDF library lives in this repository under
lib/.
Read the detailed privacy model and the hosted privacy policy.
- Clone this repository.
- Open Chrome and go to
chrome://extensions. - Enable Developer mode.
- Select Load unpacked.
- Choose this repository folder.
- Pin FullSnap from the Chrome toolbar.
flowchart LR
User["User clicks popup or shortcut"] --> Popup["popup/"]
Popup --> Worker["background/service-worker.js"]
Worker --> Content["content/capture.js"]
Content --> Page["Active tab scroll and page metrics"]
Worker --> ChromeAPI["chrome.tabs.captureVisibleTab"]
Worker --> Offscreen["offscreen/offscreen.js"]
Offscreen --> Store["IndexedDB capture store"]
Store --> Viewer["viewer/"]
Viewer --> Export["PNG / JPEG / PDF / Clipboard"]
The service worker orchestrates capture, the content script measures and scrolls the page, the offscreen document stitches canvas segments, and the viewer loads the result for annotation and export.
Read docs/ARCHITECTURE.md for the full system design.
| Path | Purpose |
|---|---|
manifest.json |
Chrome MV3 configuration, permissions, commands, and icons |
background/ |
Service worker capture orchestration |
content/ |
On-demand page measurement, scrolling, and cleanup |
offscreen/ |
Canvas stitching and segment persistence |
viewer/ |
Screenshot viewer, annotation, export, zoom, filters |
popup/ |
Extension popup UI and capture actions |
shared/ |
Message constants, capture storage wrapper, utilities |
docs/ |
Privacy page and technical documentation |
icons/ |
Extension icon assets |
lib/ |
Bundled local third-party library for PDF export |
- Architecture
- Privacy model
- Status
- Roadmap
- Security policy
- Chrome Web Store release checklist
- Hosted privacy policy
There is no build step and no package manager requirement. The extension is static HTML, CSS, and JavaScript.
Useful checks before release:
node --check background/service-worker.js
node --check content/capture.js
node --check offscreen/offscreen.js
node --check popup/popup.js
node --check viewer/viewer.js
node --check viewer/annotation.jsManual release testing still matters because Chrome extension APIs are involved:
- load as unpacked extension in Chrome
- capture a normal page, a long article, and a dynamic web app
- test annotation, blur/redaction, copy, PNG/JPEG/PDF export
- confirm blocked pages such as
chrome://show a useful error - test keyboard shortcuts on macOS and Windows/Linux where possible
Issues and suggestions are welcome when they improve privacy, reliability, accessibility, capture quality, or documentation. Please do not upload screenshots containing private information into public issues.
MIT. See LICENSE.