Small, self-contained Manifest V3 extensions for Chromium-based desktop browsers — Google Chrome and Microsoft Edge.
Every extension here is built the same way on purpose: plain HTML, CSS and JavaScript, no build step, no dependencies, no framework, no telemetry, and no external network requests. Clone the repository, load a folder unpacked, and it runs.
| Extension | What it does |
|---|---|
| Quick Translate Tooltip | Translates selected text on-device and shows it in a tooltip next to the selection |
| Window / Popup Tab Toggle | Moves the current tab between a normal window and a chromeless popup, without reloading the page |
Each extension documents itself. Open its folder for the full description, settings, changelog and privacy policy.
None of these are published to a store yet, so they are loaded unpacked.
- Clone or download this repository.
- Open
chrome://extensions/— oredge://extensions/in Microsoft Edge. - Enable Developer mode.
- Click Load unpacked.
- Select one extension folder — the one containing
manifest.json, not the repository root. - Repeat for any other extension you want.
To update later, pull the latest changes and press Reload on the extension's card. Stored settings survive a reload.
Loading an unpacked extension from a new path gives it a new extension ID, and settings are stored per ID. Moving the folder therefore starts you at the defaults again.
Every extension in this repository sticks to the same constraints, and new ones should too:
- Manifest V3, desktop Chromium browsers.
- No build step and no dependencies. If a change needs a bundler, it needs rethinking instead.
- No remote anything — no CDN scripts, no webfonts, no analytics, no telemetry, no external endpoints.
- The narrowest permission that works, documented in the extension's own
README.mdandPRIVACY.md. - Self-contained. Nothing is shared between extensions at runtime, so each folder can be loaded, copied or published on its own.
Each top-level folder is one standalone extension, holding its manifest.json
directly so it can be loaded unpacked as-is:
<extension-name>/
├── manifest.json
├── … extension source: background, content scripts, options page
├── icons/
├── README.md what it does, settings, troubleshooting
├── CHANGELOG.md version history
├── PRIVACY.md data handling and permission rationale
└── STORE_LISTING.md store submission copy and asset checklist
Released versions are marked with git tags rather than kept as parallel folders, so a folder always holds the current source.
None of these extensions collect, store or transmit personal data. There is no
analytics, no telemetry, no remote code and no external endpoint in any of them.
Settings are stored locally with chrome.storage.
Where an extension relies on a browser-provided capability that may fetch
something — for example an on-device language model — that request is made by the
browser, not by the extension, and it is spelled out in that extension's
PRIVACY.md.
Bug reports and pull requests are welcome — see CONTRIBUTING.md for how to run an extension locally and what to check before opening a PR.
Copyright (C) 2025 Tobias Wirtz
Licensed under the GNU General Public License v3.0 or later. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the LICENSE file for the full text.