Skip to content

Latest commit

 

History

250 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenScreenShot

One-click full page screenshots for Chrome. MIT licensed. Nothing leaves your machine.

Chrome Web Store Users CI License

➜ Add to Chrome  ·  Website  ·  Docs  ·  Roadmap

The OpenScreenShot popup open over a web page in Chrome, with Full Page, Visible Area, Selected Region and Record options

Most screenshot extensions want an account, every site you visit, or money to draw an arrow. This one captures the whole scrolling page when you click the icon, lets you annotate for free, and publishes every line.

Features

  • One click, whole page — the toolbar icon captures the entire scrolling page, even behind sticky headers and inside nested scrollers (a settings toggle restores the mode picker)
  • Visible area and region capture from the right-click menu or shortcuts
  • Annotate with arrows, text, numbered steps, spotlight, and crop, with full undo
  • Blur or redact secrets before you share
  • Record the tab with auto-zoom at your clicks, mic and webcam, and trim
  • Export as PNG, JPEG, WebP, or multi-page PDF, or copy straight to the clipboard

The full tour, every shortcut, and the settings reference live in the docs.

How it compares

OpenScreenShot FullPage Capture GoFullPage
Open source Yes — MIT No Privately forked since 2018
Standing site access None Every site None at install
Annotate, blur, PDF Free Free Paid
Tab recording Free No No

The full table, with store status and sources, is at openscreenshot.app/compare.

Install

Add to Chrome — works on Chrome, Edge, Brave, Arc, and other Chromium browsers. To build from source, see Development.

Permissions & privacy

host_permissions is empty: activeTab grants access on your click, and the extension cannot read any site in the background. Captures, recordings, and edits stay in local browser storage until you export or delete them. Full policy: PRIVACY.md.

Every permission, line by line
Permission Why
activeTab Access the current tab — only when you click the extension, use a shortcut, or pick a capture from the right-click menu
scripting Inject on-demand page functions for scroll-and-stitch, region selection, the quick-mode clipboard write, and the in-page recording control bar
storage (+ unlimitedStorage) Settings, the last region rect, editing drafts, a parked Record click, and stashing large full-page PNGs and recording chunks for the editor
downloads Save exports, quick-mode captures, and recording exports to your Downloads folder
contextMenus Add one capture submenu to the page right-click menu
clipboardWrite Copy a screenshot from the editor or from quick mode; it never reads the clipboard
offscreen Run the recording engine in a hidden document — MediaRecorder and the IndexedDB writes need a page context a service worker doesn't have
tabCapture (optional) Requested once, at your first recording; every recording after that starts in one click
<all_urls> (optional host) Only if you turn on "Record across sites" — keeps the cursor overlay alive when a recording navigates to a new origin

Development

TypeScript (strict) + Preact, bundled by Vite + @crxjs/vite-plugin. One runtime dependency (Preact); unit tests with Vitest. Node.js 22+ and npm 10+.

npm install
npm run icons      # generate the extension icons into public/icons
npm run dev        # Vite + crxjs with HMR (writes to dist/)

Load dist/ via chrome://extensions → Developer mode → Load unpacked.

npm run build type-checks and bundles; npm run package produces the store zip. Other scripts: typecheck, lint, test, format, shots (marketing screenshots), site:dev / site:deploy (openscreenshot.app).

Project structure
openscreenshot/
├── manifest.json            # MV3 manifest (crxjs entry)
├── public/                  # icons + i18n messages
├── src/
│   ├── background/          # service worker (capture + recording coordinator)
│   ├── content/             # on-demand capture funcs (scroll, region, recording overlay)
│   ├── editor/              # annotation editor + export (Preact, own tab)
│   ├── offscreen/           # recording engine: MediaRecorder + IndexedDB chunks
│   ├── popup/               # popup UI (Preact)
│   ├── recorder/            # recording editor: timeline, zoom, trim, export (Preact, own tab)
│   └── shared/              # design tokens, messaging, storage, types, utils
├── mcp/                     # optional local CLI + MCP server
├── docs/                    # openscreenshot.app, served by site-worker.js
├── tests/unit/              # unit tests (Vitest)
└── scripts/                 # icon + screenshot pipelines

Screenshots from the CLI or an agent

npm

openscreenshot (npm) is a separate, optional tool that drives the Chrome already on your machine — also fully local:

npx openscreenshot shot https://example.com --out shot.png --full

As an MCP server, add { "command": "npx", "args": ["openscreenshot", "serve"] } to your client config and call the capture_screenshot tool.

Contributing

See CONTRIBUTING.md and the roadmap. If OpenScreenShot is useful to you, you can buy me a coffee.

License

MIT © OpenScreenShot @PGHQdev

About

OpenScreenShot is a privacy-first, free, open-source screenshot extension -- zero data leaves your device, no account needed, no telemetry, no third-party services.

Topics

Resources

Contributing

Stars

67 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages