An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
Surfingkeys - Expand your browser with JavaScript and keyboard.
Surfingkeys is a browser extension (for Google Chrome, Chromium-based browsers, Firefox, and Safari) that provides keyboard-based navigation and control of the web in the spirit of the VIM editor. But it's not just for VIM users; it's for anyone who needs more shortcuts for their own functions.
Surfingkeys is created with all settings described in JavaScript, so it's easy for anyone to map any keystrokes to their own defined JavaScript functions. For example,
api.mapkey('<Ctrl-y>', 'Show me the money', function() {
api.Front.showPopup('a well-known phrase uttered by characters in the 1996 film Jerry Maguire (Escape to close).');
});
Surfingkeys does its best to make full use of the keyboard for web browsing, but there are some limitations from Google Chrome itself; please see the Brook Build of Chromium for a more thorough experience.
Installation
Surfingkeys - Chrome Web Store for Google Chrome, Chromium based browsers
Surfingkeys – Get this Extension for 🦊 Firefox for Firefox
Surfingkeys - Microsoft Edge Addons for Microsoft Edge
Surfingkeys on the Mac App Store for Safari, works on both macOS and iOS, except that on iOS an external keyboard must be connected to your device. There is one exception of the special feature designed for iOS devices -- Search selected with.
Feature availability
Features \ Browsers
Chromium family (above 45)
Firefox (above 57)
Safari (above 15)
Follow links
Y
Y
Y
Surfingkeys modes
Y
Y
Y
Omnibar
Y
Y
partly
Search selected with
Y
Y
Y
Vim-like marks
Y
Y
Y
Switch tabs
Y
Y
Y
Windows management
Y
Y
N
Commands
Y
Y
Y
Smooth scroll
Y
Y
Y
Session management
Y
Y
Y
Repeats action by pressing number before mapkey
Y
Y
Y
Hotkey to toggle Surfingkeys
Y
Y
Y
VIM editor and Emacs editor
Y
Y
Y
Dot to repeat previous action
Y
Y
Y
Capture page
Y
Y
Y
PDF viewer
Y
N
N
Sync across devices
Y
N
Y
Tab Groups
Y
Y
N
Proxy
Y
N
N
Markdown preview
Y
Y
N
Load settings from a local file
needs native host
needs native host
macOS only
TABLE OF CONTENTS
Feature list
Quick start
Follow links
Surfingkeys modes
Omnibar
Search selected with
Vim-like marks
Switch tabs
Windows management
Commands
Smooth scroll
Session management
Repeats action by pressing number before mapkey
Hotkey to toggle Surfingkeys
Proxy settings
VIM editor and Emacs editor
Dot to repeat previous action
Markdown preview
Capture page
PDF viewer
Edit your own settings
Load settings from a local file
Chat with LLM
License
Feature list
All settings are set up within a javascript file, which makes it easy to create mappings to user-customized functions.
A large cursor in visual mode, which makes visual mode better.
Search selected with, which works in both normal mode and visual mode.
Help messages are automatically generated for mappings.
* to search word under cursor in visual mode.
Scroll actions like page up/down (e d) work not only for the top window but also for scrollable DIVs.
w to switch frames if there are any.
Session management
A versatile bookmark/url finder
Count prefixes to repeat actions
Use vim editor to edit input on page
Dot to repeat previous action
;pm to preview markdown
Emoji completion in Insert mode
Rich hints for keystroke
Everything in Surfingkeys works for PDFs
Regional Hints mode
Chat with LLM
Quick start
After you install the extension from Chrome Web Store or Firefox Add-ons, open a site you'd like to browse. Then press ? or u to take a quick look at the default mappings first. Press Esc to hide the usage popover.
Try some mappings described in the usage popover. For example, press e to scroll a page up, d to scroll a page down, ;e to open settings page.
? to show help
t to search bookmarks/history
/ to find in current page
f to follow links
v to toggle visual mode
T to switch tabs
Surfingkeys modes
There are three modes in Surfingkeys: normal, visual and insert.
Normal mode, the default mode.
When you open a page, it enters normal mode automatically. All mappings added with mapkey work in this mode.
Visual mode, the mode for text selection and actions on the selected text.
Press v to toggle visual mode. You'll see an indicator at the bottom of the current page - Caret or Range, and a large cursor on the page. The cursor is made large for visibility, as sometimes it's not easy for humans to locate a normal cursor on a web page.
Caret indicates that the cursor is moved when you press jkhl, Range indicates that you'll select text when moving the cursor.
Now here is a small practice,
press v, you'll see Caret
use the VIM key bindings to move the cursor somewhere.
press v again, you'll see Range.
use the VIM key bindings to select some text.
press sg to see what will happen.
press v again to go back to normal mode.
All mappings added with vmapkey work in this mode, with some built-in mappings like those in VIM - j k h l b w 0 $ etc.
zz make cursor at center of window.
f forward to next char.
F backward to next char.
; repeat latest f, F.
, repeat latest f, F in opposite direction.
Hints mode
Press f to enter Hints mode to follow links. There are several other keystrokes to enter Hints mode with different behaviors, such as cf for continuous following, af for active following.
The default hint characters for links are asdfgqwertzxcvb. Hints mode quits when a non-hint key is pressed. Add the line below to your settings to make it right-handed:
api.Hints.setCharacters('yuiophjklnm'); // for right hand
When hints are overlapped, press Shift to flip them. Hold space to hold hints temporarily, release space to restore hints.
Hints are placed at the center of target links; you could add the line below to your settings to align them left.
settings.hintAlign = "left";
Regional Hints mode
Press L to enter regional Hints mode by picking a visually large element. There are some built-in actions in regional Hints mode,
Esc to exit regional hints mode
ct to copy text from target e
Read the full README on GitHub