HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
brookhong
Surfingkeys
JavaScript2016–2024
brookhong / Surfingkeys

Surfingkeys

Map your keys for web surfing, expand your browser with javascript and keyboard.

28Distinct people
38Mentions
1Explicit recommenders
6.2KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Map your keys for web surfing, expand your browser with javascript and keyboard.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

I've been using Surfing Keys on both FF and Chrome for awhile and it's been my favorite vim-like so far. https://github.com/brookhong/Surfingkeys

infinitezest used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year38 dated mentions

Observed mentions: 2016-08-17 04:55:14 UTC to 2024-10-22 10:56:25 UTC.

02462016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments20162017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 4 mentions; 2 submissions, 2 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 7 mentions; 2 submissions, 5 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2024

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC312
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC404
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC202
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC413
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC615
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC505
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC422
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC725
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC312

From the project README

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

What Hacker News says

38 sources
I'm surprised no one has mentioned Surfingkeys https://github.com/brookhong/Surfingkeys. I switched over from Vimium a couple years ago. I think its more performant than Vimium and also allows you quite a bit more flexibility in your configuration. I prefer and recommend browser add-ons over Nyxt. You'll get more compatibility by being able to use Chrome/Firefox. You'll also have a much higher chance of being able to use the same environment at work - since you can typically still install browser add-ons in developer mode even if you aren't able to get rights to install apps.
In Vimium – The Hacker's Browser
Manifest V2 deprecation is likely going to break extensions that inject userscripts, like Tampermonkey [0] and SurfingKeys [1]. The Chrome team has been rather unhelpful. They've promised to add support for power-user tools like these in MV3: dotproto from the Chrome team commented on May 27 [2]: > @mon-jai, the short answer is no, I don't have any updates to share. That said, I'll reaffirm that we plan to support userscript managers in Maniest V3 before the Manifest V2 deprecation. But the deprecation is approaching and the Chrome team hasn't released any more information about this AFAIK. These extensions are going to require large refactors to support MV3 and they can't meaningfully start until the Chrome team elucidates how script injection will work. With MV2 deprecation coming so soon, I worry there won't be enough time. [0]: Manife
Read the rest
st V3: examine the effects · Issue #644 · Tampermonkey/tampermonkey: https://github.com/Tampermonkey/tampermonkey/issues/644 [1]: Migrate to Manifest V3 · Issue #1821 · brookhong/Surfingkeys - https://github.com/brookhong/Surfingkeys/issues/1821 [2]: https://github.com/Tampermonkey/tampermonkey/issues/644#issu...
In Proxy Chrome extensions are not going to be usable in MV3

Showing the 15 most recent of 38 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.