Scroll, click, switch tabs and press any button without the mouse, on every site.
Vimium-style link hints, a key for anything on a page, and presets for GitHub, YouTube and Reddit.
Install · Keys · Presets · Demo video · Development

Link hints on a recipe page. Watch the 40-second demo.
Chrome Web Store: AnyKey 1.0 is in review. The link goes here once it is published.
From a release, in Chrome, Brave or another Chromium browser:
- Download
anykey-<version>-chrome.zipfrom Releases and unzip it. - Open
chrome://extensions(brave://extensionsin Brave) and turn on Developer mode. - Click Load unpacked and pick the unzipped folder.
AnyKey starts in the tabs you already have open, without reloading them, and opens a welcome page where its keys already work.
| Keys | What they do |
|---|---|
| j k | Scroll down, up |
| d u | Half a page down, up |
| g g G | Top of the page, bottom |
| F | Link hints: type a label to click it |
| g f | Link hints that open the link in a new tab |
| H L | Back, forward |
| J K | Previous tab, next tab |
| x | Close the tab |
| ? | Every shortcut that works on the page |
| Alt+Shift+K (⌥⇧K on a Mac) | AnyKey's panel, from any tab |
Keys typed into a text field go to the field. Plain f stays with the site, so it still means fullscreen on YouTube. Any key can be changed or switched off in the settings, and AnyKey can be turned off for a site from its panel.
Your own shortcuts: click AnyKey's toolbar button, then Add shortcut for this site. Point at a button, link or field and click it (or press Tab to move and Enter to pick), then press the keys you want, such as g then s. The shortcut works on every page of that site.
Presets add keys a site lacks and step aside where it has its own: on a YouTube video, j and k seek and pause as YouTube intends, and scroll everywhere else.
| Site | Keys |
|---|---|
| GitHub | g r Releases · g e Settings tab · S star or unstar · C the Code menu, to clone |
| YouTube | g l like · g d dislike · g s subscribe · g c write a comment · g u the channel |
| g h home · g p Popular · g n notifications · g m chat · / search |
Want one for another site? Request a preset.
AnyKey collects no data and makes no network requests. Your shortcuts stay in your browser, and sync through the browser's own sync if you have it on. PRIVACY.md is the privacy policy, and PERMISSIONS.md says why AnyKey asks for each permission.
Built with WXT, TypeScript, React and Tailwind (the popup and settings only), Vitest and Playwright. Requires Node 22.12+ and pnpm.
pnpm install
pnpm build # production build in dist/chrome-mv3
pnpm dev # watch build in dist/chrome-mv3-devLoad the build at chrome://extensions: turn on Developer mode, click Load unpacked and pick dist/chrome-mv3 (or dist/chrome-mv3-dev while pnpm dev runs). After a rebuild, click the reload icon on the AnyKey card: AnyKey starts again in the tabs already open, without reloading them.
pnpm check # typecheck, lint, em-dash check, unit tests, build
pnpm test:e2e # Playwright against the built extension, as this system and as Windows
pnpm test:live # the GitHub and YouTube presets on the live sites, signed out
pnpm store:images # the Chrome Web Store images, the GitHub banner, and the demo video's stills
pnpm zip # the upload for the Chrome Web Store, dist/anykey-<version>-chrome.zipThe first E2E run needs Playwright's Chromium: pnpm exec playwright install chromium. CI runs pnpm check and pnpm test:e2e on every push.
Docs:
- CLAUDE.md: architecture and conventions
- docs/design.md: design rules and milestones
- docs/preset-checklist.md: how to check a preset on the live site
- store/listing.md: the Chrome Web Store listing, field by field
- store/video/README.md: the demo video, and how to make it
- BACKLOG.md: ideas left for later, and why they wait




