Select text. It is already copied.
A tiny, free browser extension that brings terminal-style copy-on-select to Helium and other desktop Chromium browsers. A brief glass shimmer follows the selection after copying. Click the toolbar icon to turn it off or back on.
No accounts. No tracking. No network requests. No runtime dependencies. Install it locally; nothing is published to an extension store.
-
Download the ZIP and extract it into a folder you will keep. Or clone:
git clone https://github.com/ertyurk/CopyOnSelect.git
-
Open your browser's extensions page using the table below.
-
Enable Developer mode, click Load unpacked, and select the folder containing
manifest.json. -
Pin CopyOnSelect from the extensions menu and reload existing webpages.
| Desktop browser | Extensions page | Compatibility |
|---|---|---|
| Helium | helium://extensions |
Tested on macOS |
| Brave | brave://extensions |
Tested on macOS |
| Google Chrome | chrome://extensions |
Expected to work; not tested |
| Microsoft Edge | edge://extensions |
Expected to work; not tested |
| Vivaldi | vivaldi://extensions |
Expected to work; not tested |
Requires a browser based on Chromium 120 or newer with unpacked Manifest V3 extension support. This package is for desktop browsers; it is not built for Firefox, Safari, or mobile browsers. Managed browsers may restrict installation.
The shared Chromium extension format makes the untested browsers compatible in principle; that is not a claim of testing on every browser or operating system. See the installation guide for profiles, local files, updates, and troubleshooting.
- Drag, double-click, or triple-click to select text. It is copied as plain text with the selection's whitespace preserved.
- A short shimmer confirms a successful copy. The native highlight stays intact.
- Paste normally with ⌘V on macOS or Ctrl+V on Windows/Linux.
- Click the toolbar icon to toggle ON / OFF. Each profile remembers its own setting; open webpages update immediately.
Works in normal webpage text, editable content, text fields, and permitted frames. Password fields and whitespace-only selections are ignored. Keyboard-only selection leaves your clipboard alone. Reduced-motion settings are respected.
- HTTPS and other secure contexts only. Localhost is supported; ordinary insecure HTTP pages are left untouched. The extension uses the modern Clipboard API exclusively, with no deprecated copy commands.
- Browser controls, internal pages, the Chrome Web Store, other extensions, and built-in PDF viewers cannot run this content script.
- Closed shadow roots and custom canvas-based editors can hide selections from browser extensions. Embedded frames may also restrict clipboard writes.
- Text fields do not expose selection rectangles, so their shimmer appears next to the mouse release point instead.
- Local files require Allow access to file URLs. Incognito access is opt-in.
Read the full privacy policy.
All code and assets are in this repository. The extension makes no network requests and contains no analytics, remote scripts, account system, clipboard reading, or storage of selected text.
| Permission | Purpose |
|---|---|
clipboardWrite |
Write your selection to the system clipboard. |
storage |
Save one local enabled boolean per browser profile. |
| Webpage content script access | Detect selections on the pages you allow. |
Browser installation warnings describe the capability to read and change webpage content because detecting selections and displaying feedback require page access. You can restrict site access in the extension's browser settings.
Selected text goes directly from the page's isolated content script to the clipboard. It is never sent to the background worker or stored by this extension. There is no automatic updater; updates are manual and reviewable.
Vanilla JavaScript. No build step, framework, package installation, polling, mutation observer, mouse-move handler, or permanent animation loop.
Clipboard writes begin before selection geometry or feedback DOM work. Disabled pages have no extension mouse listeners. Feedback styles are parsed lazily once per document, and feedback is limited to 120 visible selection rectangles.
The development notes describe the implementation, regression tests, and measured copy-path timings. Run the dependency-free tests with Node:
node --test tests/core.test.cjsMIT licensed. This is a personal tool shared as-is, with no support or maintenance guarantee. Contributions, pull requests, and feature requests are not accepted. Issues are disabled and pull requests are automatically closed. Please maintain changes in your own fork. See CONTRIBUTING.md.
