I’ve used a lot of web browsers. My journey down the “Information Super Highway” actually started before there were paved roads i.e. before the WWW existed. My first use of the internet was mainly using tools like gopher, archie, veronica, ftp, email, and usenet. The first web browsers I can remember using were Cello and Mosaic, but I may have used an older text mode web browser on a BBS prior to that.

I’ve been using linux for going on 31 (DANG, that’s over half my life) years now, and feel like the GUI web browsers I’ve spent the most time in are Netscape and Firefox. In the terminal, it’s been links, lynx, and w3m. I’ve happily used Firefox for the last I-don’t-know-how-many-years, with the extensions ublock origin, Joplin web clipper, Vimium (for Vim-style keybindings), and Bitwarden.

The reasons I decided to try something else boil down mainly to needing something keyboard-focused (Vim-like keybindings), minimal GUI (less clunky), and light weight. Firefox with Vimium meets the Vim-like keybindings, but with my tendency to have a lot of tabs open, I was having to run a couple of extra extensions (OneTab and Auto Tab Discard) just to manage the amount of memory Firefox was consuming. As for the something-less-clunky requirement, Firefox even with the menu and bookmark toolbars disabled still uses more screen real estate than I’d like.

My search for a new alternative led me to the only browser that checked all the boxes, qutebrowser.

From Wikipedia: qutebrowser is a free, open-source web browser that is keyboard-focused and minimal in design. Written in Python and using PyQt, qutebrowser aims to offer a lightweight browser that can be primarily operated with keyboard commands inspired by Vim-style keybindings.

So two months ago, I decided to stop using Firefox, and for at least a week, do all my web browsing using qutebrowser; I figured I needed a week to fully acclimate myself to the keybindings.

Qutebrowser, while new to me, is not new; it’s just recently turned 11 years old. The development team is very small, but what they’ve created is an extraordinary, useful, and hackable browser. There’s is NO way I will be able detail it’s many feature in this post, so a short synopsis of what makes qutebrowser awesome will have to do.

Qutebrowser is WAY better at the Vim-like keybindings than Vimium. There are so many keyboard short cuts, and they are sane as well. There’s a cheat sheet online for default bindings, as well as a html page listing them accessible at the address qute://bindings. You can edit, add, and disable keybindings too.

Basic keybindings to get you started (from qute://help):

  • Use the arrow keys or hjkl to move around a webpage (Vim-like syntax is used in quite a few places)
  • To zoom in or out of a webpage, use the + or - keys respectively
  • To go to a new webpage, press o, then type a url, then press Enter (Use O to open the url in a new tab, go to edit the current URL)
  • If what you’ve typed isn’t a url, then a search engine will be used instead (DuckDuckGo, by default)
  • To switch between tabs, use J (next tab) and K (previous tab), or press , where num is the position of the tab to switch to
  • To close the current tab, press d (and press u to undo closing a tab)
  • Use H and L to go back and forth in the history
  • To click on something without using the mouse, press f to show the hints, then type the keys next to what you want to click on (if that sounds weird, then just try pressing f and see what happens)
  • Press : to show the commandline
  • To search in a page, press /, type the phrase to search for, then press Enter. Use n and N to go back and forth through the matches, and press Esc to stop doing the search.
  • To close qutebrowser, press Alt-F4, or :q, :wq, (or :ZZ) to save the currently open tabs and quit (note that in the settings you can make qutebrowser always save the currently open tabs)

Hints are another absolutely awesome thing about qutebrowser. Just hit the f key to list a hint for every clickable link the current page, then type the hint and you’ve clicked it without even using the mouse. Hit ; to enter hint mode and you’ll be greeted with a list of bindings with description for actions that can be taken in hint mode.

qutebrowser-hints

Type : to enter command mode and you’ll be greeted with a fzf interface that list every command. From here you can set do a LOT. Set bindings, update the ad-blocker, configure qutebrowser, and more.

qutebrowser-command-fzf

If you haven’t caught on yet, qutebrowser is modal. Modes include: Normal, Caret, Command, Hint, Insert, Passthrough, Prompt, Register, and Yesno.

One of the things that drew me to Qutebrowser was it’s minimal UI. To say it doesn’t get in the way is an understatement. Other than the webpage itself, all you have is a minimal tab row, and a status bar, both of which can be disabled or toggled on and off. I really like how minimal the UI is, and find that because of it, qutebrowser is an excellent replacement for a TUI browser in one-off scripts and for use in TUI programs like newsboat, neomutt, and tuir.

qutebrowser-hide-tabs

Qutebrowser’s documentation is excellent! All settings, commands, and shortcuts are described and or documented online, in the fzf finder pop-up interface, html pages accessible from the qute:// addresses, and from the built-in documentation accessible via the :help command. All commands can be started with the –help flag as well. You can configure qutebrowser in command mode, at the prompt, or from the address qute://settings

qutebrowser-settings

Qutebrowser has built in ad-blocking, although not as effective as ublock origin. However, it is adequate, and coupled with my Raspberry Pi blocking ads network-wide with Pi-hole, my ad-blocking experience is equal to, or better than with Firefox and ublock origin.

Bookmark (and quickmark) management is another thing qutebrowser got right. I was able to import my bookmarks, and searching through them using the built-in fzf make for a superior experience. I won’t go into the differences between bookmarks and quickmarks, but will say that I’ve kept all my eggs in the quickmark basket so far.

Qutebrowser’s fzf-integration is excellent, and truly feels built-in. It is very useful, intuitive, and takes the whole keyboard-focused thing to a whole new level.

Qutebrowser is light weight(-ish). Lacking any sort of concrete data, and based solely on my experience so far, qutebrowser is lighter weight than Firefox. I do find memory usage creeping up slowly over long periods of time (weeks) if a lot of tabs have been opened and closed. Restarting qutebrowser solves this. I have also noticed an improvement with the latest release (3.4.0) in this regard.

Really, the only thing that qutebrowser lacks for me is extension support; you cannot install any extensions (yet). This hasn’t been an issue for me though. I don’t need ublock-origin with qutebrowser’s built in ad-blocking (coupled with my pi-hole). Also I haven’t missed Bitwarden’s extension, as I’ve found a more than adequate (and less clunky) replacement with a rofi/fzf script (rbw). The only extension I used in Firefox that I miss using in qutebrowser is the Joplin web clipper; but with qutebrowser’s user script capabilities I can envision different ways to regain that functionality.

I can highly recommend qutebrowser if you are looking for a minimal, lightweight, keyboard-focused, hackable web browser. Whether you’re familiar with Vim-like keybindings or not, give it a try, explore the online help system, and you will be rewarded with what I think is a superior browsing experience. Once you’ve spent some time in qutebrowser, it is very hard to use another browser!

Initially, this experiment was to last a week, but I’m on week 10 now, and I don’t see myself switching back.

-dsyates

(o\_!_/o)