ScreenSilo is a private, local screen recorder for Chromium browsers. It records a user-selected tab, window, or screen without an account, upload service, or analytics pipeline.
Product site · Privacy policy · Support
These instructions show how to load ScreenSilo as an unpacked browser extension in Chromium-based browsers (Chrome, Edge, Brave, Opera, Vivaldi).
The folder you will select is the one that contains manifest.json — the root of this repository.
All JavaScript that ships with the extension is bundled by esbuild from sources under src/ into the build/ directory. You must build before loading unpacked, and re-build after any change in src/.
pnpm install
pnpm run build # bundles into build/
# or, for active development:
pnpm run dev # watch modeFor a release zip, run pnpm run package. The packager only includes
manifest.json, the HTML pages at the root, icons/, and an explicit allowlist
of production bundles (no sourcemaps, tests, or source).
manifest.json # Extension manifest
*.html # 8 page entry points (popup, consent, recorder,
# offscreen, preview, recordings, recovery,
# diagnostics) — must live at root so chrome-
# extension:// URLs resolve.
icons/ # Extension icons
build/ # esbuild output (gitignored). Referenced from
# manifest.service_worker, the <script> tags in
# each HTML page, and chrome.scripting for
# overlay injection.
src/
background.ts # Service worker entry
ChromeAPI.ts # Thin Chrome-API wrapper used by services
messages.js # Shared message schemas + validation
error-codes.js # Canonical error codes + createError helper
logger.js # Logger (diagnostics-aware)
diagnostics.js # IndexedDB-backed diagnostics store
feedback.js # User-facing alert/toast helpers
entries/ # Bundle entry points (one per HTML page +
# overlay content script)
lib/ # Shared utilities (db, chunkStorage, recording,
# cleanup, storage-utils, media-recorder-utils,
# constants, db-shared)
machines/ # XState v5 state machines
services/ # Service classes (RecordingService, …)
tests/
unit/ # Jest unit tests (jsdom)
e2e/ # Playwright end-to-end tests
docs/ # Long-form docs (architecture deep-dives,
# migration guides, permissions rationale)
scripts/ # Build/release scripts
store-assets/ # Screenshots etc. for the web store listing
-
Open your browser’s extensions page:
- Google Chrome:
chrome://extensions - Microsoft Edge:
edge://extensions - Brave:
brave://extensions - Opera:
opera://extensions - Vivaldi:
vivaldi://extensions
- Google Chrome:
-
Enable Developer Mode.
- There will be a toggle or switch labeled "Developer mode" on the extensions page.
-
Click "Load unpacked".
-
In the folder picker, select the folder that contains
manifest.json -
Verify the extension appears in the list and is enabled.
-
Optional: Pin the extension to the toolbar via the puzzle/extension icon so it’s easy to access.
Best quality is enabled by default, preserving the source resolution and targeting up to 60 FPS at a 25 Mbps video bitrate. Uncheck Best quality before recording to use the browser's standard quality settings and reduce file size.
Stop a recording before deleting it from Preview, Recordings, or Recovery. Deletion is refused while that recording is active or finishing, or when its ownership cannot be verified. Once it has stopped, retry deletion from the same page.
-
Chrome & Brave
- Use
chrome://extensionsorbrave://extensions. - With Developer Mode on, you’ll also see an "Update" button that reloads all unpacked extensions at once.
- Use
-
Microsoft Edge
- Use
edge://extensions. - Toggle "Developer Mode" at the bottom-left of the page to reveal "Load unpacked".
- Use
-
Opera
- Use
opera://extensions. - Enable Developer Mode at the top-right, then click "Load unpacked".
- Use
-
Vivaldi
- Use
vivaldi://extensions. - Enable Developer Mode, then click "Load unpacked".
- Use
-
Reload after changes
- After editing files, click the reload icon next to the extension, or use the "Update" button on the extensions page (visible in Developer Mode) to reload all unpacked extensions.
-
Viewing logs
- Popup/options pages: right-click the page and choose "Inspect" to open DevTools and see console logs.
- Content scripts: open the target page’s DevTools (Right-click → Inspect) and check the Console; content script logs appear there.
- Background (Manifest V3) service worker: on the extensions page, click "Details" → "Service worker" → "Inspect" to view logs.
- Background (Manifest V2) page (if applicable): click "background page" or similar link to inspect.
-
Site access/permissions
- If your extension needs to run on specific sites, use the extension’s "Details" page to grant site access as needed.
- For access to local files (
file://URLs), enable "Allow access to file URLs" on the extension’s Details page.
-
"Manifest is not valid JSON"
- Ensure your
manifest.jsonis valid JSON (no trailing commas, correct quoting, etc.).
- Ensure your
-
"Could not load icon" or missing icons
- Check that icon paths in
manifest.jsonpoint to files that exist, using paths relative to the extension root.
- Check that icon paths in
-
Background script/service worker not running
- Manifest V3: ensure
background.service_workerpoints tobuild/background.jsand that you have runpnpm run build. - If you see a service-worker registration failure, check the DevTools console under chrome://extensions → "Service worker" → "Inspect".
- Manifest V3: ensure
-
Changes aren’t taking effect
- Make sure you reload the extension after edits. For MV3 background code, also check the Service Worker DevTools and reload if needed.
-
Wrong folder selected
- You must select the folder that contains
manifest.json(or your build output folder that includesmanifest.json).
- You must select the folder that contains
-
Host permissions
- If network requests are blocked or content scripts don’t run, verify that required host permissions are declared in
manifest.jsonand that you’ve granted site access in the browser.
- If network requests are blocked or content scripts don’t run, verify that required host permissions are declared in
- To remove: go to the extensions page and click "Remove" on the extension.
- To reinstall: follow the Quick Start steps again and select the correct folder.
For distribution, Chromium can pack your extension into a .crx plus a private key:
- Chrome: on
chrome://extensions, click "Pack extension" (visible in Developer Mode) and follow the prompts. - Most dev workflows prefer unpacked during development and packed only for releases.
ScreenSilo is available under the MIT License.