Bind a keyboard shortcut to literally any clickable thing on a webpage.
Firebinds lets you bind keyboard shortcuts to buttons, links, inputs, and other interactive webpage elements. It is built for people who keep reaching for the same controls over and over and would rather press a key than chase the UI.
Everything is configured inside the extension popup. The webpage only handles element picking, key listening, small shortcut indicators, and passive feedback.
I kept doing the same thing a dozen times a day: reach for the mouse, find the same button or link I always click, click it, go back to typing. Repeat. It's a small tax, but it adds up.
Firebinds lets me point at something once: a button, a link, a text input, whatever, and give it a key. After that I never have to go find it again. My hands stay on the keyboard, the repetitive stuff gets faster, and my wrists are happier for it.
FIREBINDS-DEMO.mp4
- Pick elements visually, with click or
Qto confirm. - Match targets by exact text or a wildcard pattern, in case the element isn't always in the same spot.
- Scope a binding to the current page, the whole site, or globally.
- Keep separate profiles for different sites or workflows.
- Show small on-page indicators next to bound elements so you know what's mapped.
- Export/import backups as JSON when you switch machines or browser profiles.
- One source tree builds both the Firefox and Chrome versions.
- No accounts, no remote service, nothing phoning home.
Install from Mozilla Add-ons:
For local development:
- Open
about:debugging#/runtime/this-firefox. - Click Load Temporary Add-on.
- Select
manifest.jsonfrom this repository. - Open a normal webpage and click the Firebinds toolbar icon.
There are no current plans to upload Firebinds to the Chrome Web Store. Google charges a one-time developer registration fee, and I am not paying five dollars just to list this there.
Chrome and Chromium users can still load the extension manually:
npm run build:chrome
Then open chrome://extensions, enable Developer mode, click Load
unpacked, and choose dist/chrome.
- Click Add shortcut in the popup.
- Choose how to target the element:
- Pick element — click it directly on the page.
- Text — match by exact label/text.
- Text pattern — wildcard match.
- Pick a scope: page, site, or global.
- Press the key combo you want.
- Save, then use it on the page.
From the popup you can also edit, duplicate, test, disable, reselect, or delete any binding. Indicators and debug logging live under Options.
Firebinds creates a Default profile automatically. Use the profile controls to create, rename, duplicate, delete, or switch profiles — only the active profile's shortcuts apply to the current page.
Backup → Export backup saves everything (profiles, shortcuts, settings) as JSON. Backup → Import backup restores that file on another browser or machine. Importing replaces whatever's currently there, after confirming.
Firebinds stores its config in the browser's local extension storage. No account, no telemetry, no remote calls.
It does ask for broad webpage access, because the content script needs to run on whatever page you want shortcuts on — but all the actual setup happens in the popup, and backups are generated locally in your own browser.
The source extension is Firefox-first, with build scripts that create clean browser-specific outputs for release automation.
npm run build:firefox
npm run build:chrome
npm run package:firefox
npm run package:chrome
npm run validateBuild output is written to dist/ and ignored by Git.
- Firefox keeps Gecko metadata, data collection declarations, and background scripts.
- Chrome uses a generated MV3 service worker manifest and omits Firefox-only metadata.
Every push to main runs CI and validates the source. A GitHub release is
only created when manifest.json has a version whose tag (v<version>) does
not already exist. In other words: pushes always validate, but publishing only
happens once per new version.
Browser stores require version numbers to only go up, so bump manifest.json
and package.json before uploading a new public build.