- JavaScript 89.6%
- HTML 8.4%
- Shell 2%
| icons | Initial commit | |
| AGENTS.md | Improvements 3 ( #7 ) | |
| background.js |
feat: adds shortcuts cl, cr, and co to close tabs
|
|
| CHANGELOG.md |
fix: after closing other tabs with co, the search tab dialog (o) is not opened anymore
|
|
| content.js |
fix: after closing other tabs with co, the search tab dialog (o) is not opened anymore
|
|
| LICENSE | chore: changed license to MIT | |
| manifest.json | Version 1.6.0 | |
| popup.html |
feat: copies an AsciiDoc link of the page using the title to the clipboard with yla
|
|
| popup.js | Initial commit | |
| README.md | fix: updates README and permissions (removes storage) | |
| release.sh | Improvements 3 ( #7 ) | |
ModalBrowsing
A lightweight browser extension for Microsoft Edge that provides modal keyboard navigation for web pages with minimal permissions. Navigate the web with Vim-style keybindings without sacrificing your privacy.
I am not an expert in JavaScript nor in Browser extensions. This project was only possible due to the support of AI and opencode. I would have not taken this effort if I were allowed to use Vimium (which is not possible due to compliance requirements and the many permissions, Vimium needs for certain features).
You can find this extension in the Microsoft Edge-Add-Ons store.
Features
- Vim-inspired keybindings for efficient web browsing
- Modal navigation - keyboard shortcuts work in "normal mode" (outside input fields)
- Press
ito focus an input field and enter "insert mode" - Press
Escfrom any input field to return to "normal mode"
- Press
- Minimal permissions - only requests what is needed, no access to:
- Browse history
- Files
- All sites data
- Personal information
- Easy toggle - enable/disable via popup
Keyboard Shortcuts
Scrolling
j- Scroll downk- Scroll uph- Scroll leftl- Scroll rightd- Scroll down (large step)u- Scroll up (large step)Ctrl-d- Scroll down (half page)Ctrl-u- Scroll up (half page)
Navigation
gg- Go to top of pageG(Shift+g) - Go to bottom of pageJ(Shift+j) - Switch to left tabK(Shift+k) - Switch to right tab<- Move current tab to the left>- Move current tab to the rightgt- Move current tab to a tab group (auto-moves if only one group, otherwise shows picker)Ctrl-o- Go backward in tab activation historyCtrl-i- Go forward in tab activation historyH(Shift+h) - Go back in browser historyL(Shift+l) - Go forward in browser historyr- Reload current pageo- Open omnibar (search open tabs or enter a URL)t- Open new tabx- Close current tabX(Shift+x) - Reopen last closed tab
Other
f- Show hints for clickable elements (links, buttons) and activate themF(Shift+f) - Show hints for clickable elements and open links in new tabyy- Copy current page URL to clipboardyf- Show hints for links and copy selected link URL to clipboardyt- Copy current page title to clipboardylm- Copy current page as markdown link[title](url)yla- Copy current page as AsciiDoc linkurl[title]i- Focus first input field on page/- Search page (type query, Enter/Shift+Enter to navigate matches)n- Jump to next search matchN(Shift+n) - Jump to previous search match?- Show keyboard shortcuts help overlayEsc- Close search / exit input field to normal mode / unfocus element / exit link hint mode
Installation
Microsoft Edge (and other Chromium browsers)
- Download or clone this repository
- Open Microsoft Edge and navigate to
edge://extensions/ - Enable "Developer mode" in the bottom-left corner
- Click "Load unpacked"
- Select the extension folder
- The extension icon should appear in your toolbar
Icons
The extension includes icon files with a nautical ship wheel design and hjkl directional keys:
icons/icon16.png(16x16 pixels)icons/icon48.png(48x48 pixels)icons/icon128.png(128x128 pixels)
The icons are already included and ready to use.
Distribution
In order to pubsh the extension, you need to ZIP it without the directory. In the project directory please execute:
zip -r ../modal-browsing.zip *.js LICENSE *.json *.html icons
Privacy
This extension is built with privacy in mind:
- No tracking - zero telemetry or analytics
- Minimal permissions - only
activeTab,storage,tabs,tabGroups, andclipboardWrite - No external requests - all code runs locally
- No data collection - your browsing history stays private
Development
Project Structure
.
├── manifest.json # Extension configuration
├── content.js # Main keyboard handling logic
├── popup.html # Extension popup UI
├── popup.js # Popup functionality
├── icons/ # Extension icons
└── README.md # This file
Future Enhancements
- Customizable keybindings via settings page
- Additional link hint modes (open in background tab, download link, etc.)
Justification for permissions
activeTab
This is required to query information about the active tab (e.g., the URL) and to be able to display the help popup.
tabs
This is required to be able to navigate between tabs usind <ctrl-i> and <ctrl-o> and for moving the current to a tab group selected using gt.
clipboardWrite
This is required for copying the current URL or a markdown/asciidoc link to the clipboard.
tabGroups
This is required for moving the current to a tab group selected using gt.
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
License
Apache License Version 2.0 - feel free to use and modify as needed.