splitbrain
starred
pghqdev/OpenScreenShot
· July 8, 2026 22:27
pghqdev/OpenScreenShot
OpenScreenShot is a privacy-first, free, open-source screenshot extension — zero data leaves your device, no account needed, no telemetry, no third…
TypeScript
9
Updated Jul 7
Open-source screenshot tool for Chrome — full-page, region, and visible-area capture with an annotation editor and PDF export. Built as a Manifest V3 extension.
OpenScreenShot captures the entire scrolling page (scroll-and-stitch), the visible viewport, or a selected region, lets you annotate the result, and export as PNG, JPEG, WebP, or PDF. Everything runs locally in your browser — your data never leaves your device.
| Milestone | Focus | State |
|---|---|---|
| M1 | Foundation — scaffold, design system, popup, onboarding, visible-area capture | ✅ Done |
| M2 | Capture engine — full-page scroll-and-stitch + region selection | ✅ Done |
| M3 | Annotation editor + export (PNG/JPEG/WebP/PDF) | ✅ Done |
| M4 | Polish — settings, style controls, fixed-element compositing, accessibility | ✅ Done |
| M5 | Launch — tests, store listing, i18n | ✅ Done |
chrome.scripting injection (no offscreen document needed)npm install npm run icons # generate the extension icons into public/icons npm run dev # start Vite + crxjs with HMR (writes to dist/)
Then load the extension in Chrome:
chrome://extensionsdist/ foldernpm run build # type-check + bundle into dist/Load dist/ as an unpacked extension, or run npm run package to produce
openscreenshot-vX.Y.Z.zip for the Chrome Web Store.
| Script | Description |
|---|---|
npm run dev |
Vite dev server with extension HMR |
npm run build |
Type-check and bundle the extension into dist/ |
npm run typecheck |
Run tsc --noEmit |
npm run lint |
ESLint (flat config) |
npm test |
Run unit tests (Vitest) |
npm run icons |
Regenerate extension icons from the SVG source |
npm run format |
Format the codebase with Prettier |
npm run package |
Build + zip dist/ for store submission |
openscreenshot/
├── manifest.json # MV3 manifest (crxjs entry)
├── public/
│ ├── icons/ # generated extension icons
│ └── _locales/en/ # i18n messages
├── src/
│ ├── background/ # service worker (capture coordinator)
│ ├── content/ # on-demand capture funcs (scroll, region)
│ ├── editor/ # annotation editor + export (Preact, own tab)
│ ├── popup/ # popup UI (Preact)
│ ├── shared/ # design tokens, messaging, storage, types, utils
│ └── (onboarding/ — later milestone)
├── tests/ # unit + e2e tests
└── scripts/generate-icons.mjs
OpenScreenShot requests the minimum permissions needed:
activeTab — access the current tab when you click the extension or use a shortcutscripting — inject on-demand page functions for scroll-and-stitch & region selectionstorage (+ unlimitedStorage) — settings/onboarding state and stashing large full-page PNGs for the editordownloads — save exports to your downloads folderoptions_ui — the editor is registered as a full-tab options page so crxjs bundles it; it’s opened in a tab after each captureWe never request broad host permissions (<all_urls>) — activeTab grants access on your click/shortcut, and scripting runs within that grant.
All capture and processing happens locally in your browser. Screenshots are never uploaded anywhere. See PRIVACY.md.
Contributions are welcome! See CONTRIBUTING.md. Please follow the Code of Conduct.
MIT © OpenScreenShot Contributors
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | ༺ᖭི༏ᖫྀ༻ | 0 | 1 | 01-07-2026 |
| 2 | What's New: Open a Data Exchange for More Targeted Collaboration | 0 | 5 | 01-06-2026 |
| 3 | JOMPBPC 1/23/25 open book | 0 | 0 | 03-07-2026 |
| 4 | Sqh | 0 | 0 | 07-07-2026 |
| 5 | taking turns in the sunbeam | 0 | 0 | 27-06-2026 |
| 6 | Ready | 0 | 0 | 17-06-2026 |
| 7 | After revolution slider update - not working on different languages | 0 | 7 | 13-07-2026 |
| 8 | F-104 Starfighter and SR-71 Blackbird. First image colorized by @grok. The original is obviously… | 0 | 3 | 01-07-2026 |
| 9 | How to disable math results in Messages for iPhone and iPad | 0 | 5 | 15-05-2025 |
| 10 | Ummm she’s literally sensitive :/ | -1 | 1 | 12-06-2026 |