{"id":13467361,"url":"https://github.com/alexherbo2/krabby","last_synced_at":"2026-01-28T10:33:18.603Z","repository":{"id":43309180,"uuid":"212631733","full_name":"alexherbo2/krabby","owner":"alexherbo2","description":"A keyboard interface to the web, inspired by Kakoune","archived":false,"fork":false,"pushed_at":"2023-10-21T17:47:43.000Z","size":281,"stargazers_count":310,"open_issues_count":12,"forks_count":20,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-27T19:53:18.639Z","etag":null,"topics":["kakoune","keyboard-interface","krabby","link-hints","multiple-selections","subject-object-verb","tab-search","webextension"],"latest_commit_sha":null,"homepage":"https://krabby.netlify.app","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexherbo2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING","funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"patreon":"alexherbo2"}},"created_at":"2019-10-03T16:54:15.000Z","updated_at":"2024-12-29T08:31:39.000Z","dependencies_parsed_at":"2024-04-20T05:34:03.663Z","dependency_job_id":"83070a07-6689-48fa-8857-5d23e6087c73","html_url":"https://github.com/alexherbo2/krabby","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alexherbo2/krabby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexherbo2%2Fkrabby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexherbo2%2Fkrabby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexherbo2%2Fkrabby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexherbo2%2Fkrabby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexherbo2","download_url":"https://codeload.github.com/alexherbo2/krabby/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexherbo2%2Fkrabby/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28844014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T07:39:25.367Z","status":"ssl_error","status_checked_at":"2026-01-28T07:39:24.487Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kakoune","keyboard-interface","krabby","link-hints","multiple-selections","subject-object-verb","tab-search","webextension"],"created_at":"2024-07-31T15:00:55.413Z","updated_at":"2026-01-28T10:33:13.594Z","avatar_url":"https://github.com/alexherbo2.png","language":"HTML","funding_links":["https://patreon.com/alexherbo2"],"categories":["HTML"],"sub_categories":[],"readme":"# [Krabby]\n\n[![Platform](https://img.shields.io/badge/Platform-Linux%20|%20FreeBSD%20|%20OpenBSD%20|%20macOS-lightgray)](#supported-platforms)\n[![Browser](https://img.shields.io/badge/Browser-Chrome%20|%20Firefox-lightgray)](#browser-compatibility)\n[![Discord](https://img.shields.io/discord/718348741811109908)](https://discord.gg/CXF2P8w)\n[![IRC](https://img.shields.io/badge/IRC-%23krabby-blue)](https://webchat.freenode.net/#krabby)\n[![Plugins](https://img.shields.io/badge/Plugins-%23krabby%20%23plugin-green)](https://github.com/search?q=topic:krabby+topic:plugin)\n\n###### [Installation](#installation) | [Configuration](docs/configuration.md) | [Documentation](docs) | [Supported platforms](#supported-platforms) | [Browser compatibility](#browser-compatibility) | [Troubleshooting](docs/troubleshooting.md) | [Contributing](CONTRIBUTING)\n\n\u003cimg src=\"https://www.iconfinder.com/icons/877852/download/svg/512\" height=\"168\" align=\"right\"\u003e\n\nKrabby is a browser extension (for [Chrome] and [Firefox]) for keyboard-based navigation, inspired by [Kakoune].\n\nThe main differences with [existing extensions](docs/alternatives.md) are:\nmultiple selections,\nkeyboard layout agnostic,\nSOV ([subject–object–verb]) constructs and\nsimple interaction with external programs.\nIt is also quite usable with the mouse.\n\n[![Thumbnail](https://img.youtube.com/vi_webp/aXaFt75lIqo/maxresdefault.webp)](https://youtube.com/playlist?list=PLdr-HcjEDx_kOnqvLcE5T1tq9rAVwmths)\n[![Button](https://www.iconfinder.com/icons/317714/download/png/16)](https://youtube.com/playlist?list=PLdr-HcjEDx_kOnqvLcE5T1tq9rAVwmths)\n\nSee [YouTube · Krabby] and [krabby-resources] for all available demos.\n\n[YouTube · Krabby]: https://youtube.com/playlist?list=PLdr-HcjEDx_kOnqvLcE5T1tq9rAVwmths\n[krabby-resources]: https://github.com/alexherbo2/krabby-resources\n\n## TL;DR\n\n**WebExtension** — **Keyboard interface** — **Subject–object–verb order** — **Multiple selections** — **Kakoune-inspired**\n\nRun the following in your terminal, then follow the onscreen instructions.\n\n``` sh\ngit clone https://github.com/alexherbo2/krabby\ncd krabby\nmake install [static=no] [interactive=yes]\n```\n\nAfter installing, try to accomplish the following examples:\n\n\u003cdetails\u003e\n\n\u003csummary\u003eOpening links in a paragraph\u003c/summary\u003e\n\nNavigate to \u003chttps://tuppervim.org\u003e and type:\n\n```\nf{hint}s[alt+a][alt+I][ctrl+enter][alt+x]\n```\n\n**Explanation**\n\n- \u003ckbd\u003ef\u003c/kbd\u003e enters hint mode,\n- `{hint}` is a placeholder for you to select a link,\n- \u003ckbd\u003es\u003c/kbd\u003e creates a selection out of the active element,\n- \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ea\u003c/kbd\u003e expands the region,\n- \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eI\u003c/kbd\u003e selects all links,\n- \u003ckbd\u003eControl\u003c/kbd\u003e + \u003ckbd\u003eEnter\u003c/kbd\u003e opens selected links in the background.\n- Optionally, \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ex\u003c/kbd\u003e will undo the operation (closing right tabs).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003ePlay videos with mpv\u003c/summary\u003e\n\nNavigate to \u003chttps://youtube.com/results?search_query=Berserk+AMV\u003e and type:\n\n```\nF{hint}{hint}\u003cpage-down\u003e{hint}\u003cescape\u003em\n```\n\n**Explanation**\n\n- \u003ckbd\u003eF\u003c/kbd\u003e enters hint mode (lock),\n- `{hint}` is a placeholder for you to select 2 links,\n- \u003ckbd\u003ePage Down\u003c/kbd\u003e scrolls one page down,\n- `{hint}` is a placeholder for you to select another link,\n- \u003ckbd\u003eEscape\u003c/kbd\u003e leaves hint mode.\n- Finally, \u003ckbd\u003em\u003c/kbd\u003e opens the selection with [mpv].\n\n\u003c/details\u003e\n\nIf you want to play around without installing, a live demo is available [here][Live demo].\n\n## Features\n\n- [Subject–object–verb] order.  Learn more at [Differences with Vi(m)][A linguistic twist].\n- Keyboard layout agnostic.  Maps to physical keys, but displays with the [US layout][QWERTY].\n- Multiple selections as a central way of interacting\n- Powerful selection manipulation primitives\n- Link hints\n- External editor support.  Open your favorite editor on text inputs.\n- Tab search\n- Contextual commands\n- Contextual help\n- Simple interaction with external programs\n- Usable with the mouse.  You can for example create a selection by grabbing a\nlink with the mouse and \u003ckbd\u003es\u003c/kbd\u003e to create the selection.  Or create multiple\nselections by clicking on hints with \u003ckbd\u003eF\u003c/kbd\u003e.  If you hold \u003ckbd\u003eControl\u003c/kbd\u003e\nor \u003ckbd\u003eCommand\u003c/kbd\u003e, you can even make selections with the mouse selection area.\n- Limited scope.  Krabby is not [Vim], nor [Kakoune].  Krabby is trying to be a\nnavigation tool and some concepts from code editors don’t translate well.  For\nexample, there is no concept of mode in Krabby, but a system of contexts.\n- Composability.  Composability is better than extensibility.  Krabby tries hard\nto provide features that interact well with each other.  For example, \u003ckbd\u003ef\u003c/kbd\u003e\nand \u003ckbd\u003ey\u003c/kbd\u003e are two building blocks to focus a link and yank its URL.  Depending\non the context, \u003ckbd\u003ey\u003c/kbd\u003e will yank the page or a link URL.\n- Modular (think [Emacs]).  Krabby is divided into multiple small projects.  At\nits core Krabby just holds the configuration and grabs its functionalities from\nother projects.\n- [Chrome] and [Firefox] support.  It has also been tested on [Opera],\n[Vivaldi] and [Brave].\n\n## Dependencies\n\n- [Crystal]\n- [jq]\n- [wl-clipboard] for [Wayland] _or_ [xclip] for [X11] (Optional, for [plumbing](bin/plumb))\n- [mpv] (Optional, for playing videos)\n- [dmenu] (Optional, for tab search and [plumbing](bin/plumb))\n- [Pandoc] (Optional, for HTML filtering)\n\n### Extensions\n\n- [Commands] ([WebExtension] API to perform browser actions)\n- [Shell] ([WebExtension] API to execute external commands)\n- [Editor] (Open an external editor to edit text inputs)\n- [dmenu][webextension-dmenu] (Tab search, selection and beyond with a [dmenu] filter program)\n\n[WebExtension]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions\n\n## Installation\n\nRun the following in your terminal, then follow the onscreen instructions.\n\n``` sh\nmake install [static=no] [extensions=yes] [interactive=yes]\n```\n\n## Supported platforms\n\n- [Linux]\n- [FreeBSD]\n- [OpenBSD]\n- [macOS]\n\n## Browser compatibility\n\n| Web browser | Support |             Engine              |                                        Notes                             |\n| ----------- |:-------:|:-------------------------------:| ------------------------------------------------------------------------ |\n| [Chrome]    |    ✓    | [![Blink][chrome.svg]][Blink]   |                                                                          |\n| [Chromium]  |    ✓    | [![Blink][chrome.svg]][Blink]   |                                                                          |\n| [Firefox]   |    ✓    | [![Gecko][firefox.svg]][Gecko]  | [Only developer or unbranded version][Firefox – Extension Signing – FAQ] |\n| [Edge]      |    ?    | [![Blink][chrome.svg]][Blink]   |                                                                          |\n| [Opera]     |    ✓    | [![Blink][chrome.svg]][Blink]   |                                                                          |\n| [Safari]    |    ✗    | [![WebKit][safari.svg]][WebKit] |                                                                          |\n| [Vivaldi]   |    ✓    | [![Blink][chrome.svg]][Blink]   |                                                                          |\n| [Brave]     |    ✓    | [![Blink][chrome.svg]][Blink]   |                                                                          |\n\n## Credits\n\n- [Kakoune] ([@mawww]) for [ideas][Why Kakoune] and [selection.cc].\n- [Saka Key] ([@eejdoowad]) was a reference, for implementation and its code quality.\n- [@ul], for his advice and proofreading, especially in the early stages.\n- [@GeoGavilanes] for the [Krabby icon].\n- [@occivink], for his work on [phantom selections][kakoune-phantom-selection], from which the “save and restore selections” feature is inspired.\n- [mpv] and [Kakoune] for their website, from which [Krabby] is inspired.\n- [@AdamWagner] for his work to unify scrolling mechanisms.\n\n## References\n\n- [Create a keyboard interface to the web]\n\n[Krabby]: https://krabby.netlify.app\n[Live demo]: https://krabby.netlify.app#live-demo\n[Krabby icon]: https://iconfinder.com/icons/877852/kanto_krabby_pokemon_water_icon\n\n[A linguistic twist]: https://github.com/alexherbo2/krabby/blob/master/docs/differences-with-vim.md#a-linguistic-twist\n\n[WebExtension]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions\n[QWERTY]: https://en.wikipedia.org/wiki/QWERTY\n[Subject–object–verb]: https://en.wikipedia.org/wiki/Subject–object–verb\n\n[Chrome]: https://google.com/chrome/\n[Chrome Web Store]: https://chrome.google.com/webstore\n\n[Firefox]: https://mozilla.org/firefox/\n[Firefox Add-ons]: https://addons.mozilla.org\n[Firefox – Extension Signing – FAQ]: https://wiki.mozilla.org/Add-ons/Extension_Signing#FAQ\n\n[Linux]: https://kernel.org\n[FreeBSD]: https://freebsd.org\n[OpenBSD]: https://openbsd.org\n[macOS]: https://apple.com/macos/\n\n[Wayland]: https://wayland.freedesktop.org\n[X11]: https://x.org\n\n[Chrome]: https://google.com/chrome/\n[Chromium]: https://chromium.org\n[Firefox]: https://mozilla.org/firefox/\n[Edge]: https://microsoft.com/en-us/windows/microsoft-edge\n[Opera]: https://opera.com\n[Safari]: https://apple.com/safari/\n[Vivaldi]: https://vivaldi.com\n[Brave]: https://brave.com\n\n[Blink]: https://chromium.org/blink\n[Gecko]: https://developer.mozilla.org/en-US/docs/Mozilla/Gecko\n[WebKit]: https://webkit.org\n\n[chrome.svg]: https://developer.mozilla.org/static/browsers/chrome.b49946f7739f.svg\n[firefox.svg]: https://developer.mozilla.org/static/browsers/firefox.1c9f202ae696.svg\n[safari.svg]: https://developer.mozilla.org/static/browsers/safari.aca6ae03b671.svg\n\n[Kakoune]: https://kakoune.org\n[Vim]: https://vim.org\n[Emacs]: https://gnu.org/software/emacs/\n[Crystal]: https://crystal-lang.org\n[jq]: https://stedolan.github.io/jq/\n[wl-clipboard]: https://github.com/bugaevc/wl-clipboard\n[xclip]: https://github.com/astrand/xclip\n[mpv]: https://mpv.io\n[dmenu]: https://tools.suckless.org/dmenu/\n[Pandoc]: https://pandoc.org\n\n[Commands]: https://github.com/alexherbo2/webextension-commands\n[Shell]: https://github.com/alexherbo2/webextension-shell\n[Editor]: https://github.com/alexherbo2/webextension-editor\n[webextension-dmenu]: https://github.com/alexherbo2/webextension-dmenu\n\n[Kakoune]: https://kakoune.org\n[Why Kakoune]: https://kakoune.org/why-kakoune/why-kakoune.html\n[selection.cc]: https://github.com/mawww/kakoune/blob/master/src/selection.cc\n[kakoune-phantom-selection]: https://github.com/occivink/kakoune-phantom-selection\n\n[Saka Key]: https://key.saka.io\n\n[@mawww]: https://github.com/mawww\n[@eejdoowad]: https://github.com/eejdoowad\n[@ul]: https://github.com/ul\n[@GeoGavilanes]: https://iconfinder.com/GeoGavilanes\n[@occivink]: https://github.com/occivink\n[@AdamWagner]: https://github.com/AdamWagner\n\n[Native messaging]: https://developer.chrome.com/extensions/nativeMessaging\n[Regular Expressions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n\n[Create a keyboard interface to the web]: https://alexherbo2.github.io/blog/chrome/create-a-keyboard-interface-to-the-web/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexherbo2%2Fkrabby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexherbo2%2Fkrabby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexherbo2%2Fkrabby/lists"}