qutebrowser A keyboard-driven browser.

Change Log

All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.

v1.0.0 (unreleased)

Breaking changes

  • Support for legacy QtWebKit (before 5.212 which is distributed independently from Qt) is dropped.

  • Support for Python 3.4 is dropped.

  • Support for Qt before 5.7 is dropped.

  • New dependency on the QtSql module and Qt sqlite support.

  • New dependency on ruamel.yaml; dropped PyYAML dependency.

  • The QtWebEngine backend is now used by default if available.

  • New config system which ignores the old config file.

  • The depedency on PyOpenGL (when using QtWebEngine) got removed. Note that PyQt5.QtOpenGL is still a dependency.

Major changes

  • New completion engine based on sqlite, which allows to complete the entire browsing history.

  • Completely rewritten configuration system.


  • New back/forward indicator in the statusbar


  • Upgrading qutebrowser with a version older than v0.4.0 still running now won’t work properly anymore.

  • Using :download now uses the page’s title as filename.

  • Using :back or :forward with a count now skips intermediate pages.

  • When there are multiple messages shown, the timeout is increased.

  • :search now only clears the search if one was displayed before, so pressing <Escape> doesn’t un-focus inputs anymore.


  • Exiting fullscreen via :fullscreen or buttons on a page now restores the correct previous window state (maximized/fullscreen).

v0.11.1 (unreleased)


  • Fixed empty space being shown after tabs in the tabbar in some cases.

  • Fixed :restart in private browsing mode.

  • Fixed printing on macOS.

  • Closing a pinned tab via mouse now also prompts for confirmation.

  • The "try again" button on error pages works correctly again.

  • :spawn -u -d is now disallowed.

  • :spawn -d shows error messages correctly now.


New dependencies

  • New dependency on PyQt5.QtOpenGL if QtWebEngine is used. QtWebEngine depends on QtOpenGL already, but on distributions packaging split PyQt5 wrappers, the wrappers for QtOpenGL are now required.

  • New dependency on PyOpenGL if QtWebEngine is used.


  • Private browsing is now implemented for QtWebEngine, and changed its behavior: The general -> private-browsing setting now only applies to newly opened windows, and you can use the -p flag to :open to open a private window.

  • New "pinned tabs" feature, with a new :tab-pin command (bound to <Ctrl-p> by default).

  • (QtWebEngine) Implemented :follow-selected.

  • New :clear-messages command to clear shown messages.

  • New ui -> keyhint-delay setting to configure the delay until the keyhint overlay pops up.

  • New -s option for :open to force a HTTPS scheme.

  • :debug-log-filter now accepts none as an argument to clear any log filters.

  • New --debug-flag argument which replaces --debug-exit and --pdb-postmortem.

  • New tabs -> favicon-scale option to scale up/down favicons.

  • colors -> statusbar.bg/fg.private and .command.private to customize statusbar colors for private windows.

  • New {private} field displaying [Private Mode] for ui -> window-title-format and tabs -> title-format.

  • (QtWebEngine) Proxy support with Qt 5.7.1 (already was supported for 5.8 and newer)


  • To prevent elaborate phishing attacks, the Punycode version (xn--*) is now shown in addition to the decoded version for international domain names (IDN).

  • Starting with legacy QtWebKit now shows a warning message. With the next release, support for it will be removed.

  • The Windows releases are redone from scratch, which means:

  • They now use the new QtWebEngine backend

  • The bundled Qt is updated from 5.5 to 5.9

  • The bundled Python is updated from 3.4 to 3.6

  • They are now generated with PyInstaller instead of cx_Freeze

  • The installer is now generated using NSIS instead of being a MSI

  • Improved qute://history page (with lazy loading)

  • Crash reports are not public anymore.

  • Paths like C: are now treated as absolute paths on Windows for downloads, and invalid paths are handled properly.

  • Comments in the config file are now placed before the individual options instead of being before sections.

  • Messages are now hidden when clicked.

  • stdin is now closed immediately for processes spawned from qutebrowser.

  • When ui -> message-timeout is set to 0, messages are now never cleared.

  • Middle/right-clicking the blank parts of the tab bar (when vertical) now closes the current tab.

  • The adblocker now also blocks non-GET requests (e.g. POST).

  • javascript: links can now be hinted.

  • :view-source, :tab-clone and :navigate --tab now don’t open the tab as "explicit" anymore, i.e. (with the default settings) open it next to the active tab.

  • qute:* pages now use qute://* instead (e.g. qute://version instead of qute:version), but the old versions are automatically redirected.

  • Texts in prompts are now selectable.

  • The default level for :messages is now info, not error

  • Trying to focus the currently focused tab with :tab-focus now focuses the last viewed tab.

  • (QtWebEngine) With Qt 5.9, content -> cookies-store can now be set without a restart.

  • (QtWebEngine) With Qt 5.9, better error messages are now shown for failed downloads.

  • (QtWebEngine) The underlying Chromium version is now shown in the version info.

  • (QtWebKit) Renderer process crashes now show an error page on Qt 5.9 or newer.

  • (QtWebKit) storage → offline-web-application-storage` got renamed to ...-cache

  • (QtWebKit) PAC now supports SOCKS5 as type.


  • The macOS .dmg is now built against Qt 5.9 which fixes various important issues (such as not being able to type dead keys).

  • Fixed crash with :download on PyQt 5.9.

  • Cloning a page without history doesn’t crash anymore.

  • When a download results in a HTTP error, it now shows the error correctly instead of crashing.

  • Pressing ctrl-c while a config error is shown works as intended now.

  • When the key config isn’t writable, we now show an error instead of crashing.

  • Fixed crash when unbinding an unbound key in the key config.

  • Fixed crash when using :debug-log-filter when --filter wasn’t given on startup.

  • Fixed crash with some invalid setting values.

  • Continuing a search after clearing it now works correctly.

  • The tabbar and completion should now be more consistently and correctly styled with various system styles.

  • Applying styiles in qt5ct now shouldn’t crash anymore.

  • The validation for colors in stylesheets is now less strict, allowing for all valid Qt values.

  • data: URLs now aren’t added to the history anymore.

  • Accidentally starting with Python 2 now shows a proper error message again.

  • For some people, running some userscripts crashed - this should now be fixed.

  • Various other rare crashes should now be fixed.

  • The settings documentation was truncated with v0.10.1 which should now be fixed.

  • Scrolling to an anchor in a background tab now works correctly, and javascript gets the correct window size for background tabs.

  • (QtWebEngine) Added a workaround for a black screen with some setups

  • (QtWebEngine) Starting with Nouveau graphics now shows an error message instead of crashing in Qt.

  • (QtWebEngine) Retrying downloads now shows an error instead of crashing.

  • (QtWebEngine) Cloning a view-source tab now doesn’t crash anymore.

  • (QtWebEngine) window.navigator.userAgent is now set correctly when customizing the user agent.

  • (QtWebEngine) HTML fullscreen is now tracked for each tab separately, which means it’s not possible anymore to accidentally get stuck in fullscreen state by closing a tab with a fullscreen video.

  • (QtWebEngine) :scroll-page with --bottom-navigate now works correctly.

  • (QtWebKit) The HTTP cache is disabled on Qt 5.7.1 and 5.8 now as it leads to frequent crashes due to a Qt bug.

  • (QtWebKit) Fixed Crash when a PAC file returns an invalid value.



  • --qt-arg and --qt-flag can now also be used to pass arguments to Chromium when using QtWebEngine.


  • URLs are now redacted properly (username/password, and path/query for HTTPS) when using Proxy Autoconfig with QtWebKit

  • Crash when updating adblock lists with invalid UTF8-chars in them

  • Fixed the web inspector with QtWebEngine

  • Version checks when starting qutebrowser now also take the Qt version PyQt was compiled against into account

  • Hinting a input now doesn’t select existing text anymore with QtWebKit

  • The cursor now moves to the end when input elements are selected with QtWebEngine

  • Download suffixes like (1) are now correctly stripped with QtWebEngine

  • Crash when trying to print a tab which was closed in the meantime

  • Crash when trying to open a file twice on Windows



  • Userscripts now have a new $QUTE_COMMANDLINE_TEXT environment variable, containing the current commandline contents

  • New ripbang userscript to create a searchengine from a duckduckgo bang

  • QtWebKit Reloaded (also called QtWebKit-NG) is now fully supported

  • Various new functionality with the QtWebEngine backend:

    • Printing support with Qt >= 5.8

    • Proxy support with Qt >= 5.8

    • The general -> print-element-backgrounds option with Qt >= 5.8

    • The content -> cookies-store option

    • The storage -> cache-size option

    • The colors -> webpage.bg option

    • The HTML5 fullscreen API (e.g. youtube videos) with QtWebEngine

    • :download --mhtml

  • New qute:history URL and :history command to show the browsing history

  • Open tabs are now auto-saved on each successful load and restored in case of a crash

  • :jseval now has a --file flag so you can pass a javascript file

  • :session-save now has a --only-active-window flag to only save the active window

  • macOS builds are back, and built with QtWebEngine


  • PyQt 5.7/Qt 5.7.1 is now required for the QtWebEngine backend

  • Scrolling with the scrollwheel while holding shift now scrolls sideways

  • New way of clicking hints which solves various small issues

  • When yanking a mailto: link via hints, the mailto: prefix is now stripped

  • Zoom level messages are now not stacked on top of each other anymore

  • qutebrowser now automatically uses QtWebEngine if QtWebKit is unavailable

  • :history-clear now asks for a confirmation, unless it’s run with --force.

  • input -> mouse-zoom-divider can now be 0 to disable zooming by mouse wheel

  • network -> proxy can also be set to pac+file://... now to use a local proxy autoconfig file (on QtWebKit)


  • (QtWebKit) Various rarely customized settings were removed:

  • ui -> css-media-type (defaults to desktop)

  • general -> site-specific-quirks (now always turned on)

  • storage -> offline-storage-default-quota (defaults to 5MB)

  • storage -> offline-web-application-cache-quota (defaults to no quota)

  • storage -> object-cache-capacities (default depends on disk space)

  • content -> css-regions (now always turned off)

  • storage -> offline-storage-database (merged into storage -> local-storage)


  • Various bugs with Qt 5.8 and QtWebEngine:

    • Segfault when closing a window

    • Segfault when closing a tab with a search active

    • Fixed various mouse actions (like automatically entering insert mode) not working

    • Fixed hints sometimes not working

    • Segfault when opening a URL after a QtWebEngine renderer process crash

  • Other QtWebEngine fixes:

    • Insert mode now gets entered correctly with a non-100% zoom

    • Crash reports are now re-enabled when using QtWebEngine

    • Fixed crashes when closing tabs while hinting

    • Using :undo or :tab-clone with a view-source:// or chrome:// tab is now prevented, as it segfaults

  • :enter-mode now refuses to enter modes which can’t be entered manually (which caused crashes)

  • :record-macro (q) now doesn’t try to record macros for special keys without a text

  • Fixed PAC (proxy autoconfig) not working with QtWebKit

  • :download --mhtml now uses the new file dialog

  • Word hints are now upper-cased correctly when hints → uppercase is true

  • Font validation is now more permissive in the config, allowing e.g. "Terminus (TTF)" as font name

  • Fixed starting on newer PyQt/sip versions with LibreSSL

  • When downloading files with QtWebKit, a User-Agent header is set when possible

  • Fixed showing of keybindings in the :help completion

  • :navigate prev/next now detects rel attributes on <a> elements, and handles multiple rel attributes correctly

  • Fixed a crash when hinting with target userscript and spawning a non-existing script

  • Lines in Jupyter notebook now trigger insert mode



  • Prevent websites from downloading files to a location outside of the download folder with QtWebEngine.



  • New dependency: qutebrowser now depends on the Qt QML module, which is packaged separately in some distributions (as Qt Declarative/QML/Quick).

  • New :rl-backward-kill-word command which does what :rl-unix-word-rubout did before v0.8.0.

  • New :rl-unix-filename-rubout command which is similar to readline’s unix-filename-rubout.

  • New fonts -> completion.category setting to customize the font used for completion category headers.

  • New :debug-log-capacity command to adjust how many lines are logged into RAM (to report bugs which are difficult to reproduce).

  • New hide-unmatched-rapid-hints option to not hide hint unmatched hint labels in rapid mode.

  • New {clipboard} and {primary} replacements for the commandline which replace the :paste command.

  • New :insert-text command to insert a given text into a field on the page, which replaces :paste-primary together with the {primary} replacement.

  • New :window-only command to close all other windows.

  • New prev-category and next-category arguments to :completion-item-focus to focus the previous/next category in the completion (bound to <Ctrl-Tab> and <Ctrl-Shift-Tab> by default).

  • New :click-element command to fake a click on a element.

  • New :debug-log-filter command to change console log filtering on-the-fly.

  • New :debug-log-level command to change the console loglevel on-the-fly.

  • New general -> yank-ignored-url-parameters option to configure which URL parameters (like utm_source etc.) to strip off when yanking an URL.

  • Support for the HTML5 page visibility API

  • New readability userscript which shows a readable version of a page (using the readability-lxml python package)

  • New cast userscript to show a video on a Google Chromecast

  • New :run-with-count command which replaces the (undocumented) :count:command syntax.

  • New :record-macro (q) and :run-macro (@) commands for keyboard macros.

  • New ui -> hide-scrollbar setting to hide the scrollbar independently of the user-stylesheet setting.

  • New general -> default-open-dispatcher setting to configure what to open downloads with (instead of e.g. xdg-open on Linux).

  • Support for PAC (proxy autoconfig) with QtWebKit


  • Hints are now drawn natively in Qt instead of using web elements. This has a few implications for users:

    • The hints -> opacity setting does not exist anymore, but you can use rgba(r, g, b, alpha) colors instead for colors -> hints.bg.

    • The hints -> font setting is not affected by fonts -> web-family-fixed anymore. Thus, a transformer got added to change Monospace to ${_monospace}.

    • Gradients in hint colors can now be configured by using qlineargradient and friends instead of -webkit-gradient. The most common cases get migrated automatically, but if you drastically changed the defaults, you’ll need to manually adjust your config.

    • Styling hints by styling qutehint elements in user-stylesheet was never officially supported and does not work anymore.

    • Hints are now not affected by the page’s stylesheet or zoom anymore.

  • :bookmark-add now has a --toggle flag which deletes the bookmark if it already exists.

  • :bookmark-load now has a --delete flag which deletes the bookmark after loading it.

  • :open now also accepts quickmark names instead of URLs

  • :tab-move now optionally takes an index for absolute moving.

  • Commands taking either an argument or a count (like :zoom or :tab-focus) now prefer the count instead of showing an error message.

  • :open now has an --implicit argument to treat the opened tab as implicit (i.e. to open it at the position it would be opened if it was a clicked link)

  • :download-open and :prompt-open-download now have an optional cmdline argument to pass a commandline to open the download with.

  • :yank now has a position argument to select what to yank instead of using flags.

  • Replacements like {url} can now also be used in the middle of an argument. Consequently, commands taking another command (:later, :repeat and :bind) now don’t immediately evaluate variables.

  • Tab titles in the :buffer completion now update correctly when a page’s title is changed via javascript.

  • :hint now has a --mode <mode> flag to override the hint mode configured using the hints -> mode setting.

  • With new-instance-open-target set to a tab option, the tab is now opened in the most recently focused (instead of the last opened) window. This can be configured with the new new-instance-open-target.window setting. It can also be set to last-visible to show the pages in the most recently visible window, or first-opened to use the first (oldest) available window.

  • Word hints now are more clever about getting the element text from some elements.

  • Completions for :help and :bind now also show hidden commands

  • The :buffer completion now also filters using the first column (id).

  • :undo has been improved to reopen tabs at the position they were closed.

  • :navigate now takes a count for up/increment/decrement.

  • The hints -> auto-follow setting now can be set to always/full-match/unique-match/never to more precisely control when hints should be followed automatically.

  • Counts can now be used with special keybindings (e.g. with modifiers). This was already implemented for v0.7.0 originally, but got reverted because it caused some issues and then never re-applied.

  • Sending a command to an existing instance (via "qutebrowser :reload") now doesn’t mark it as urgent anymore.

  • tabs -> title-format now treats an empty string as valid.

  • Bindings for :, / and ? are now configured explicitly and not hardcoded anymore.

  • The completion -> show setting can now be set to always, auto or never.

  • :open-editor can now be used in any mode.

  • Lots of improvements to and bugfixes for the QtWebEngine backend, such as working hints. However, using qutebrowser directly from git is still advised when using --backend webengine.

  • content -> javascript-can-open-windows got renamed to javascript-can-open-windows-automatically.

  • :prompt-accept now optionally accepts a value which overrides the one entered in the input box. yes and no can be used as values for yes/no questions.

  • The new --qt-arg and --qt-flag arguments can be used to pass arguments/flags to Qt’s commandline.

  • Error/warning/info messages are now shown stacked above the statusbar. This also added various new settings:

    • colors -> messages.fg.error (renamed from statusbar.fg.error)

    • colors -> messages.bg.error (renamed from statusbar.bg.error)

    • colors -> messages.border.error

    • colors -> messages.fg.warning (renamed from statusbar.fg.warning)

    • colors -> messages.bg.warning (renamed from statusbar.bg.warning)

    • colors -> messages.border.warning

    • colors -> messages.fg.info

    • colors -> messages.bg.info

    • colors -> messages.border.info

    • fonts -> messages.error

    • fonts -> messages.warning

    • fonts -> messages.info

  • The qute:settings page now also shows option descriptions.

  • qute:version and qutebrowser --version now show various important paths

  • :spawn/userscripts now show a nicer error when a script wasn’t found

  • Various functionality now works when javascript is disabled with QtWebKit

  • Various commands/settings taking left/right/previous arguments now take prev/next/last-used to remove ambiguity.

  • The ui -> user-stylesheet setting now only takes filenames, not CSS snippets

  • ui -> window-title-format now has a new `xhtml11 ` replacement

  • :hint has a new --add-history argument to add the URL to the history for yank/spawn targets.

  • :set now cycles through values if more than one argument is given.

  • :open now opens default-page without an URL even without -t/-b/-w given.


  • The :paste command got deprecated as :open with {clipboard} and {primary} can be used instead.

  • The :paste-primary command got deprecated as :insert-text {primary} can be used instead.

  • The :prompt-yes and :prompt-no commands got deprecated as :prompt-accept yes and :prompt-accept no can be used instead.


  • The :yank-selected command got merged into :yank as :yank selection and thus removed.

  • The :completion-item-prev and :completion-item-next commands got merged into a new :completion-focus {prev,next} command and thus removed.

  • The ui -> hide-mouse-cursor setting since it was completely broken and nobody seemed to care.

  • The hints -> opacity setting - see the "Changed" section for details.

  • The completion -> auto-open setting got merged into completion -> show and thus removed.

  • All --qt-* arguments got replaced by --qt-arg and --qt-flag and thus removed.

  • The -c/--confdir, --datadir and --cachedir arguments got removed, as --basedir should be sufficient.


  • :undo now doesn’t undo tabs "closed" by :tab-detach anymore.

  • Fixed an issue with hint chars not being cleared correctly when leaving hint mode.

  • :tab-detach now fails correctly when there’s only one tab open.

  • Various small issues with the command completion

  • Fixed hang when using multiple spaces in a row with the URL completion

  • qutebrowser now still starts with an incorrectly configured $XDG_RUNTIME_DIR.

  • Fixed crash when a userscript writes invalid unicode data to the FIFO

  • Fixed crash when a included HTML was not found



  • Fixed crash when doing :<space><enter>, another corner-case introduced in v0.8.0

  • Fixed :open-editor (<Ctrl-e>) on Windows

  • Fixed crash when setting general -> auto-save-interval to a too big value.

  • Fixed crash when using hints on Void Linux.

  • Fixed compatibility with Python 3.5.2+ on Debian unstable

  • Compatibility with pdfjs v1.6.210

  • :bind can now be used to bind to an alias (binding by editing keys.conf already worked before)

  • The command completion now updates correctly when changing aliases

  • The tabbar now displays correctly with the Adwaita Qt theme

  • The default sk keybinding now sets the commandline to :bind correctly

  • Fixed crash when closing a window without focusing it

  • Userscripts now can access QUTE_FIFO correctly on Windows



  • Fixed general -> private-browsing not being set correctly until a restart (which caused e.g. local storage to be enabled).

  • When hinting input fields (:t), also consider input elements without a type.

  • Fixed crash when opening an invalid URL with a percent-encoded and a real @ in it

  • Fixed default ;o and ;O bindings

  • Fixed local storage not working (and possible other bugs) when using a relative path with --basedir.

  • Fixed crash when deleting a quickmark with Ctrl-D

  • Fixed HTML5 video playback on Windows

  • Fixed crash when using ‘:prompt-open-download` with a file with chars not encodable with the OS’ filesystem encoding (e.g. with LC_ALL=C)

  • Fixed :prompt-open-download with a too long filename (> 255 bytes)

  • Fixed crash when cancelling a download after doing :prompt-open-download

  • Fixed crash when writing a download to disk fails with :prompt-open-download.

  • Fixed :restart deleting the basedir when it was given with --basedir.



  • Fix crash when pressing enter without a command

  • Adjust error message to point out QtWebEngine is unsupported with the OS X .app currently.

  • Hide Harfbuzz warning with the macOS .app



  • New :repeat-command command (mapped to .) to repeat the last command. Note that two former default bundings conflict with that binding, unbinding them via :unbind .i and :unbind .o is recommended.

  • New qute:bookmarks page which displays all bookmarks and quickmarks.

  • New :prompt-open-download (bound to Ctrl-X) which can be used to open a download directly when getting the filename prompt.

  • New {host} replacement for tab- and window titles which evaluates to the current host.

  • New default binding ;t for :hint input.

  • New variables $QUTE_CONFIG_DIR, $QUTE_DATA_DIR and $QUTE_DOWNLOAD_DIR available for userscripts.

  • New option uistatus-position to configure the position of the status bar (top/bottom).

  • New --pdf <filename> argument for :print WHICH can be used to generate a PDF without a dialog.


  • :scroll-perc now prefers a count over the argument given to it, which means gg can be used with a count.

  • Aliases can now use ;; to have an alias which executed multiple commands.

  • :edit-url now does nothing if the URL isn’t changed in the spawned editor.

  • :bookmark-add can now be passed a URL and title to add that as a bookmark rather than the current page.

  • New taskadd userscript to add a taskwarrior task annotated with the current URL.

  • :bookmark-del and :quickmark-del now delete the current page’s URL if none is given.


  • Compatibility with PyQt 5.7

  • Fixed some configuration values being lost when a config option gets removed from qutebrowser’s code.

  • Fix crash when downloading with a full disk

  • Using :jump-mark (e.g. '') when the current URL is invalid doesn’t crash anymore.


  • The ability to display status messages from webpages, as well as the related ui -> display-statusbar-messages setting.

  • The general -> wrap-search setting as searches now always wrap. According to a quick straw poll and prior crash logs, almost nobody is using wrap-search = false, and turning off wrapping is not possible with QtWebEngine.

  • :edit-url now doesn’t accept a count anymore as its behavior was confusing and it doesn’t make much sense to add a count.



  • New :edit-url command to edit the URL in an external editor.

  • New network -> custom-headers setting to send custom headers with every request.

  • New {url:pretty} commandline replacement which gets replaced by the decoded URL.

  • New marks to remember a scroll position:

  • New :jump-mark command to jump to a mark, bound to '

  • New :set-mark command to set a mark, bound to ```(backtick)

  • The ' mark gets set when moving away (hinting link with anchor, searching, etc.) so you can move back with ''

  • New --force-color argument to force colored logging even if stdout is not a terminal

  • New :messages command to show error messages

  • New pop-up showing possible keybinding when the first key of a keychain is pressed. This can be turned off using :set ui keyhint-blacklist *.

  • New hints -> auto-follow-timeout setting to ignore keypresses after following a hint when filtering in number mode.

  • New :history-clear command to clear the entire history

  • New hints -> find-implementation to select which implementation (JS/Python) should be used to find hints on a page. The javascript implementation is better, but slower.

  • New inputs group for :hint to hint text input fields.


  • qutebrowser got a new (slightly updated) logo

  • :tab-focus can now take a negative index to focus the nth tab counted from the right.

  • :yank can now yank the pretty/decoded URL by adding --pretty

  • :navigate now clears the URL fragment

  • :completion-item-del (Ctrl-D) can now be used in :buffer completion to close a tab

  • Various SSL ciphers are now disabled by default. With recent Qt/OpenSSL versions those already all are disabled, but with older versions they might not be.

  • Show favicons as window icon with tabs-are-windows set.

  • :bind <key> without a command now shows the existing binding

  • The optional colorlog dependency got removed, as qutebrowser now displays colored logs without it.

  • URLs are now shown decoded when hovering.

  • Keybindings are now shown in the command completion

  • Improved behavior when pasting multiple lines

  • Rapid hints can now also be used for the normal hint target, which can be useful with javascript click handlers or checkboxes which don’t actually open a new page.

  • :zoom-in or :zoom-out (+/-) with a too large count now zooms to the smallest/largest zoom instead of doing nothing.

  • The commandline now accepts partially typed commands if they’re unique.

  • Number hints are now kept filtered after following a hint in rapid mode.

  • Number hints are now renumbered after filtering

  • Number hints can now be filtered with multiple space-separated search terms

  • hints -> scatter is now ignored for number hints

  • Better history implementation which also stores titles. As a consequence, URLs which redirect to another URL are now added to the history too, marked with a -r suffix to the timestamp field.


  • Fixed using :hint links spawn with flags - you can now use things like the -v argument for :spawn or pass flags to the spawned commands.

  • Various fixes for hinting corner-cases where following a link didn’t work or the hint was drawn at the wrong position.

  • Fixed crash when downloading from a URL with SSL errors

  • Close file handles correctly when a download failed

  • Fixed crash when using ;Y (:hint links yank-primary) on a system without primary selection

  • Don’t display quit confirmation with finished downloads

  • Fixed updating the tab index in the statusbar when opening a background tab

  • Fixed a crash when entering `:-- ` in the commandline

  • Fixed :debug-console with PyQt 5.6

  • Fixed qutebrowser not starting when sys.stderr is None

  • Fixed crash when cancelling a download which belongs to an MHTML download

  • Fixed rebinding of keybindings being case-sensitive

  • Fix for tab indicators getting lost when moving tabs

  • Fixed handling of backspace in number hinting mode

  • Fixed FileNotFoundError when starting in some cases on old Qt versions

  • Fixed sharing of cookies between tabs when private-browsing is enabled

  • Toggling values with :set now uses lower-case values

  • Hints now work with (non-standard) links with spaces around the URL

  • Strip off trailing spaces for history entries with no title



  • Fixed crash when using :tab-{prev,next,focus} right after closing the last tab with last-close set to close.

  • Fixed crash when doing :undo in a new instance with tabs -> last-close set to default-page.

  • Fixed crash when starting with --cachedir=""

  • Fixed crash in some circumstances when using dictionary hints

  • Fixed various crashes related to PyQt 5.6



  • Fixed broken cheatsheet image which was missing from package

  • Fixed occasional crash when switching/disconnecting monitors

  • Fixed crash when downloading non-ascii files with a broken locale (LC_ALL=C)

  • Added workaround for a Qt/PyQt bug which is too weird to describe here



  • New :buffer command to easily switch tabs by name. This is not bound to a key by default for existing users due to a conflict with the gt/gT bindings (which are now removed from the default bindings). You can bind it by hand by running :bind -f gt set-cmd-text -s :buffer.

  • New --quiet argument for the :debug-pyeval command to not open a tab with the results. Note :debug-pyeval is still only intended for debugging.

  • The completion now matches each entered word separately.

  • A new command :paste-primary got added to paste the primary selection, and <Shift-Insert> got added as a binding so it pastes primary rather than clipboard.

  • New mode word for hints -> mode which uses a dictionary and link-texts for hints instead of single characters.

  • New --all argument for :download-cancel to cancel all running downloads.

  • New password_fill userscript to fill passwords using the pass executable.

  • New current hinting mode which forces opening hints in the current tab (even with target="_blank")


  • Pasting multiple lines via :paste now opens each line in a new tab.

  • :navigate increment/decrement now preserves leading zeroes in URLs.

  • general -> editor can now also handle {} inside another argument (e.g. to open vim via termite)

  • Improved performance when scrolling with many tabs open.

  • Shift-Insert now also pastes primary selection for prompts.

  • :download-remove --all got un-deprecated to provide symmetry with :download-cancel --all. It does the same as :download-clear.

  • Improved detection of URLs/search terms when pasting multiple lines.

  • Don’t remove qutebrowser-editor-* temporary file if editor subprocess crashed

  • Userscripts are also searched in /usr/share/qutebrowser/userscripts.

  • Blocked hosts are now also read from a blocked-hosts file in the config dir (e.g. ~/.config/qutebrowser/blocked-hosts).


  • Fixed starting with -c "".

  • Fixed crash when a tab is closed twice via javascript (e.g. Dropbox authentication dialogs)

  • Fixed crash when a notification/geolocation prompt is answered after closing the tab it belongs to.

  • Fixed crash when downloading a file without any path information (e.g a magnet link).

  • Fixed crashes when opening an empty URL (e.g. via pasting).

  • Fixed validation of duplicate values in hints -> chars.

  • Fixed crash when PDF.js was partially installed.

  • Fixed crash when XDG_DOWNLOAD_DIR was not an absolute path.

  • Fixed very long filenames when downloading data://-URLs.

  • Fixed ugly UI fonts on Windows when Liberation Mono is installed

  • Fixed crash when unbinding key from a section which doesn’t exist in the config

  • Fixed report window after a segfault

  • Fixed some directory browser issues on Windows

  • Fixed crash when closing a window with a finished download and delayed remove-finished-downloads setting.

  • Fixed crash when hitting <Tab> then <Ctrl-C> on pages without keyboard focus.

  • Fixed "Frame load interrupted by policy change" error showing up when downloading files with Qt 5.6.


  • The gt/gT bindings (luakit-like alternatives to J/K) were removed (except for existing configs) to make room for the gt binding to show buffers.



  • Fixed completion for various config values when using :set.

  • Fixed config validation for various config values.

  • Prevented an error being logged when a website with HTTP authentication was opened on Windows.



  • Ability to preview PDFs using pdf.js in the browser if it’s installed. This is disabled by default and can be enabled using the content -> pdfjs-enabled setting.

  • New setting ui -> hide-wayland-decoration to hide the window decoration when using wayland.

  • New userscripts in misc/userscripts:

  • open_download to easily open a file in your downloads folder.

  • view_in_mpv to open a video in mpv and remove it from the page.

  • qutedmenu and dmenu_qutebrowser to select URLs via dmenu

  • New setting content -> host-blocking-whitelist to whitelist certain domains from the adblocker.

  • {scroll_pos} can now be used in ui -> window-title-format and tabs -> title-format.

  • New setting general -> url-incdec-segments to configure which segments of the URL should be affected by :navigate increment/decrement.

  • New --target argument to specify how URLs should be opened in an existing instance.

  • New setting statusbar.url.fg.success.https to set the foreground color for the URL when a page was loaded via HTTPS.

  • The scrollbar in the completion is now styled, and the following new options got added:

    • completion -> scrollbar-width

    • completion -> scrollbar-padding

    • colors -> completion.scrollbar.fg

    • colors -> completion.scrollbar.bg

  • New value none for options taking a color system so they don’t display a gradient:

    • colors -> tabs.indicator.system

    • colors -> downloads.fg.system

    • colors -> downloads.bg.system

  • New command :download-retry to retry a failed download.

  • New command :download-clear which replaces :download-remove --all.

  • :set-cmd-text has a new --append argument to append to the current statusbar text.

  • qutebrowser now uses ~/.netrc if available to authenticate via HTTP.

  • New :fake-key command to send a fake keypress to a website or to qutebrowser.

  • New --mhtml argument for :download to download a page including all ressources as MHTML file.

  • New option tabs -> title-alignment to change the alignment of tab titles.


  • The colors -> tabs.bg/fg.selected option got split into tabs.bg/fg.selected.odd/even.

  • :spawn --userscript and :hint with the userscript target now look up relative paths in ~/.local/share/qutebrowser/userscripts or $XDG_DATA_DIR. Using a binary in $PATH won’t work anymore with --userscript.

  • New design for error pages

  • Link filtering for hints now checks if the text is contained anywhere in the link, and matches case-insensitively.

  • The ui -> remove-finished-downloads option got changed to an integer and now takes a time (in milliseconds) to keep the download around after it’s finished. When set to -1, downloads are never removed.

  • The :follow-hint command now optionally takes the keystring of a hint to follow.

  • :scroll-px now doesn’t take floats anymore, which made little sense.

  • Updated the user agent list for the :set network user-agent completion.

  • Starting with --debug doesn’t log VDEBUG messages anymore (add --loglevel VDEBUG to get them).

  • :debug-console now hides the console if it’s already shown.

  • :yank-selected now doesn’t log the selected text anymore.

  • general -> log-javascript-console got changed from a boolean to an option taking a loglevel (none, info, debug).

  • :tab-move +/- now wraps around if tabs -> wrap is true.

  • When a subprocess (like launched by :spawn) fails, its stdout/stderr is now logged to the console.

  • A search engine name can now contain any non-space character, like dashes.


  • :download-remove --all is now deprecated and :download-clear should be used instead.

  • :download <url> <destination> is now deprecated and :download --dest <destination> <url> should be used instead.


  • :scroll with two pixel-arguments (deprecated in v0.3.0)

  • The :run-userscript command (deprecated in v0.2.0)

  • The rapid and rapid-win targets for :hint (deprecated in v0.2.0)

  • The :cancel-download command (deprecated in v0.2.0)

  • The :download-page command (deprecated in v0.2.0)


  • Fixed retrying of downloads which were started in a now closed tab.

  • Fixed displaying of web history if web-history-max-items is set to -1.

  • Cloned tabs now don’t display favicons anymore if show-favicons is False.

  • Fixed a crash when clicking a bookmark name and pressing Ctrl-D.

  • Fixed a crash when a website presents a very small favicon.

  • Fixed prompting for download directory when storage -> prompt-download-directory was unset.

  • Fixed crash when using :follow-hint outside of hint mode.

  • Fixed crash when using :set foo bar? with invalid section/option.

  • Fixed scrolling to the very left/right with :scroll-perc.

  • Using an external editor should now work correctly with some funny chars (U+2028/U+2029/BOM).

  • Movements in caret mode now should work correctly on macOS and Windows.

  • Fixed upgrade from earlier config versions.

  • Fixed crash when killing a running userscript.

  • Fixed characters being passed through when shifted with forward-unbound-keys set to auto.

  • Fixed restarting after a crash is reported.

  • Removed .pyc files accidentally contained in source releases.



  • Adjusted AppArmor config for the IPC changes in v0.4.0.

  • Fixed atime update frequency for IPC file.

  • Worked around a Qt issue where middle-clicking caused scrolling with a touchpad to restart at the beginning of the page.

  • The completion -> web-history-max-items setting is now also respected for items added after starting qutebrowser.

  • Search terms are now shared between different tabs again

  • Tests (a reduced subset of them) now run correctly again when DISPLAY is not set.

  • Fixed an issue causing qutebrowser to crash with Python 3.5 as soon as an ad was blocked.

  • Fixed an issue causing qutebrowser to not start with more recent Python 3.4 versions (e.g. on Debian experimental).

  • Fixed various PendingDeprecationWarnings shown with Python 3.5.



  • New bookmark functionality (similar to quickmarks without a name).

    • New command :bookmark-add to bookmark the current page (bound to M).

    • New command :bookmark-load to load a bookmark (bound to gb/gB/wB).

  • New (hidden) command :completion-item-del (bound to <Ctrl-D>) to delete the current item in the completion (for quickmarks/bookmarks).

  • New settings tabs -> padding and tabs -> indicator-tabbing to control the size/padding of the tabbar.

  • New setting ui -> statusbar-padding to control the size/padding of the status bar.

  • New setting network -> referer-header to configure when the referer should be sent (by default it’s only sent while on the same domain).

  • New setting tabs -> show which supersedes the old tabs -> hide-* options and has an additional switching option which shows tab while switching them. There’s also a new show-switching option to configure the timeout.

  • New setting storage -> remember-download-directory to remember the last used download directory.

  • New setting storage -> prompt-download-directory to download all downloads without asking.

  • Rapid hinting is now also possible for downloads.

  • Directory browsing via file:// is now supported.


  • Some developer scripts got moved to scripts/dev/

  • When downloading to a FIFO or special file, a confirmation is displayed as this might cause qutebrowser to hang.

  • The :yank-selected command now works in all modes instead of just caret mode and is not hidden anymore.

  • minimal_webkit_testbrowser.py now has a --webengine switch to test QtWebEngine if it’s installed.

  • The column width percentages for the completion view now depend on the completion model.

  • The values for tabs -> position and ui -> downloads-position got changed from north/south/west/`east to top/bottom/left/right. Existing configs should be adjusted automatically.

  • :tab-focus/gt now behaves like :tab-next if no count/index is given.

  • The completion widget doesn’t show a border anymore.

  • The tabbar doesn’t display ugly arrows anymore if there isn’t enough space for all tabs.

  • Some insignificant Qt warnings which were printed on macOS are now hidden.

  • Better support for Qt 5.5 and Python 3.5.


  • Fixed a bug where cookies were saved despite qutebrowser being started in private browsing mode.

  • The local socket used for inter-process communication (opening new instances) is now ensured to only be accessible by the user on all operating systems.

  • Various corner cases for inter-process communication issues got fixed.

  • link_pyqt.py now should work better on untested distributions.

  • Fixed various corner-cases with crashes when reading invalid config values and the history file.

  • Fixed various corner-cases when setting text via an external editor.

  • Fixed potential crash when hinting a text field.

  • Fixed entering of insert mode when certain disabled text fields were clicked.

  • Fixed a crash when using :set with -p and ! (invert value)

  • Downloads with unknown size are now handled correctly.

  • :navigate increment/decrement (<Ctrl-A>/<Ctrl-X>) now handles some corner-cases better.

  • Fixed a bug where the completion got affected by another window’s completion if it was open in both windows.

  • Fixed a performance issue with large histories when opening previously unvisited websites.

  • The progress bar now doesn’t cause the statusbar to change it’s height anymore.

  • ~ is now always expanded when spawning a script.

  • Fixed various corner cases when opening links in an existing instance.

  • Fixed a race-condition causing an exception when starting qutebrowser.


  • The tabs -> indicator-space setting got removed as the new padding settings should be used instead.

  • The tabs -> hide-always and tabs -> hide-auto settings got merged into the new tabs -> show setting.



  • New commands :message-info, :message-error and :message-warning to show messages in the statusbar, e.g. from a userscript.

  • New command :scroll-px which replaces :scroll for pixel-exact scrolling.

  • New command :jseval to run a javascript snippet on the current page.

  • New (hidden) command :follow-selected (bound to Enter/Ctrl-Enter by default) to follow the link which is currently selected (e.g. after searching via /).

  • New (hidden) command :clear-keychain to clear a partially entered keychain (bound to <Escape> by default, in addition to clearing search).

  • New setting ui -> smooth-scrolling.

  • New setting content -> webgl to enable/disable WebGL.

  • New setting content -> css-regions to enable/disable support for CSS Regions.

  • New setting content -> hyperlink-auditing to enable/disable support for hyperlink auditing.

  • New setting tabs -> mousewheel-tab-switching to control mousewheel behavior on the tab bar.

  • New arguments --datadir and --cachedir to set the data/cache location.

  • New arguments --basedir and --temp-basedir (intended for debugging) to set a different base directory for all data, which allows multiple invocations.

  • New argument --no-err-windows to suppress all error windows.

  • New arguments --top-navigate and --bottom-navigate (-t/-b) for :scroll-page to specify a navigation action (e.g. automatically go to the next page when arriving at the bottom).

  • New flag -d/--detach for :spawn to detach the spawned process so it’s not closed when qutebrowser is.

  • New flag -v/--verbose for :spawn to print informations when the process started/exited successfully.

  • Many new color settings (foreground setting for every background setting).

  • New setting ui -> modal-js-dialog to use the standard modal dialogs for javascript questions instead of using the statusbar.

  • New setting colors -> webpage.bg to set the background color to use for websites which don’t set one.

  • New setting completion -> auto-open to only open the completion when tab is pressed (if set to false).

  • New visual/caret mode (bound to v) to select text by keyboard.

  • There are now some example userscripts in misc/userscripts.

  • Support for Qt 5.5 and tox 2.0


  • Breaking change for userscripts: QUTE_HTML and QUTE_TEXT for userscripts now don’t store the contents directly, and instead contain a filename.

  • The content -> geolocation and notifications settings now support a true value to always allow those. However, this is not recommended.

  • New bindings <Ctrl-R> (rapid), <Ctrl-F> (foreground) and <Ctrl-B> (background) to switch hint modes while hinting.

  • <Ctrl-M> and numpad-enter are now bound by default for bindings where <Return> was bound.

  • :hint tab and F now respect the background-tabs setting. To enforce a foreground tab (what F did before), use :hint tab-fg or ;f.

  • :scroll now takes a direction argument (up/down/left/right/top/bottom/page-up/page-down) instead of two pixel arguments (dx/dy). The old form still works but is deprecated.

  • The ui -> user-stylesheet setting now also takes file paths relative to the config directory.

  • The content -> cookies-accept setting now has new no-3rdparty (default) and no-unknown-3rdparty values to block third-party cookies. The default value got renamed to all.

  • Improved startup time by reading the webpage history while qutebrowser is open.

  • The way :spawn splits its commandline has been changed slightly to allow commands with flags.

  • The default for the new-instance-open-target setting has been changed to tab.

  • Sessions now store zoom/scroll-position separately for each entry.


  • :scroll with two pixel-arguments is now deprecated - :scroll-px should be used instead.


  • The --no-crash-dialog argument which was intended for debugging only was removed as it’s replaced by --no-err-windows which suppresses all error windows.

  • Support for Qt installations without SSL support was dropped.


  • Scrolling should now work more reliably on some pages where arrow keys worked but hjkl didn’t.

  • Small improvements when checking if an input is a URL or not.

  • Fixed wrong cursor position when completing the first item in the completion.

  • Fixed a bug where the same title was shown for all tabs on some systems.

  • Don’t install the scripts package when installing qutebrowser.

  • Fixed searching for terms starting with a hyphen (e.g. /-foo)

  • Proxy authentication credentials are now remembered between different tabs.

  • Fixed updating of the tab title on pages without title.

  • Fixed AssertionError when closing many windows quickly.

  • Various fixes for deprecated key bindings and auto-migrations.

  • Workaround for qutebrowser not starting when there are NUL-bytes in the history (because of a currently unknown bug).

  • Fixed handling of keybindings containing Ctrl/Meta on macOS.

  • Fixed crash when downloading a URL without filename (e.g. magnet links) via "Save as…".

  • Fixed exception when starting qutebrowser with :set as argument.

  • Fixed horrible completion performance when the shrink option was set.

  • Sessions now store zoom/scroll-position correctly.



  • Added missing manpage (doc/qutebrowser.1.asciidoc) to archive.



  • Session support

    • new command :session-load to load a session.

    • new command :session-save to save a session.

    • new command :session-delete to delete a session.

    • new setting general -> save-session to always save the session on quit.

    • new setting general -> session-default-name to configure the session name to use if none is given.

    • new argument -r/--restore to specify a session to load.

    • new argument -R/--override-restore to not load a session even if one was saved.

  • New commands to manage downloads:

    • :download to download a URL or the current page.

    • :download-cancel to cancel a download.

    • :download-delete to delete a download from disk.

    • :download-open to open a finished download.

    • :download-remove to remove a download from the list. :download-remove --all or the new cd keybinding can be used to clear all finished downloads.

  • History completion

    • New option completion -> timestamp-format to set the format used to display the history timestamps.

    • New option completion -> web-history-max-items to configure how many history items to show in the completion.

    • The option completion -> history-length for the command history got renamed to cmd-history-max-items.

  • Better save logic for the config/state:

    • Only save files if modified (e.g. don’t overwrite the config if it was edited outside of qutebrowser and nothing was changed in qutebrowser).

    • Save things (cookies, config, quickmarks, …) periodically all 15 seconds (time can be changed with the general -> auto-save-interval option).

  • Opera-like mouse rocker gestures

    • New option input -> rocker-gestures. When turned on, the history can be navigated back/forward by holding a mouse button and pressing the other one.

  • New -f option for :reload to reload and bypass the cache.


  • New --userscript option to :spawn (which deprecates :run-userscript).

  • Ability to toggle a value to :set by appending a ! to the value.

  • New options to hide the tab-/statusbar:

    • tabs -> hide-always for the tabbar

    • ui -> hide-statusbar for the statusbar

  • New options to configure how the tab/window titles should look:

    • tabs -> title-format for the tabbar

    • ui -> window-title-format for the window title

  • HTML5 Geolocation/Notification support:

    • New option content -> geolocation to permanently turn the geolocation off.

    • New option content -> notifications to permanently turn notifications off.

  • New options to disable javascript prompts/alerts:

    • content -> ignore-javascript-prompt to turn off prompts.

    • content -> ignore-javascript-alerts to turn off alerts.

  • Two new options to customize the behavior of hints:

    • hints -> min-chars to set minimum number of chars in hints.

    • hints -> scatter which when turned off distributes the hints sequentially (like dwb) instead of scattering their positions (like Vimium).

  • Make it possible to use :open -[twb] without url.

    • New option general -> default-page to set the page to be opened when doing that.

  • New input -> partial-timeout option to clear partial keystrings.

  • New option completion -> download-path-suggestion to configure what to show in the completion for downloads.

  • Queue messages shown in unfocused windows and show them when the window is focused.

    • New option ui -> message-unfocused to disable this behavior.

  • New --relaxed-config argument which ignores unknown options.

  • New :tab-detach command to open the current tab in a new window.

  • Zooming via Ctrl-Mousewheel.

    • New option input -> mouse-zoom-divider to control how much the page is zoomed when rotating the wheel.

  • New option (content -> host-blocking-enabled) to enable/disable host blocking.

  • New values tab-bg/tab-bg-silent for new-instance-open-target to open a background tab.

  • New ui -> downloads-position setting to move the downloads to the bottom.

  • New ui -> hide-mouse-cursor option to hide the mouse cursor inside qutebrowser.

  • New argument -s for qutebrowser to set a temporary config option.

  • New argument -p for the :set command to print the new value.

  • New --rapid option to :hint. The rapid/rapid-win targets are now deprecated, and --rapid can be used as well with the targets run/hover/userscript/spawn as well.

  • New -f argument to :bind to overwrite the old binding.

  • New --qt-name argument to qutebrowser which is passed to Qt to set WM_CLASS.

  • Alternating row colors in completion. This adds a new colors -> completion.alternate-bg option.


  • Ignore quotes with maxsplit-commands (:open, :quickmark-load, etc.) and don’t quote arguments for those commands in the completions. This also means some commands needed adjustments:

    • Clear search when :search without arguments is given. (:search "" will now search for the literal text "")

    • Add -s/--space argument to :set-cmd-text (as :set-cmd-text "foo " will now set the literal text "foo ")

  • Ignore ;; for splitting with some commands like :bind.

  • Add unbound (new) default keybindings to config. This also adds a new <unbound> special command.

    • To unbind a command keybinding without binding it to a new key, you now have to bind it to <unbound> or it’ll be readded automatically.

  • If an SSL error is raised multiple times with the same error/certificate/host/scheme/port, the user is only asked once.

  • Jump to last instead of first item when pressing Shift-Tab the first time in the completion.

  • Add a fullscreen keybinding.

  • Add a :search command in addition to /foo so it’s more visible and can be used from scripts.

  • Various improvements to documentation, logging, and the crash reporter.

  • Expand ~ to the users home directory with :run-userscript.

  • Improve the userscript runner on Linux/macOS by using QSocketNotifier.

  • Add luakit-like gt/gT keybindings to cycle through tabs.

  • Show default value for config values in the completion.

  • Clone tab icon, tab text and zoom level when cloning tabs.

  • Don’t open relative file paths with :open, only with commandline arguments.

  • Expand environment variables in config settings which take a file path.

  • Add a list of common user agents to the user agent setting completion.

  • Move cursor to end of textboxes when hinting.

  • Don’t start searches on invalid URLs for quickmarks/startpage.

  • Various performance improvements for the completion.

  • Always open URLs given as argument in the foreground.

  • Improve various error messages.

  • Add startpage/default-page values to tabs -> last-close.

  • Various improvements to :restart - it should be more robust now and uses sessions so all state (focused tab, scroll position, etc.) gets remembered.

  • Add tab index display to the statusbar.

  • Keep progress bar height fixed when the statusbar is multiline.

  • Many improvements to tests and related infrastructure:

    • init_venv.py and run_checks.py have been replaced by tox. Install tox and run tox -e mkvenv instead.

    • The tests now use pytest

    • Many new tests added

    • Mac Mini buildbot to run the tests on macOS.

    • Coverage recording via coverage.py.

    • New --pdb-postmortem argument to drop into the pdb debugger on exceptions.

    • Use hunter for line tracing instead of a selfmade solution.


  • The :run-userscript command - use :spawn --userscript instead.

  • The rapid and rapid-win targets for :hint - use the --rapid argument to :hint instead.

  • The :cancel-download command - use :download-cancel instead.

  • The :download-page command - use :download instead.


  • init_venv.py and run_checks.py have been replaced by tox. Install tox and run tox -e mkvenv instead..


  • Fix for cache never being used.

  • Fixed handling of key release events (e.g. for javascript) when holding a key and pressing a second one.

  • Fix handling of commands using ;; at various places (key config, command parser, :bind)

  • Fix splitting of flags with arguments (:bind -m/--mode).

  • Fix bindings of special keys with lower-case modifiers (e.g. <ctrl-x>)

  • Fix for weird search highlights when changing tabs while search is active.

  • Fix starting with -c "".

  • Fix removing of partial downloads when a download is cancelled via context menu.

  • Fix retrying of downloads which were started in a now closed tab.

  • Highlight text case-insensitively in completion.

  • Scroll completion to top when showing it.

  • Handle unencodable file paths in config types correctly.

  • Fix for crash when executing a delayed command (because of a shadowed keybinding) and then unfocusing the window.

  • Fix for crash when hinting on a page which doesn’t have a URL yet.

  • Fix exception when using :set-cmd-text with an empty argument.

  • Add a timeout to pastebin HTTP replies.

  • Various other fixes for small/rare bugs.



  • The Windows builds come with Qt 5.4.1 which has some related bugfixes.

  • Improvements to CPU usage when idle.

  • Ensure there’s no size for font-family settings.

  • Handle URLs with double-colon as search strings.

  • Adjust prompt size hint based on content.

  • Refactor websettings and save/restore defaults.

  • Various small improvements to logging.

  • Various improvements for hinting.

  • Improve parsing of faulthandler logs.


  • Remove default search engines.

  • Remove debug console completing completely.


  • Ignore RuntimeError in mouserelease_insertmode.

  • Hide Qt warning when aborting download reply.

  • Hide "Error while shutting down tabs" message.

  • Clear open target in acceptNavigationRequest.

  • Fix handling of signals with deleted tabs.

  • Restore sys.std* in utils.fake_io on exceptions.

  • Allow font names with integers in them.

  • Fix QIODevice warnings when closing tabs.

  • Set the QSettings path to a config-subdirectory.

  • Add workaround for adblock-message without window.

  • Fix searching for terms starting with a slash.

  • Ignore tab key presses if they’d switch focus.


  • Stop the icon database from being created when private-browsing is set to true.

  • Disable insecure SSL ciphers.



  • Various small logging improvements.

  • Don’t open relative files in fuzzy_url with :open

  • Various crashdialog improvements.

  • Hide adblocked iframes.


  • Handle shutdown of page with prompt correctly.

  • fuzzy_url: handle invalid URLs with autosearch off

  • Handle explicit searches with auto-search=false.

  • Abort download override question on error/cancel.

  • Set a higher z-index for hint labels.

  • Close contextmenu when closing tab to avoid crash.

  • Fix statusbar quickly popping up as window.

  • Clean up NetworkManager after downloads finished.

  • Fix restoring of cmd widget after an error.

  • Fix retrying of downloads after the tab is closed.

  • Fix check_libraries() output for Arch Linux.

  • Handle all IPCErrors properly.

  • Handle another webelem.IsNullError with hints.

  • Handle UnicodeDecodeError when reading configs.


  • Fix for HTTP passwords accidentally being written to debug log.



  • Uncheck sending of debug log by default when private browsing is on.

  • Add SSL info to version info.


  • Remove hosts-file.net from blocker default lists.


  • Fix rare exception when a key is pressed shortly after opening a window

  • Fix exception with certain invalid URLs like http:foo:0

  • Work around Qt bug which renders checkboxes on macOS unusable

  • Fix exception when a local files can’t be read in :adblock-update

  • Hide 2 more Qt warnings.

  • Add !important to hint CSS so websites don’t override the hint look

  • Make init_venv.py work with multiple sip .so files.

  • Fix splitting with certain commands with an empty argument

  • Fix uppercase hints.

  • Fix segfaults if another page is loaded while a prompt is open

  • Fix exception with invalid ShellCommand config values.

  • Replace unencodable chars

  • Fix user-stylesheet setting with an empty value.



  • Set window icon and add a qutebrowser.ico file for Windows.

  • Ask the user when downloading to an already existing file.

  • Add a network -> proxy-dns-requests option.

  • Add "Remove finished" to the download context menu

  • Open and remove clicked downloads.


  • Windows releases are now built with Qt 5.4 which brings many improvements and bugfixes.

  • Add a troubleshooting section to the FAQ.

  • Display IPC errors to the user.

  • Rewrite keymode handling to use only one mode which also fixes various bugs.

  • Save version to state config.

  • Set zoom to default instead of 100% with :zoom/=.

  • Adjust page zoom if default zoom changed.

  • Force tabs to be focused on :undo.

  • Replace manual installation instructions on macOS with homebrew/macports.

  • Allow min-/maximizing of print preview on Windows.

  • Various documentation improvements.

  • Various other small improvements and cleanups.


  • Clean up and temporarily disable alias completion.


  • Fix setting of QWebSettings (e.g. web fonts) with empty strings.

  • Re-focus web view when leaving prompt/yesno mode.

  • Handle :restart correctly with Python eggs.

  • Handle an invalid cwd properly.

  • Fix popping of a dead question in prompter.

  • Fix AttributeError on config changes on Ubuntu.

  • Don’t treat things like "31c3" as IP address.

  • Handle category being None in Qt message handler.

  • Force-include pygments in freeze.py.

  • Fix scroll percentage not updating on some pages like twitter.

  • Encode Content-Disposition header name properly.

  • Fix item sorting in NeighborList.

  • Handle data being None in download read timer.

  • Stop download read timer when reply has finished.

  • Fix handling of small/big fuzzyval's in NeighborList.

  • Fix crashes when entering invalid values in qute:settings.

  • Abort questions in NetworkManager when destroyed.

  • Fix height calculation of download view.

  • Always auto-remove adblock downloads when done.

  • Ensure the docs get included in freeze.py.

  • Fix crash with :zoom.


Initial release.