Movatterモバイル変換


[0]ホーム

URL:


Change Log | qutebrowser

qutebrowser
qutebrowser A keyboard-driven browser.
HomeHelpFAQInstallChangelogContributingGitHubReleasesBlog❤ Donate

qutebrowser's primary maintainer, The-Compiler, is currently workingpart-time on qutebrowser, funded by donations.

To sustain this for a longtime, your help is needed! See theGitHub Sponsors page oralternativedonation methods for more information. Depending on your sign-up date andhow long you keep a certain level, you can get qutebrowser t-shirts, stickersand more!

Change Log

All notable changes to this project will be documented in this file.This project adheres toSemantic Versioning, though minorbreaking changes (such as renamed commands) can happen in minor releases.

v3.7.0 (unreleased)

Added

  • New:quickmark-reload and:bookmark-reload commands to reload quick-/bookmarks from disk (#8845).

v3.6.4 (unreleased)

Fixed

  • datalist dropdowns not opening correctly on Wayland/Sway (#8831). This was caused by an old workaround for a different QtWebEngine issue, which is now disabled for QtWebEngine 6.6.3 and newer.

  • The workaround avoiding crashes with Qt 6.10.1 andqt.workarounds.disable_hangouts_extension (or--version) has now been extended to Qt 6.11 as well (#8785, #8841).

  • ANSI color codes now don’t end up incommands.asciidoc anymore when regenerating it using Python 3.14.

  • TheGenericName in the.desktop file is now correct for Ukraiian and Chinese (#8836).

v3.6.3 (2025-11-30)

Fixed

  • Newqt.workarounds.disable_accessibility setting, which disables Chromium accessibility support. By default, is it set toauto, which only disables accessibility on Qt versions with known issues. This works around a bug in Qt 6.10.1 causing frequent segfaults (#8797).

v3.6.2 (2025-11-27)

Changed

  • Windows and macOS releases now ship with Qt 6.10.1, which include security patches up to Chromium 142.0.7444.162.

Fixed

  • The version info now includes the Wayland compositor name if wayland-client is available under a different name thanlibwayland-client.so (#8771).

  • The list of Chromium extensions in--version /:version now uses the correct Chromium data profile, also fixing a crash with Qt 6.10.1 (#8785).

  • With Qt 6.10.1,qt.workarounds.disable_hangouts_extension now doesn’t apply on private profiles, avoiding a Qt bug leading to a crash (#8785).

v3.6.1 (2025-11-03)

Fixed

  • A regression in v3.6.0 where the page didn’t have keyboard focus after closing the completion, so e.g. typing in an input field after hinting didn’t work. (#8750)

v3.6.0 (2025-10-24)

Added

  • The:version info now shows additional information:

    • The X11 window manager / Wayland compositor name (mostly useful for bug/crash reports).

    • Loaded WebExtensions (partial support landed in QtWebEngine 6.10, no official qutebrowser support yet).

  • Support for hinting elements which are part of an (open) shadow DOM.

Changed

  • Thequtedmenu userscript now sorts history by the last access time.

  • Hardware accelerated 2D canvas is now enabled by default on Qt 6.8.2+, as graphic glitches with e.g. PDF.js and Google Sheets should be fixed nowadays. If you still run into issues, please report them and setqt.workarounds.disable_accelerated_2d_canvas toalways to disable it again.

  • Changes to binary releases:

    • Windows and macOS releases are now built with Qt 6.10.0, which is based on Chromium 134.0.6998.208 with security patches up to 140.0.7339.207.

    • Windows and macOS releases are now built with Python 3.14.

    • Windows releases are now built on Windows Server 2022 (previously 2019), which might break compatibility with older Windows releases (untested).

    • If usingmkvenv.py on Linux, note that Qt now requires glibc v2.34 (v2.28 previously). This is available down to Ubuntu 22.04 LTS and Debian Bookworm (oldstable), so this should not affect most users of desktop distributions.

Fixed

  • Fixed crash if two new downloads start while a download prompt is already open (#8674).

  • Fixed exception when closing a qutebrowser window while a download prompt is still open.

  • Hopefully proper fix for some web pages jumping to the top when the statusbar is hidden (#8223).

  • Fix for the page header being shown on YouTube after the fullscreen notification was hidden (#8625).

  • Fix for videos losing keyboard focus when the fullscreen notification shows (#8174).

  • The workaround for microphone/camera permissions not being requested with QtWebEngine 6.9 on Google Meet, Zoom, or other pages using the new<permission> element now got extended to Qt 6.9.1+ as it’s still not fixed upstream. (#8612)

  • The package version for Jinja 3.3+ is now correctly displayed in:version.

  • Fixed crash with Qt 6.10 (and possibly older Qt versions) when navigating from aqute:// page to a web page, e.g. when searching onqute://start.

  • On Wayland with Qt ⇐ 6.9,EGL_PLATFORM=wayland is now set by qutebrowser to get hardware rendering. Qt 6.10 includes an equivalent fix (#8637).

  • Added workaround for per-domain User-Agent header not being used on redirects (#8679).

  • Added site-specific quirk for gitlab.gnome.org agressively blocking old Chromium versions (and thus QtWebEngine) (#8509).

  • Using:config-list-remove with an invalid value for the respective option type now corrently displays an error instead of crashing.

v3.5.1 (2025-06-05)

Deprecated

  • QtWebKit (legacy) support got removed from CI and is now untested. If it breaks, it’s not going to be fixed, and support will be removed over the next releases.

  • Qt 5 support is currently still tested, but is also planned to get removed over the next releases. Same goes for support for older Qt 6 versions (likely 6.2/6.3/6.4 and perhaps 6.5, see#8464).

Changed

  • Windows/macOS releases now bundle Qt 6.9.1, including many graphics-related bugfixes, as well as security patches up to Chromium 136.0.7103.114.

Fixed

  • A bogus "wildcard call disconnects from destroyed signal" warning from Qt is now suppressed.

  • PDF.js now loads correctly on Windows installations with broken mimetype configurations.

  • A "Ignoring new child …" debug log message which got spammy with Qt 6.9 is now removed.

  • A unknown crash (possibly related to using devtools) due to weird (Py)Qt behavior now has a workaround.

  • No "QtWebEngine version mismatch" warning is now logged anymore with newer Qt 5.15 releases (but you should still stop using Qt 5).

  • The PDF.js version can now correctly be extracted/displayed with newer PDF.js versions.

  • Thequte-bitwarden,-lastpass and-pass userscripts now properly avoid aDeprecationWarning from the upcoming 6.0 release oftldextract. The previous fix in v3.5.1 was insufficient.

v3.5.0 (2025-04-12)

Changed

  • Windows/macOS releases are now built with Qt 6.9.0

    • Based on Chromium 130.0.6723.192

    • Security fixes up to Chromium 133.0.6943.141

    • Also fixes issues with opening links on macOS

  • Thecontent.headers.user_agent setting now has a new{upstream_browser_version_short} template field, which is the upstream/Chromium version but shortened to only major version.

  • The default user agent now uses the shortened Chromium version and doesn’t expose theQtWebEngine/... part anymore, thus making it equal to the corresponding Chromium user agent. This increases compatibilty due to various overzealous "security" products used by a variety of websites that block QtWebEngine, presumably as a bot (known issues existed with Whatsapp Web, UPS, Digitec Galaxus).

  • Changed features in userscripts:

    • qute-bitwarden now passes your password to the subprocess in an environment variable when unlocking your vault, instead of as a command line argument. (#7781)

  • New-D no-system-pdfjs debug flag to ignore system-wide PDF.js installations for testing.

  • Polyfill for missingURL.parse with PDF.js v5 and QtWebEngine < 6.9. Note this is a "best effort" fix and you should be using the "older browsers" ("legacy") build of PDF.js instead.

Removed

  • Theua-slack site-specific quirk, as things seem to work better nowadays without a quirk needed.

  • Theua-whatsapp site-specific quirk, as it’s unneeded with the default UA change described above.

Fixed

  • Crash when trying to use theDocumentPictureInPicture JS API, such as done by the new Google Workspaces Huddle feature. The API is unsupported by QtWebEngine and now correctly disabled on the JS side. (#8449)

  • Crash when a buggy notification presenter returns a duplicate ID (now an error is shown instead).

  • Crashes when running:tab-move or:yank title at startup, before a tab is available.

  • Crash withinput.insert_mode.auto_load, when closing a new tab quickly after opening it, but before it was fully loaded. (#3895, #8400)

  • Workaround for microphone/camera permissions not being requested with QtWebEngine 6.9.0 on Google Meet, Zoom, or other pages using the new<permission> element. (#8539)

  • Resolved issues in userscripts:

    • qute-bitwarden will now prompt a re-login if its cached session has been invalidated since last used. (#8456)

    • qute-bitwarden,-lastpass and-pass now avoid aDeprecationWarning from the upcoming 6.0 release oftldextract

v3.4.0 (2024-12-14)

Removed

  • Support for Python 3.8 is dropped, and Python 3.9 is now required. (#8325)

  • Support for macOS 12 Monterey is now dropped, and binaries will be built on macOS 13 Ventura. (#8327)

  • When using the installer on Windows 10, build 1809 or newer is now required (previous versions required 1607 or newer, but that’s not officialy supported by Qt upstream). (#8336)

Changed

  • Windows/macOS binaries are now built with Qt 6.8.1. (#8242)

  • Based on Chromium 122.0.6261.171

  • With security patches up to 131.0.6778.70

  • Windows/macOS binaries are now using Python 3.13. (#8205)

  • The.desktop file now also declares qutebrowser as a valid viewer forimage/webp. (#8340)

  • Updated mimetype information for getting a suitable extension when downloading adata: URL.

  • Thecontent.javascript.clipboard setting now defaults to "ask", which on Qt 6.8+ will prompt the user to grant clipboard access. On older Qt versions, this is still equivalent to"none" and needs to be set manually. (#8348)

  • If a XHR request made via JS sets a customAccept-Language header, it now correctly has precedence over the globalcontent.headers.accept_language setting (but not per-domain overrides). This fixes subtle JS issues on websites that rely on the custom header being sent for those requests, and e.g. block the requests server-side otherwise. (#8370)

  • Our packaging scripts now prefer the "legacy"/"for older browsers" PDF.js build as their normal release only supports the latest Chromium version and might break in qutebrowser on updates.Note to packagers: If there’s a PDF.js package in your distribution as an (optional) qutebrowser dependency, consider also switching to this variant (same code, built differently).

Fixed

  • Crash with recent Jinja/Markupsafe versions when viewing a finished userscript (or potentially editor) process via:process.

  • scripts/open_url_in_instance.sh now avoidsecho -n, thus running correctly on POSIX sh. (#8409)

  • Added a workaround for a bogus QtWebEngine warning about missing spell checking dictionaries. (#8330)

v3.3.1 (2024-10-12)

Fixed

  • Updated the workaround for Google sign-in issues.

v3.3.0 (2024-10-12)

Added

  • Added theqt.workarounds.disable_hangouts_extension setting, for disabling the Google Hangouts extension built into Chromium/QtWebEngine.

  • Failed end2end tests will now save screenshots of the browser window when run under xvfb (the default on linux). Screenshots will be under$TEMP/pytest-current/pytest-screenshots/ or attached to the GitHub actions run as an artifact. (#7625)

Removed

  • Support for macOS 11 Big Sur is dropped. Binaries are now built on macOS 12 Monterey and are unlikely to still run on older macOS versions.

Changed

  • The qute-pass userscript now has better support for internationalized domain names when using the pass backend - both domain names and secret paths are normalized before comparing (#8133)

  • Ignored URL query parameters (viaurl.yank_ignored_parameters) are now respected when yanking any URL (for example, through hints withhint links yank). The{url:yank} substitution has also been added as a version of{url} that respects ignored URL query parameters. (#7879)

  • Windows and macOS releases now bundle Qt 6.7.3, which includes security fixes up to Chromium 129.0.6668.58.

Fixed

  • A minor memory leak of QItemSelectionModels triggered by closing the completion dialog has been resolved. (#7950)

  • The link to the chromeURL match pattern documentation in our settings docs now loads a live page again. (#8268)

  • A rare crash when on Qt 6, a renderer process terminates with an unknown termination reason.

  • Updated the workaround for Google sign-in issues.

v3.2.1 (2024-06-25)

Added

  • There is now a separate macOS release built for Apple Silicon. A Universal Binary might follow with a later release.

Changed

  • Windows and macOS releases now bundle Qt 6.7.2, which includes security fixes up to Chromium 125.0.6422.142.

Fixed

  • When the selected Qt wrapper is unavailable, qutebrowser now again shows a GUI error message instead of only an exception in the terminal.

v3.2.0 (2024-06-03)

Deprecated

  • This will be the last feature release supporting macOS 11 Big Sur. Starting with qutebrowser v3.3.0, macOS 12 Monterey will be the oldest supported version.

Added

  • When qutebrowser receives a SIGHUP it will now reload any config.py file in use (same as the:config-source command does). (#8108)

  • The Chromium security patch version is now shown in the backend string in--version and:version. This reflects the latest Chromium version that security fixes have been backported to the base QtWebEngine version from. (#7187)

Changed

  • Windows and macOS releases now ship with Qt 6.7.1, which is based on Chromium 118.0.5993.220 with security patches up to 124.0.6367.202.

  • With QtWebEngine 6.7+, thecolors.webpage.darkmode.enabled setting can now be changed at runtime and supports URL patterns (#8182).

  • A few more completions will now match search terms in any order::quickmark-*,:bookmark-*,:tab-take and:tab-select (for the quick and bookmark categories). (#7955)

  • Elements with an ARIArole="switch" now get hints (toggle switches like e.g. on cookie banners).

  • Thetor_identity userscript now validates that the -c|--control-port argument value is an int. (#8162)

Fixed

  • input.insert_mode.auto_load sometimes not triggering due to a race condition. (#8145)

  • Worked around qutebrowser quitting when closing a KDE file dialog due to a Qt bug. (#8143)

  • Trying to use qutebrowser after it’s been deleted/moved on disk (e.g. after a Python upgrade) should now not crash anymore.

  • When the QtWebEngine resources dir couldn’t be found, qutebrowser now doesn’t crash anymore (but QtWebEngine still might).

  • Fixed a rare crash in the completion widget when there was no selection model when we went to clear that, probably when leaving a mode. (#7901)

  • Worked around a minor issue around QTimers on Windows where the IPC server could close the socket early. (#8191)

  • The latest PDF.js release (v4.2.67) is now supported when backed by QtWebEngine 6.6+ (#8170)

v3.1.0 (2023-12-08)

Removed

  • The darkmode settingsgrayscale.all,grayscale.images andincrease_text_contrast got removed, following removals in Chromium.

Added

  • Newsmart-simple value forcolors.webpage.darkmode.policy.images, which on QtWebEngine 6.6+ uses a simpler classification algorithm to decide whether to invert images.

  • Newcontent.javascript.legacy_touch_events setting, with those now being disabled by default, following a Chromium change.

Changed

  • Upgraded the bundled Qt version to 6.6.1, based on Chromium 112. Note this is only relevant for the macOS/Windows releases, on Linux those will be upgraded via your distribution packages.

  • Upgraded the bundled Python version for macOS/Windows to 3.12

  • Thecolors.webpage.darkmode.threshold.text setting got renamed tocolors.webpage.darkmode.threshold.foreground, following a rename in Chromium.

  • With Qt 6.6, thecontent.canvas_reading setting now works without a restart and supports URL patterns.

Fixed

  • Some web pages jumping to the top when the statusbar is hidden or (with v3.0.x) when a prompt is hidden.

  • Compatibility with PDF.js v4

  • Added an elaborate workaround for a bug in QtWebEngine 6.6.0 causing crashes on Google Mail/Meet/Chat, and a bug in QtWebEngine 6.5.0/.1/.2 causing crashes there with dark mode.

  • Made a rare crash in QtWebEngine when starting/retrying a download less likely to happen.

  • Graphical glitches in Google sheets and PDF.js, again. Removed the version restriction for the default application ofqt.workarounds.disable_accelerated_2d_canvas as the issue was still evident on Qt 6.6.0. (#7489)

  • Thecolors.webpage.darkmode.threshold.foreground setting (.text in older versions) now works correctly with Qt 6.4+.

v3.0.2 (2023-10-19)

Fixed

  • Upgraded the bundled Qt version to 6.5.3. Note this is only relevant for the macOS/Windows releases, on Linux those will be upgraded via your distribution packages. This Qt patch release comes withvarious important fixes, among them:

    • Fix for crashes on Google Meet / GMail with dark mode enabled

    • Fix for right-click in devtools not working properly

    • Fix for drag & drop not working on Wayland

    • Fix for some XKB key remappings not working

    • Security fixes up to Chromium 116.0.5845.187, includingCVE-2023-4863, a critical heap buffer overflow in WebP, for which "Google is aware that an exploit […] exists in the wild."

v3.0.1 (2023-10-19)

Fixed

  • The "restore video" functionality of theview_in_mpv script works again on webengine.

  • Settingurl.auto_search todns works correctly now with Qt 6.

  • Counts passed via keypresses now have a digit limit (4300) to avoid exceptions due to cats sleeping on numpads. (#7834)

  • Navigating via hints to a remote URL from a file:// one works again. (#7847)

  • The timers related to the tab audible indicator and the auto follow timeout no longer accumulate connections over time. (#7888)

  • The workaround for crashes when using drag & drop on Wayland with Qt 6.5.2 now also works correctly when usingwayland-egl rather thanwayland as Qt platform.

  • Worked around a weirdTypeError withQProxyStyle /TabBarStyle on certain platforms with Python 3.12.

  • Removed 1px border for the downloads view, mostly noticeable when it’s transparent.

  • Due to a Qt bug, cloning/undoing a tab which was not fully loaded caused qutebrowser to crash. This is now fixed via a workaround.

  • Graphical glitches in Google sheets and PDF.js via a new settingqt.workarounds.disable_accelerated_2d_canvas to disable the accelerated 2D canvas feature which defaults to enabled on affected Qt versions. (#7489)

  • The download dialog should no longer freeze when browsing to directories with many files. (#7925)

  • The app.slack.com User-Agent quirk now targets chromium 112 on Qt versions lower than 6.6.0 (previously it always targets chromium 99) (#7951)

  • Workaround a Qt issue causing jpeg files to not show up in the upload file picker when it was filtering for image filetypes (#7866)

v3.0.0 (2023-08-18)

Major changes

  • qutebrowser now supports Qt 6 and uses it by default. Qt 5.15 is used as a fallback if Qt 6 is unavailable. This behavior can be customized in three ways (in order of precedence):

    • Via--qt-wrapper PyQt5 or--qt-wrapper PyQt6 command-line arguments.

    • Via theQUTE_QT_WRAPPER environment variable, set toPyQt6 orPyQt5.

    • For packagers wanting to provide packages specific to a Qt version, patchqutebrowser/qt/machinery.py and set_WRAPPER_OVERRIDE.

  • Various commands were renamed to better group related commands:

    • set-cmd-textcmd-set-text

    • repeatcmd-repeat

    • repeat-commandcmd-repeat-last

    • latercmd-later

    • edit-commandcmd-edit

    • run-with-countcmd-run-with-count The old names continue to work for the time being, but are deprecated and show a warning.

  • Releases are now automated on CI, and GPG signed byqutebrowser bot <bot@qutebrowser.org>, fingerprint27F3 BB4F C217 EECB 8585 78AE EF7E E4D0 3969 0B7B. The key is available as follows:

  • Support for old Qt versions (< 5.15), old Python versions (< 3.8) and old macOS (< 11)/Windows (< 10) versions were dropped. See the "Removed" section below for details.

Added

  • On invalid commands/settings with a similarly spelled match, qutebrowser now suggests the correct name in its error messages.

  • New:prompt-fileselect-external command which can be used to spawn an external file selector (fileselect.folder.command) from download filename prompts (bound to<Alt+e> by default).

  • Newqute://start built-in start page (not set as the default start page yet).

  • Newcontent.javascript.log_message.levels setting, allowing to surface JS log messages as qutebrowser messages (rather than only logging them). By default, errors in internalqute: pages and userscripts are shown to the user.

  • Newcontent.javascript.log_message.excludes setting, which allows to exclude certain messages from thecontent.javascript.log_message.levels setting described above.

  • Newtabs.title.elide setting to configure where text should be elided (replaced by) in tab titles when space runs out.

  • New--quiet switch for:back and:forward, to suppress the error message about already being at beginning/end of history.

  • Newqute-1pass userscript using the 1password commandline to fill passwords.

  • On macOS when running with Qt < 6.3,pyobjc-core andpyobjc-framework-Cocoa are now required dependencies. They arenot required on other systems or when running with Qt 6.3+, but still listed in therequirements.txt because it’s impossible to tell the two cases apart there.

  • New features in userscripts:

    • qutedmenu gained newwindow andprivate options.

    • qute-keepassxc now supports unlock-on-demand, multiple account selection via rofi, and inserting TOTP-codes (experimental).

    • qute-pass will now try looking up candidate pass entries based on the calling tab’s verbatim netloc (hostname including port and username) if it can’t find a match with an earlier candidate (FQDN, IPv4 etc).

  • Newqt.chromium.experimental_web_platform_features setting, which is enabled on Qt 5 by default, to maximize compatibility with websites despite an aging Chromium backend.

  • Newcolors.webpage.darkmode.increase_text_contrast setting for Qt 6.3+

  • Newfonts.tooltip,colors.tooltip.bg andcolors.tooltip.fg settings.

  • Newlog-qt-events debug flag for-D

  • New--all flags for:bookmark-del and:quickmark-del to delete all quickmarks/bookmarks.

Removed

  • Python 3.8.0 or newer is now required.

  • Support for Python 3.6 and 3.7 is dropped, as they both reached theirend of life in December 2021 and June 2023, respectively.

  • Support for Qt/PyQt before 5.15.0 and QtWebEngine before 5.15.2 are now dropped, as older Qt versions areend-of-life upstream since mid/late 2020 (5.13/5.14) and late 2021 (5.12 LTS).

  • The--enable-webengine-inspector flag is now dropped. It used to be ignored but still accepted, to allow doing a:restart from versions older than v2.0.0. Thus, switching from v1.x.x directly to v3.0.0 via:restart will not be possible.

  • Support for macOS 10.14 and 10.15 is now dropped, raising the minimum required macOS version to macOS 11 Big Sur.

    • Qt 6.4 was the latest version to support macOS 10.14 and 10.15.

    • It should be possible to build a custom .dmg with Qt 6.4, but this is unsupported and not recommended.

  • Support for Windows 8 and for Windows 10 before 1607 is now dropped.

    • Support for older Windows 10 versions might still be present in Qt 6.0/6.1/6.2

    • Support for Windows 8.1 is still present in Qt 5.15

    • It should be possible to build a custom .exe with those versions, but this is unsupported and not recommended.

  • Support for 32-bit Windows is now dropped.

Changed

  • The qutebrowser icons got moved fromicons/ toqutebrowser/icons in the repository, so that it’s possible for qutebrowser to load them using Python’s resource system (rather than compiling them into a Qt resource file). Packagers are advised to usemisc/Makefile if possible, which has been updated with the new paths.

  • Thecontent.javascript.can_access_clipboard setting got renamed tocontent.javascript.clipboard and now understands three different values rather than being a boolean:none (formerlyfalse),access (formerlytrue) andaccess-paste (additionally allows pasting content, needed for websites like Photopea or GitHub Codespaces).

  • The defaulthints.selectors now also match thetreeitem ARIA roles.

  • The:click-element command now can also click elements based on its ID (id), a CSS selector (css), a position (position), or click the currently focused element (focused).

  • The:click-element command now can select the first found element via--select-first.

  • Newsearch.wrap_messages setting, making it possible to disable search wrapping messages.

  • The:session-save command now has a new--no-history flag, to exclude tab history.

  • New widgets forstatusbar.widgets:

    • clock, showing the current time

    • search_match, showing the current match and total count when finding text on a page

  • Messages shown by qutebrowser now don’t automatically get interpreted as rich text anymore. Thus, e.g.:message-info <h1>test now shows the given text. To show rich text with:message-* commands, use their new--rich flag. Note this is NOT a security issue, as only a small subset of HTML is interpreted as rich text by Qt, independently from the website.

  • Improved output when loading Greasemonkey scripts.

  • The macOS.app now is registered as a handler for.mhtml files, such as the ones produced by:download --mhtml.

  • The "… called unimplemented GM_…" messages are now logged as info JS messages instead of errors.

  • For QtNetwork downloads (e.g.:adblock-update), various changes were done for how redirects work:

  • Insecure redirects (HTTPS → HTTP) now fail the download.

  • 20 redirects are now allowed before the download fails rather than only 10.

  • A redirect to the same URL will now fail the download with too many redirects instead of being ignored.

  • When a download fails in a way it’d leave an empty file around, the empty file is now deleted.

  • With Qt 6, settingcontent.headers.referer toalways will act as if it was set tosame-domain. The documentation is now updated to point that out.

  • With QtWebEngine 5.15.5+, the load finished workaround was dropped, which should make certain operations happen when the page has started loading rather when it fully finished.

  • mkvenv.py has a new--pyqt-snapshot flag, allowing to install certain packages from theRiverbank development snapshots server.

  • WhenQUTE_QTWEBENGINE_VERSION_OVERRIDE is set, it now always wins, no matter how the version would otherwise have been determined. Note setting this value can break things (if set to a wrong value), and usually isn’t needed.

  • When qutebrowser is run with an older QtWebEngine version as on the previous launch, it now prints an error before starting (which causes the underlying Chromium to remove all browsing data such as cookies).

  • The keys "<To Do List>" and "<Contrast adjust>" are now named "<To-do list>" and "<Adjust contrast>", respectively.

  • Thetox.ini now requires at least tox 3.20 (was tox 3.15 previously).

  • :config-diff now has an--include-hidden flag, which also shows internally-set settings.

  • Improved error messages when:spawn can’t find an executable.

  • When a process fails, the error message now suggests using:process PID with the correct PID (rather than always showing the latest process, which might not be the failing one)

  • When a process got killed withSIGTERM, no error message is now displayed anymore (unless started with:spawn --verbose).

  • When a process got killed by a signal, the signal name is now displayed in the message.

  • Thejs-string-replaceall quirk is now removed from the defaultcontent.site_specific_quirks.skip, so thatString.replaceAll is now polyfilled on QtWebEngine < 5.15.3, hopefully improving website compaitibility.

  • Hints are now displayed for elements setting anaria-haspopup attribute.

  • qutebrowser now uses SPDX license identifiers in its files. Full support for theREUSE specification (license provided in a machine-readable way for every single file) is not done yet, but planned for a future release.

Fixed

  • When the devtools are clicked butinput.insert_mode.auto_enter is set tofalse, insert mode now isn’t entered anymore.

  • The search wrapping messages are now correctly displayed in (hopefully) all cases with QtWebEngine.

  • When a message with the same text as a currently already displayed one gets shown, qutebrowser used to only show one message. This is now only done when the two messages are completely equivalent (text, level, etc.) instead of doing so when only the text matches.

  • Theprogress andbackforward statusbar widgets now stay removed if you choose to remove them. Previously they would appear again on navigation.

  • Rare crash when running userscripts with crashed renderer processes.

  • Multiple rare crashes when quitting qutebrowser.

  • Theasciidoc2html.py script now correctly uses the virtualenv-installed asciidoc rather than requiring a system-wide installation.

  • "Package would be ignored" deprecation warnings when runningsetup.py.

  • ResourceWarning when using:restart.

  • Crash when shutting down before fully initialized.

  • Crash with some notification servers when the server is quitting.

  • Crash when using QtWebKit with PAC and the file has an invalid encoding.

  • Crash with the "tiramisu" notification server.

  • Crash when the "herbe" notification presenter doesn’t start correctly.

  • Crash when no notification server is installed/available.

  • Warning with recent versions of the "deadd" (aka "linux notification center") notification server.

  • Crash when using:print --pdf with a directory where its parent directory did not exist.

  • ThePyQt{5,6}.sip version is now shown correctly in the:version/--version output. Previously that showed the version from the standalonesip module which was only set for PyQt5. (#7805)

  • When aconfig.py calls.redirect() via a request interceptor (which is unsupported) and supplies an invalid redirect target URL, an exception is now raised for the.redirect() call instead of later inside qutebrowser.

  • Crash when loading invalid history items from a session file.

v2.5.4 (2023-03-13)

Fixed

  • Support SQLite with DQS (double quoted string) compile time option turned off.

v2.5.3 (2023-02-17)

Added

  • Newarray_at quirk, polyfilling theArray.at method, which is needed by various websites, but only natively available with Qt 6.2.

Fixed

  • Crash when the adblock filter file can’t be read.

  • Inconsistent behavior when using:config-{dict,list}-* commands with an invalid value. Before the fix, using the same command again would complain that the value was already present, despite the error and the value not being actually changed.

  • Incomplete error handling when mutating a dict/list inconfig.py and setting an invalid value. Before the fix, this would result in either a message in the terminal rather than GUI (startup), or in a crash (:config-source).

  • Wrong type handling when using:config-{dict,list}-* commands with a config option with non-string values. The only affected option isbindings.commands, which is probably rarely used with those commands.

  • Thereadability userscript now correctly passes the source URL to Breadability, to make relative links work.

  • Updatedictcli.py to use themain branch, fixing a 404 error.

  • Crash with some notification servers when the server did quit.

  • Minor documentation fixes

v2.5.2 (2022-06-22)

Fixed

  • Packaging-related fixes:

    • Theinstall andstacktrace help pages are now included in the docs shipped with qutebrowser when using the recommended packaging workflow.

    • The Windows installer now more consistently uses the configured Windows colors.

    • The Windows installer now bases the desktop/start menu icon choices on the existing install, if upgrading.

    • The macOS release hopefully doesn’t cause macOS to (falsely) claim that it "is damaged and can’t be opened" anymore.

  • The notification fixes in v2.5.1 caused new notification crashes (probably more common than the ones being fixed…). Those are now fixed, along with a (rather involved) test case to prevent similar issues in the future.

  • When a text was not found on a page, the associated message would be shown as rich text (e.g. after/<h1>). With this release, this is fixed for search messages, while the 3.0.0 release will change the default for all messages to be plain-text. Note this is NOT a security issue, as only a small subset of HTML is interpreted as rich text by Qt, independently from the website.

  • When a Greasemonkey script couldn’t be loaded (e.g. due to an unreadable file), qutebrowser would crash. It now shows an error instead.

  • Ever since the v1.2.0 release in 2018, thecontent.default_encoding setting was not applied on start properly (only when it was changed afterwards). This is now fixed.

v2.5.1 (2022-05-26)

Fixed

  • Thequte-pass userscript is marked as executable again.

  • PDF.js now works properly again with the macOS and Windows releases.

  • The MathML workaround for darkmode (e.g. black on black Wikipedia formula) now also works for display (rather than inline) math.

  • Thecontent.proxy setting can now correctly be set to arbitrary values via thequte://settings page again.

  • Fixed issues with Chromium version detection on Archlinux with qt5-webengine 5.15.9-3.

  • Fixed a rare possible crash with invalidContent-Disposition headers.

  • Fixes for various notification-related crashes:

    • With thetiramisu notification server (due to invalid behavior of the server, now a non-fatal error)

    • With thebudgie notification server when closing a notification (due to invalid behavior of the server, now worked around)

    • When a server exits with an unsuccessful exit status (now a non-fatal error)

    • When a server couldn’t be started successfully (now a non-fatal error)

    • With theherbe notification presenter, when the website tries to close the notification after the user accepting (right-clicking) it.

  • Fixes in userscripts:

    • Thequte-bitwarden userscript now correctly searches for entries for sites on a subdomain of an unrecognized TLD. subdomain names. Previouslymy.site.local would have searched in bitwarden formy.sitelocal, losing the rightmost dot.

v2.5.0 (2022-04-01)

Deprecated

  • v2.5.x will be the last release of qutebrowser 2.For the upcoming 3.0.0 release, it’s planned to drop support for various legacy platforms and libraries which are unsupported upstream, such as:

    • Qt before 5.15 LTS (plus adding support for Qt 6.2+)

    • Python 3.6

    • The QtWebKit backend

    • macOS 10.14 (via Homebrew)

    • 32-bit Windows (via Qt)

    • Windows 8 (via Qt)

    • Windows 10 before 1809 (via Qt)

    • Possibly other more minor dependency changes

  • The:rl-unix-word-rubout command (<Ctrl-W> in command/prompt modes) has been deprecated. Use:rl-rubout " " instead.

  • The:rl-unix-filename-rubout command has been deprecated. Use either:rl-rubout "/ " (classic readline behavior) or:rl-filename-rubout (using OS path separator and ignoring spaces) instead.

Changed

  • Improved message if a spawned process wasn’t found and a Flatpak container is in use.

  • The:tab-move command now takesstart andend asindex to move a tab to the first/last position.

  • Tests now automatically pick the backend (QtWebKit/QtWebEngine) based on what’s available. TheQUTE_BDD_WEBENGINE environment variable and--qute-bdd-webengine argument got replaced byQUTE_TESTS_BACKEND and--qute-backend respectively, which can be set to eitherwebengine orwebkit.

  • Using:tab-give or:tab-take on the last tab in a window now always closes that window, no matter whattabs.last_close is set to.

  • Redesignedqute://settings (:set) page with buttons for options with fixed values.

  • The defaulthint.selectors now match more ARIA roles (tab,checkbox,menuitem,menuitemcheckbox andmenuitemradio).

  • Using e.g.:bind --mode=passthrough now scrolls to the passthrough section on thequte://bindings page.

  • Clicking on a notification now tries to focus the tab where the notification is coming from. Note this might not work properly if there is more than one tab from the same host open.

  • Improvements to userscripts:

    • qute-bitwarden understands a new--password-prompt-invocation, which can be used to specify a tool other thanrofi to ask for a password.

    • cast now usesyt-dlp if available (falling back toyoutube-dl if not). It also lets users override the tool to use via aQUTE_CAST_YTDL_PROGRAM environment variable.

    • qute-pass now understands a new--prefix argument if used in gopass mode, which gets passed as subfolder prefix togopass.

    • open_download now supports Flatpak by using its XDG Desktop Portal.

    • open_download now waits for the exit status ofxdg-open, causing qutebrowser to report any issues with it.

  • Thecontent.headers.custom setting now accepts empty strings as values, resulting in an empty header being sent.

  • Renamed settings:

    • qt.low_end_device_modeqt.chromium.low_end_device_mode

    • qt.process_modelqt.chromium.process_model

  • System-wide userscripts are now discovered from the correct location when running via Flatpak (/app/share rather than/usr/share).

  • Filename prompts now don’t display a.. entry in the list of files anymore. To get back to the parent directory, either type../ manually, or use the new:rl-filename-rubout command, bound to<Ctrl-Shift-W> by default.

Added

  • Newinput.match_counts option which allows to turn off count matching for more emacs-like bindings.

  • New{relative_index} field fortabs.title.format (and.pinned_format) which shows relative tab numbers.

  • Newinput.mode_override option which allows overriding the current mode based on the new URL when navigating or switching tabs.

  • Newqt.chromium.sandboxing setting which allows to disable Chromium’s sandboxing (mainly intended for development and testing).

  • NewQUTE_TAB_INDEX variable for userscripts, containing the index of the current tab.

  • Neweditor.remove_file setting which can be set toFalse to keep all temporary editor files after closing the external editor.

  • New:rl-rubout command replacing:rl-unix-word-rubout (and optionally:rl-unix-filename-rubout), taking a delimiter as argument.

  • New:rl-filename-rubout command, using the OS path separator and ignoring spaces. The command also gets shown in the suggested commands for a download filename prompt now.

Fixed

  • Whensearch.incremental is disabled, searching using/text followed by a backwards search via?text (or vice-versa) now correctly changes the search direction.

  • Elements getting a hint due to atabindex now are skipped if it’s set to-1, reducing some false-positives.

  • The audible indicator ([A]) now uses a 2s cooldown when the audio goes silent, equivalent with the behavior of older QtWebEngine versions.

  • Withconfirm_quit set todownloads, the confirmation dialog is now only shown when closing the last window (rather than closing any window, which would continue running that window’s downloads). Unfortunately, more issues withconfirm_quit and multiple windows remain.

  • Crash when a previous crash-log file contains non-ASCII characters (which should never happen unless it was edited manually)

  • Due to changes in Debian, an old workaround (for broken QtWebEngine patching on Debian) caused the inferior qutebrowser error page to be displayed, when Chromium’s would have worked fine. The workaround was now dropped.

  • Crash when using<Ctrl-D> (:completion-item-del) in the:tab-focus list, rather than:tab-select.

  • Work around a Qt issue causing:spawn to run executables from the current directory if no system-wide executable was found. The underlying Qt bug is tracked asCVE-2022-25255, though the impact with typical qutebrowser usage is low: Normally, qutebrowser is run from a fixed location (usually the users home directory), and:spawn is not typically used with executables that don’t exist. The main security impact of this bug is in tools like text editors, which are often executed in untrusted directories and might attempt to run auxiliary tools automatically.

  • When:rl-rubout or:rl-filename-rubout (formerly:rl-unix-word-rubout and:rl-unix-filename-rubout) were used on a string not starting with the given delimiter, they failed to delete the first character, which is now fixed.

  • Fixes in userscripts:

    • ripbang now works again (it got blocked due to a missing user agent and used outdated qutebrowser commands before)

    • keepassxc now has a properly working--insecure flag

  • Speculative fix for an immediate crash at start with the macOS/Windows binaries (in certain rare environments).

  • Speculative fix for a qutebrowser crash when the notification daemon crashes while showing the notification.

  • Fix crash when using:screenshot with an invalid--rect argument.

  • Added a site-specific quirk to make cookie dialogs on StackExchange pages (such as Stack Overflow) work on Qt 5.12.

v2.4.0 (2021-10-21)

Security

  • CVE-2021-41146: Fix arbitrary command execution on Windows via URL handler argument injection. See thesecurity advisory for details.

Added

  • Newcontent.blocking.hosts.block_subdomains setting which can be used to disable the subdomain blocking for the hosts-based adblocker introduced in v2.3.0.

  • Newdownloads.prevent_mixed_content setting to prevent insecure mixed-content downloads (true by default).

  • New--private flag for:tab-clone, which clones a tab into a new private window, mirroring the same flags for:open and:tab-give.

Fixed

  • Switching tabs via mouse wheel scrolling now works properly on macOS. Settabs.mousewheel_switching to false if you prefer the previous behavior.

  • Speculative fix for a crash when closing qutebrowser while a systray notification is shown.

Changed

  • Typing in the filename prompt now filters matching directories.

  • When opening a file qutebrowser can’t handle from afile:/// directory listing, qutebrowser now opens it with the default application rather than displaying a download prompt.

  • In Greasemonkey scripts, using "overrideMimeType" with GM_xmlhttpRequest is now supported.

  • :hint --rapid is now supported for thetab hinting target no matter whattabs.background is set to, as there are various scenarios where tabs can open in the background.

  • New flags for thequte-pass userscript:

    • --unfiltered to show all secrets, not just the one matching the current URL.

    • --always-show-selection to confirm the password to be entered even if there’s only a single match.

  • In insert mode,<Shift-Escape> is now bound tofake-key <Escape> by default, i.e., sends an Escape keypress to the website.

  • UsingGM_setClipboard in Greasemonkey scripts is now supported.

v2.3.1 (2021-07-28)

Fixed

  • Updated the workaround for Google Account log in claiming that this browser isn’t secure. For an equivalent workaround on older versions, run::set -u https://accounts.google.com/* content.headers.user_agent "Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0"

  • Corrupt cache file exceptions withadblock 0.5.0+ are now handled properly.

  • Crash when entering unicode surrogates into the filename prompt.

  • UnboundLocalError inqute-keepass when the database couldn’t be opened.

v2.3.0 (2021-06-28)

Added

  • Newcontent.prefers_reduced_motion setting to request websites to reduce non-essential motion/animations.

  • Newcolors.prompts.selected.fg setting to customize the text color for selected items in filename prompts.

Changed

  • The hosts-based adblocker (usingcontent.blocking.hosts.lists) now also blocks all requests to any subdomains of blocked hosts.

  • Thefonts.web.* settings now support URL patterns.

  • The:greasemonkey-reload command now shows a list of loaded scripts and has a new--quiet switch to suppress that message.

  • When launching a userscript via hints, a newQUTE_CURRENT_URL environment variable now points to the current page (rather than the URL of the selected element, whereQUTE_URL points to).

Fixed

  • Crash on macOS 10.14+ when logging into Google accounts — the previous fix was incomplete due wrong information in Apple’s documentation.

  • Crash when two Greasemonkey scripts have the same name (usually happening because the same file is in both the data and the config directory).

  • Deprecation warnings when using thelink_pyqt.py script on Python 3.10 (e.g. viatox ormkvenv.py).

v2.2.3 (2021-06-01)

Fixed

  • Logging into Google accounts or sharing the camera on macOS 10.14+ crashed, which is now fixed.

  • The Windows installer now correctly aborts the installation on Windows 7 (rather than attempting an install which won’t work, since Windows 7 is unsupported since the v2.0.0 release).

  • Using--json-logging without--debug caused qutebrowser to crash since the v1.13.0 release. It now works correctly again.

  • Mixing Qt 5.14+ with QtWebEngine 5.12 caused a crash related to qutebrowser’s notification support, which is now fixed.

  • The documentation now points to the new IRC channels on irc.libera.chat instead of the defunct Freenode channels (due to a hostile takeover by Freenode staff).

  • Settingcontent.headers.user_agent or.accept_language to a value containing non-ascii characters was permitted by qutebrowser, but resulted in a crash when loading a page. Such values are now rejected properly.

  • When quitting qutebrowser on thequte://settings page, a crash could happen, which is now fixed.

  • When:edit-text is used, but the existing text in the input isn’t representable in the configured encoding (editor.encoding), qutebrowser would crash. It now shows a proper error instead.

  • The testsuite should now work properly on aarch64.

  • When QtWebEngine is in a "stuck" state while:selection-follow was used, this could cause a crash in qutebrowser. This is now fixed (speculatively, due to lack of a reproducer).

  • When the brave adblock data (adblock-cache.dat) got corrupted, qutebrowser would crash when trying to load it. It now displays an error instead.

  • Combining/S (silent) and/allusers when uninstalling via the Windows installer now works properly.

v2.2.2 (2021-05-20)

Fixed

  • When awesomewm’s "naughty" notification daemon was used with a development version of AwesomeWM and an unknown version number, qutebrowser would crash when trying to parse the version string. This is now fixed.

  • Due to a bug with QtWebEngine 5.15.4, old Service Worker data could cause renderer process crashes. This is now worked around by qutebrowser.

  • When an (broken) binding toset-cmd-text without any argument existed, using: would crash, which is now fixed.

  • New site-specific quirk (again) working around not being able to type accented/composed characters on Google Docs.

  • When running withpython -OO (which is not recommended), a notification being shown would result in a crash, which is now fixed.

v2.2.1 (2021-04-29)

Changed

  • When an error occurs in a notification presenter, qutebrowser now shows that error in the statusbar instead of just logging it.

  • New site-specific-quirk for Discord logging users out when using vertical tabs (yes, really)

Fixed

  • Certain errors from notification daemons are now displayed as non-fatal errors instead of qutebrowser crashing:

    • With the legacy GNOME Flashback notification daemon (not GNOME Shell), when more than 20 notifications are currently shown.

    • With the KDE Plasma notification daemon, when the same notification is shown twice (with <1s delay).

  • Themkvenv.py script now works whenldconfig -p is failing.

  • Running:spawn -u -o broke in v2.2.0 and now works properly again.

  • Fixes in userscripts:

    • Thequte-bitwarden userscript now still consumes returned data if the Bitwarden CLI showed a warning but exited with a 0 (successful) exit code.

    • Thequte-pass userscript now doesn’t try to match a username with--password-only, and error messages with invalid patterns are improved.

    • Thequte-pass userscript now avoids runningpass twice when--otp-only is used.

v2.2.0 (2021-04-13)

Deprecated

  • Running qutebrowser with Qt 5.12.0 is now unsupported and logs a warning. It should still work - however, a workaround for issues with the Nvidia graphic driver was dropped. Newer Qt 5.12.x versions are still fully supported.

  • The--force argument for:tab-only is deprecated, use--pinned close instead.

  • Using:tab-focus without an argument or count is now deprecated, use:tab-next instead.

Added

  • New dependency on theQtDBus module. If this requirement is an issue for you or your distribution, please open an issue! Note that a DBus connection at runtime is still optional.

  • Newinput.media_keys setting which can be used to disable Chromium’s handling of media keys.

  • New:process command (and associatedqute://process pages) which can be used to view and terminate/kill external processes spawned by qutebrowser.

  • Newcontent.site_specific_quirks.skip setting which can be used to disable individual site-specific quirks.

  • New--pinned argument for:tab-only, which replaces--force (with--pinned close), but also can take--pinned keep to keep pinned tabs without prompting.

  • Newfileselect.folder.command which can be used withfileselect.handler = external to customize the command to use to upload directories (<input type="file" webkitdirectory /> elements, which are non-standard but in wide use).

  • Newcontent.notifications.presenter setting with various new ways to show web notifications:

    • auto (default): Automatically detect the best available option

    • qt: Use Qt’s built-in mechanism (like before this release)

    • libnotify: Use a libnotify-compatible notification server (i.e. native notifications on Linux)

    • systray: Use a systray icon (very similar toqt but without some of its drawbacks)

    • messages: Use qutebrowser messages

    • herbe: Useherbe

  • Newcontent.notifications.show_origin setting, which can be used to decide for which notifications to show the origin (the URL the notification was sent from).

Changed

  • Thecontent.ssl_strict setting got renamed tocontent.tls.certificate_errors, with new values:

    • ask: Prompt on overridable certificate errors (ssl_strict = 'ask')

    • ask-block-thirdparty: See below

    • block: Block the page load (ssl_strict = True)

    • load-insecurely: Load the page despite the error (ssl_strict = False)

  • The newcontent.tls.certificate_errors setting now also understands the valueask-block-thirdparty, which asks for page loads but automatically blocks resource loads on TLS errors. This behavior is consistent with what other browsers do.

  • The prompt text shown on certificate errors has been improved to make it clearer what kind of error occurred exactly.

  • Thecontent.site_specific_quirks setting got renamed tocontent.site_specific_quirks.enabled.

  • Thecontent.notifications option got renamed tocontent.notifications.enabled.

  • The completion now also shows bindings starting withset-cmd-text in its third column, such aso for:open.

  • When:spawn is used with the-m /--output-messages flag, the output now appears live, while the process is running.

  • When a shown message replaces an existing related one (e.g. for zoom levels), the replacing now also works even if a different message was shown in between.

  • The.redirect(...) method on interceptors now supports anignore_unsupported=True argument which suppresses exceptions if a request could not be redirected. Note, however, that it is still not public API.

  • When the--config-py argument is used, no warning about a missingconfig.load_autoconfig is shown anymore, as the argument is typically used for temporarily testing a config.

  • The internal_autosave session used for crash recovery is now only saved once per minute, since saving it for every page load is a noticeable performance issue.

  • Thereadability-js userscript now displays a small header with page information.

  • When an external file selector is used, some additional validation is done on the picked files now, so that errors are shown if e.g. a directory is selected when a file was expected.

  • The default binding forT (:tab-focus) got changed so that it fills the command line with:tab-focus if used without a count (instead of being equivalent to:tab-next in that case).

  • The:config-unset command now understands the--pattern (-u) flag to unset options customized for a given URL pattern (such as after answering a prompt with "always"/"never").

  • The:config-unset command now shows an error when used on an option which is valid, but was never customized.

  • Thestatusbar.widgets setting now understandstext:... entries which allows adding a hard-coded text to the statusbar.

  • The polyfill forString.replaceAll (required for Nextcloud Calendar < 2.2.0 with QtWebEngine < 5.15.3) is now disabled by default, as it’s not fully compliant to the ECMAScript spec and might cause issues on other websites. If you still need it (e.g. if you’re still on an old Nextcloud Calendar version), removejs-string-replaceall fromcontent.site_specific_quirks.skip.

Fixed

  • When an editor exits with a != 0 exit status, the temporary editor file is now persisted. This already was the case when the editor crashed.

  • When a nonexistent file gets passed to--config-py, qutebrowser now complains instead of silently not loading it.

  • With some (rare) setups, opening the report dialog or using a PAC proxy with QtWebKit could result in qutebrowser hanging due to a PyQt bug. There’s now a workaround which prevents the hang.

  • QtWebEngine version detection (influencing things like dark mode settings or certain workarounds) now works correctly on OpenBSD.

  • Certain version number formats in/etc/os-release caused qutebrowser to crash. Those are now handled correctly.

  • The macOS releases now properly support Dark Mode for UI elements by settingNSRequiresAquaSystemAppearance to false.

Removed

  • Thequte://spawn-output page used by:spawn -o is now removed, as it’s replaced by the newqute://process pages.

v2.1.1 (2021-04-01)

Added

  • Site-specific quirk for krunker.io, which shows a "Socket Error" with qutebrowser’s default Accept-Language header. The workaround is equivalent to doing:set -u matchmaker.krunker.io content.headers.accept_language "".

Changed

  • Clicking thex in the devtools window to hide it now also leaves insert mode.

Fixed

  • The workaround for black on (almost) black formula images in dark mode now also works with Qt 5.12 and 5.13.

  • When running in Flatpak or with the Windows/macOS releases, the QtWebEngine version is now detected properly. Before, a wrong version was assumed, breaking dark mode and certain workarounds (resulting in crashes on websites like LinkedIn or TradingView).

  • When the metainfo in the completion database doesn’t have the expected structure, qutebrowser now tries to gracefully recover from the situation instead of crashing.

  • When qutebrowser displays an error during initialization, opening a second instance would lead to a crash. Instead, qutebrowser now ignores the attempt to open a new page as long as it’s not fully initialized yet.

  • When the Brave adblock cache folder was unreadable, qutebrowser crashed. It now displays an error instead.

  • Fixes in thequte-pass userscript forgopass:

    • Generating OTP tokens now works correctly.

    • Storing the username as part of the secret broke in v2.0.0 and now works again.

  • When usingbindings.key_mappings to map a key to multiple other keys, qutebrowser would crash. This is now handled correctly - however, note that it’s usually better to map keys to commands instead.

  • When a minimized window is selected via:tab-select, it’s now un-minimized properly.

  • When a format string in the config (e.g.tabs.title_format) used a value like{current_url.host} (instead of{current_url:host}), qutebrowser would crash. It now correctly reports an invalid config value instead.

  • In rare circumstances, sending URLs/commands to existing instances would result in a crash, which is now fixed.

  • Running the testsuite should now fully work without internet access again.

  • The--asciidoc script formkvenv.py broke with v1.14.0. It now works correctly again.

  • Various other fixes for running in Flatpak (backported in the Flatpak release even before this qutebrowser release).

  • We are the Knights Who Say…:Ni!

v2.1.0 (2021-03-12)

Removed

  • The following command aliases were deprecated in v2.0.0 and are now removed:

    • run-macromacro-run

    • record-macromacro-record

    • buffertab-select

    • open-editoredit-text

    • toggle-selectionselection-toggle

    • drop-selectionselection-drop

    • reverse-selectionselection-reverse

    • follow-selectedselection-follow

    • follow-hinthint-follow

    • enter-modemode-enter

    • leave-modemode-leave

Added

  • New:screenshot command which can be used to screenshot the visible part of the page.

  • New optional dependency on theimportlib_metadata project on Python 3.7 and below. This is only relevant when PyQtWebEngine is installed via pip - thus, this dependency usually isn’t relevant for packagers.

  • Newqute-keepassxc userscript integrating with the KeePassXC browser API.

Changed

  • Initial support for QtWebEngine 5.15.3 and PyQt 5.15.3/.4

  • Thecolors.webpage.prefers_color_scheme_dark setting got renamed tocolors.webpage.preferred_color_scheme and now takes the valuesauto,light anddark (instead of beingTrue for dark andFalse for auto). Note that thelight value is only supported with Qt 5.15.2+, falling back to the same behavior asauto on older versions.

  • On Linux, qutebrowser now tries harder to find details about the installed QtWebEngine version by inspecting the QtWebEngine binary. This should reduce issues with dark mode (and some workarounds) not working when using differing versions of QtWebEngine/PyQtWebEngine/Qt. This change also prepares qutebrowser for QtWebEngine 5.15.3, which will get released without an updated Qt.

  • When PyQtWebEngine >= 5.15.3 is installed viapip (as is e.g. the case withmkvenv.py), qutebrowser now queries the associated metadata to find out the QtWebEngine version.

  • When doing:hint links yank --rapid, the messages shown now replace each other, thus being less noisy.

  • Newlines in JavaScript messages (confirm,prompt andalert) are now preserved.

  • Messages in prompts are now word-wrapped rather than displaying them in one long line.

  • If a command stats with space (e.g.: open ..., it’s now not saved to command history anymore (similar to how some shells work).

  • When a tab is pinned, running:open will now open a new tab instead of displaying an error.

  • Thefileselect.*.command settings now support file selectors writing the selected paths to stdout, which is used if no{} placeholder is contained in the configured command.

  • The--debug-flag argument now understands a newlog-sensitive-keys value which logs all keypresses (including those in insert/passthrough/prompt/… mode) for debugging.

  • Thereadability andreadability-js userscripts now add aqute-readability CSS class to the page, so that it can be styled easily via a user stylesheet.

Fixed

  • With QtWebEngine 5.15.3 and some locales, Chromium can’t start its subprocesses. As a result, qutebrowser only shows a blank page and logs "Network service crashed, restarting service.". This release adds aqt.workarounds.locale setting working around the issue. It is disabled by default since distributions shipping 5.15.3 will probably have a proper patch for it backported very soon.

  • Thecolors.webpage.preferred_color_scheme andcolors.webpage.darkmode.* settings now work correctly with QtWebEngine 5.15.3 (and Gentoo, which at the time of writing packages 5.15.3 disguised as 5.15.2).

  • When dark mode settings were set, existingblink-features arguments inqt.args (or--qt-flag) were overridden. They are now combined properly.

  • On QtWebEngine 5.15.2, auto detection for theprefers-color-scheme media query is broken and always returnsno-preference, which was removed from the CSS WG Specification. This release contains a workaround to always returnlight instead (as per the spec).

  • When an external file selector deletes the temporary file (likennn does when quitting the terminal), qutebrowser would crash. It now displays an error instead. The same applies if the temporary file is unreadable for any other reason.

  • On macOS, a change in v2.0.x caused certain shortcuts to not work with Cmd anymore, using Ctrl instead. They now work correctly using Cmd (like usual on macOS) again.

  • On macOS, usingF (hint all tab) sometimes would open a context menu instead of following a link. This is now fixed.

  • The quirk added for a missingString.replaceAll did not handle special regexp characters correctly, thus breaking some sites. It now handles them properly.

  • The "try again" button on error pages now works correctly with JavaScript disabled.

  • If a GreaseMonkey script doesn’t have a "@run-at" comment, qutebrowser accidentally treated that as "@run-at document-idle". However, other GreaseMonkey implementations default to "@run-at document-end" instead, which is what qutebrowser now does, too.

  • Thehist_importer.py script didn’t work correctly after qutebrowser v2.0.0 and resulted in a history database qutebrowser couldn’t read properly. It now works properly again.

  • With certain QtWebEngine versions (5.15.0 based on Chromium 80 and 5.15.3 based on Chromium 87), Chromium’s dark mode doesn’t invert certain SVG images, even withcolors.wegpage.darkmode.policy.images set tosmart. Most notably, this causes formulae on Wikipedia to display black on (almost) black. Ifcontent.site_specific_quirks is enabled, qutebrowser now injects some CSS as a workaround, which inverts all math formula images on Wikipedia (and potentially other sites, if they use the same CSS class).

  • When a hint label text started with an apostrophe, it would show an escaped text until the hints first character has been pressed. It now shows up correctly.

v2.0.2 (2021-02-04)

Fixed

  • When right-clicking an empty part of the downloads bar, qutebrowser v2.0.x would crash. This is now fixed.

  • Settingcontent.cookies.store tofalse only worked properly when this was done after qutebrowser was already started due to a regression in v2.0.0. It now works as expected again.

  • If qutebrowser was installed as a Python egg with Python 3.8 or 3.9, requesting unavailable resource files (such as PDF.js not being bundled, or a missing changelog file) caused in a crash due to an inconsistent behavior in those versions of Python. This is now handled properly by qutebrowser.

  • In v2.0.0, support for importing thesip dependency assip rather thanPyQt5.sip was dropped, since upstream claims it should be used asPyQt5.sip ever since PyQt 5.11. However, some distributions still package sip as a globalsip package. Thus, support for a globalsip package is now reintroduced.

  • The changelog for v2.0.0 claimed thathints.leave_on_load was set totrue by default. However, theinput.insert_mode.leave_on_load setting was instead set totrue accidentally. This is now fixed by actually settinghints.leave_on_load totrue, and reversing the change toinput.insert_mode.leave_on_load so it is set tofalse by default again.

  • When theimportlib_resources package is required but was missing, users would get a Python stacktrace rather than a proper error message. This is now fixed.

  • Site-specific quirk JavaScript files were loaded lazily rather than preloaded at the start of qutebrowser, causing a crash when e.g. switching between versions while qutebrowser is open. Now they are preloaded at the start of qutebrowser again.

  • The link to the keybinding cheatsheet on the internal:help page wasn’t displayed correctly. This is now fixed.

  • When the completion rebuilding process was interrupted, qutebrowser did not detect this condition on the next start, thus resulting in a completion with inconsistent data. This is now fixed, with another rebuild being forced with this update, to ensure the data is consistent for all users.

  • In certain scenarios, qutebrowser v2.0.x warned aboutconfig.load_autoconfig(...) being missing when loading a secondary config (e.g. viaconfig.source(...)). It now only shows those warnings for the mainconfig.py file.

  • The--enable-webengine-inspector flag is now accepted again, however it’s unused and undocumented. It purely exists to make it possible to use:restart between pre-v2.0.x and v2.0.2+ versions.

  • Whenhints.dictionary pointed to a file not encoded as UTF-8, this resulted in a crash (also in versions before v2.0.0). It now properly displays an error instead.

  • When running qutebrowser with a single empty commandline argument, such as done byopen_url_in_instance.sh, this would result in a partially initialized window. Interacting with that window results in a crash (also in versions before v2.0.0). Instead, the startpage is now shown properly.

v2.0.1 (2021-01-28)

Fixed

  • If qutebrowser was installed as a Python egg (similar to a .zip file, viasetup.py install under certain conditions), a change in v2.0.0 caused it to not start properly. This is now fixed.

  • If qutebrowser was set up (or packaged) in an unclean environment, this could result in a stalequtebrowser/components/adblock.py file being picked up. That file is not part of the release anymore, but if an old version is still around, causes qutebrowser to crash. It’s now explicitly blocked inside qutebrowser so it gets ignored even if it still exists.

  • When the adblocking method was switched using:set, and theadblock dependency was unavailable when qutebrowser started (but was installed while qutebrowser was open), this resulted in a crash. Now a warning prompting for a restart of qutebrowser is shown instead.

Changed

  • Theformat_json userscript now uses sh instead of bash again.

  • Theadd-nextcloud-bookmarks,add-nextcloud-cookbook,readability andripbang userscripts now use apython3 rather than plainpython shebang.

  • WhenQTWEBENGINE_CHROMIUM_FLAGS is set in the environment, this causes flag handling (including workarounds for QtWebEngine crashes) inside qutebrowser to break. This will be handled properly in a future version, but this release now shows a warning on standard output if this is the case.

  • The config completion forfileselect.*.command now also includes the "nnn" terminal file manager.

v2.0.0 (2021-01-28)

Major changes

  • If the Pythonadblock library is available, it is now used to integrate Brave’s Rust adblocker library for improved adblocking based on ABP-like filter lists (such as EasyList). If it is unavailable, qutebrowser falls back to host-blocking, i.e. the same blocking technique it used before this release. As part of this, various settings got renamed, see "Changed" below.Note: If theadblock dependency is available, qutebrowser will ignore custom host blocking via theblocked-hosts config file orfile:/// URLs supplied as host blocking lists. You will need to either migrate those to ABP-like lists, or setcontent.blocking.method toboth.

  • Various dependency upgrades - a quick checklist for packagers (see "Changed" below for details):

    • Ensure you’re providing at least Python 3.6.1.

    • Ensure you’re providing at least Qt 5.12 and PyQt 5.12.

    • Add a new optional dependency on the Pythonadblock library (if packaged - if not, consider packaging it, albeit optional it’s very useful for users).

    • Remove thecssutils optional dependency (if present).

    • Remove theattrs (attr) dependency.

    • Remove thepypeg2 dependency (and perhaps consider dropping the package if not used elsewhere - it’sinactive upstream and the repository was removed by Bitbucket).

    • Move thepygments dependency from required to optional.

    • Move thesetuptools dependency from runtime (forpkg_resources) to build-time.

    • For Python 3.6, 3.7 or 3.8, add a dependency on theimportlib_resources backport.

    • For Python 3.6 only, add a dependency on thedataclasses backport.

  • Dropped support for old OS versions in binary releases:

    • Support for Windows 7 is dropped in the Windows binaries, the minimum required Windows version is now Windows 8.1.

    • Support for macOS 10.13 High Sierra is dropped in the macOS binaries, the minimum required macOS version is now macOS 10.14 Mojave.

  • Various renamed settings and commands, see "Deprecated" and "Changed" below.

Removed

  • The--enable-webengine-inspector flag (which was only needed for Qt 5.10 and below) is now dropped. With Qt 5.11 and newer, the inspector/devtools are enabled unconditionally.

  • Support for moving qutebrowser data from versions before v1.0.0 has been removed.

  • The--old flag for:config-diff has been removed. It used to show customized options for the old pre-v1.0 config files (in order to aid migration to v1.0).

  • The:inspector command which was deprecated in v1.13.0 (in favor of:devtools) is now removed.

Deprecated

  • Several commands have been renamed for consistency and/or easier grouping of related commands. Their old names are still available, but deprecated and will be removed in qutebrowser v2.1.0.

    • run-macromacro-run

    • record-macromacro-record

    • buffertab-select

    • open-editoredit-text

    • toggle-selectionselection-toggle

    • drop-selectionselection-drop

    • reverse-selectionselection-reverse

    • follow-selectedselection-follow

    • follow-hinthint-follow

    • enter-modemode-enter

    • leave-modemode-leave

Added

  • New settings for the ABP-based adblocker:

    • content.blocking.method to decide which blocker(s) should be used.

    • content.blocking.adblock.lists to configure ABP-like lists to use.

  • Newqt.environ setting which makes it easier to set/unset environment variables for qutebrowser.

  • New settings to use an external file picker (such as ranger or vifm):

    • fileselect.handler (default orexternal)

    • fileselect.multiple_files.command

    • fileselect.single_file.command

  • When QtWebEngine has been updated but PyQtWebEngine hasn’t yet, the dark mode settings might stop working. As a (currently undocumented) escape hatch, this version adds aQUTE_DARKMODE_VARIANT=qt_515_2 environment variable which can be set to get the correct behavior in (transitive) situations like this.

  • New--desktop-file-name commandline argument, which can be used to customize the desktop filename passed to Qt (which is used to set theapp_id on Wayland).

  • The:open completion now also completes local file paths andfile:// URLs, via a newfilesystem entry incompletion.open_categories. Also, a newcompletion.favorite_paths setting was added which can be used to add paths to show when:open is used without any input.

  • NewQUTE_VERSION variable for userscripts, which can be used to read qutebrowser’s version.

  • New "Copy URL" entry in the context menu for downloads.

  • New:bookmark-list command which lists all bookmarks/quickmarks. The correspondingqute://bookmarks URL already existed since v0.8.0, but it was never exposed as a command.

  • Newqt.workarounds.remove_service_workers setting which can be used to remove the "Service Workers" directory on every start. Usage of this option is generally discouraged, except in situations where the underlying QtWebEngine bug is a known cause for crashes.

  • Changelogs are now shown after qutebrowser was upgraded. By default, the changelog is only shown after minor upgrades (feature releases) but not patch releases. This can be adjusted (or disabled entirely) via a newchangelog_after_upgrade setting.

  • New userscripts:

    • kodi to play videos in Kodi

    • qr to generate a QR code of the current URL

    • add-nextcloud-bookmarks to create bookmarks in Nextcloud’s Bookmarks app

    • add-nextcloud-cookbook to add recipes to Nextcloud’s Cookbook app

Changed

  • config.py files now are required to have eitherconfig.load_autoconfig(False) (don’t loadautoconfig.yml) orconfig.load_autoconfig() (do loadautoconfig.yml) in them.

  • Various host-blocking settings have been renamed to accommodate the new ABP-like adblocker:

    • content.host_blocking.enabledcontent.blocking.enabled (controlling both blockers)

    • content.host_blocking.whitelistcontent.blocking.whitelist (controlling both blockers)

    • content.host_blocking.listscontent.blocking.hosts.lists

  • Changes to default settings:

    • tabs.background is nowtrue by default, so that new tabs get opened in the background.

    • input.partial_timeout is now set to 0 by default, so that partially typed key strings are never cleared.

    • hints.leave_on_load is nowfalse by default, so that hint mode doesn’t get left when a page finishes loading. This can lead to stale hints persisting in rare circumstances, but is better than leaving hint mode when the user entered it before loading was completed.

    • The default fortabs.width (tab bar width if vertical) is now 15% of the window width rather than 20%.

    • The default bindings for moving tabs (tab-move - andtab-move +) were changed fromgl andgr togK andgJ, to be consistent with the tab switching bindings.

    • The text color for warning messages is now black instead of white, for increased contrast and thus readability.

    • The default timeout for messages is now raised from 2s to 3s.

  • On the first start, the history completion database is regenerated to remove a few problematic entries (such as longqute://pdfjs URLs). This might take a couple of minutes, but is a one-time operation. This should result in a performance improvement for the completion for affected users.

  • qutebrowser now shows an error if its history database version is newer than expected. This currently should never happen, but allows for potentially backwards-incompatible changes in future versions.

  • At least Python 3.6.1 is now required to run qutebrowser, support for Python 3.5 (and 3.6.0) is dropped. Note that Python 3.5 isno longer supported upstream since September 2020.

  • At least Qt/PyQt 5.12 is now required to run qutebrowser, support for 5.7 to 5.11 (inclusive) is dropped. While Debian Buster ships Qt 5.11, it’s based on a Chromium version from 2018 withno Debian security support and unsupported upstream since May 2019. It also has compatibility issues with various websites (GitHub, Twitch, Android Developer documentation, YouTube, …). Since no newer Debian Stable is released at the time of writing, it’s recommended toinstall qutebrowser in a virtualenv with a newer version of Qt/PyQt.

  • New optional dependency on the Pythonadblock library (see above for details).

  • The (formerly optional)cssutils dependency is now removed. It was only needed for improved behavior in corner cases when using:download --mhtml with the (non-default) QtWebKit backend, and as such it’s unlikely anyone is still relying on it. Thecssutils project is also dead upstream, with its repository being gone after Bitbucketremoved Mercurial support.

  • The (formerly required)pygments dependency is now optional. It is only used when using:view-source with QtWebKit, or when forcing it via:view-source --pygments on QtWebEngine. If it is unavailable, an unhighlighted fallback version of the page’s source is shown.

  • The former runtime dependency on thepkg_resources module (part of thesetuptools project) got dropped. Note thatsetuptools is still required to runsetup.py.

  • A new dependency on theimportlib_resources module got introduced for Python versions up to and including 3.8. Note that the stdlibimportlib.resources module for Python 3.7 and 3.8 is missing the needed APIs, thus requiring the backports for those versions as well.

  • The former dependency on theattrs/attr package is now dropped in favour ofdataclasses in the Python standard library. On Python 3.6, a new dependency on thedataclasses backport is now required.

  • The former dependency on thepypeg2 package is now dropped. This might cause some changes for certain corner-cases for suggested filenames when downloading files with the QtWebKit backend.

  • Windows and macOS releases now ship Python 3.9 rather than 3.7.

  • Thecolors.webpage.darkmode.* settings are now also supported with older Qt versions (Qt 5.12 and 5.13) rather than just with Qt 5.14 and above.

  • For regexes in the config (hints.{prev,next}_regexes), certain patterns which will change meanings in future Python versions are now disallowed. This is the case for character sets starting with a literal[ or containing literal character sequences--,&&,~~, or||. To avoid a warning, remove the duplicate characters or escape them with a backslash.

  • Ifprompt(..., "default") is used via JS, the default text is now pre-selected in the prompt shown by qutebrowser.

  • URLs such as::1/foo are now handled as a search term or local file rather than IPv6. Use[::1]/foo to force parsing as IPv6 instead.

  • Themkvenv.py script now runs a "smoke test" after setting up the virtual environment to ensure it’s working as expected. If necessary, the test can be skipped via a new--skip-smoke-test flag.

  • Both qutebrowser userscripts and Greasemonkey scripts are now additionally picked up from qutebrowser’s config directory (theuserscripts andgreasemonkey subdirectories of e.g.~/.config/qutebrowser/) rather than only the data directory (the same subdirectories of e.g.~/.local/share/qutebrowser/).

  • The:later command now understands a time specification like5m or1h5m2s, rather than just taking milliseconds.

  • Theimporter.py script doesn’t use a browser argument anymore; instead its--input-format switch can be used to configure the input format. The help also was expanded to explain how to use it properly.

  • Iftabs.tabs_are_windows is set, thetabs.last_close setting is now ignored and the window is always closed when using:close (d).

  • With the (default) QtWebEngine backend, if a customaccept header is set viacontent.headers.custom, the custom value is now ignored for XHR (XMLHttpRequest) requests. Instead, the sent value is now*/* or the header set from JavaScript, as it would be ifcontent.headers.custom wasn’t set.

  • The:tab-select completion now shows the underlying renderer process PID if doing so is supported (on QtWebEngine 5.15).

  • Iftabs.favicons.show is set tonever, favicons aren’t unnecessarily downloaded anymore. Thus, disabling favicons can help with a possiblefingerprinting vector.

  • "Super" is now understood as a modifier (i.e. as alias to "Meta").

  • Initial support for Python 3.10 (currently in Alpha stage).

  • Various performance improvements, including for the startup time.

Fixed

  • With interpolated color settings (colors.tabs.indicator.* andcolors.downloads.*), the alpha channel is now handled correctly.

  • Fixes to userscripts:

    • format_json now usesenv in its shebang, making it work correctly on systems wherebash isn’t located in/bin.

    • qute-pass now handles the MIME output format introduced in gopass 1.10.0.

    • qute-lastpass now types multiple< or> characters correctly.

  • The:undo completion now sorts its entries correctly (by the numerical index rather than lexicographically).

  • Thecompletion.web_history.ignore setting now works properly when set inconfig.py (rather than via:set). Additionally, a:config-source will not result in a history rebuild if the value wasn’t actually changed.

  • When downloading adata: URL, the suggested filename is now improved and contains a proper extension. Before this fix, qutebrowser would use the URL’s data contents as filename with QtWebEngine; or "binary blob" with the Qt network stack.

  • When:tab-only is run before a tab is available, an error is now shown instead of crashing.

  • A couple of long URLs (such asqute://pdfjs URLs) are now not added to the history database anymore.

  • A bug in QtWebEngine 5.15.2 causes "renderer process killed" errors on websites like LinkedIn and TradingView. There is now a workaround in qutebrowser to prevent this from happening.

  • Nextcloud Calendars started usingString.replaceAll which was only added to Chromium recently (Chrome 85), so won’t work with current QtWebEngine versions. This release includes a workaround (a polyfill as a site-specific-quirk).

v1.14.1 (2020-12-04)

Added

  • With v1.14.0, qutebrowser configures the main window to be transparent, so that it’s possible to configure a translucent tab- or statusbar. However, that change introduced various issues, such as performance degradation on some systems or breaking dmenu window embedding with its-w option. To avoid those issues for people who are not using transparency, the default behavior is reverted to versions before v1.14.0 in this release. A newwindow.transparent setting can be set totrue to restore the behavior of v1.14.0.

Changed

  • Windows and macOS releases now ship Qt 5.15.2, which is based on Chromium 83.0.4103.122 with security fixes up to 86.0.4240.183. This includes CVE-2020-15999 in the bundled freetype library, which is known to be exploited in the wild. It also includes various other bugfixes/features compared to Qt 5.15.0 included in qutebrowser v1.14.0, such as:

    • Correct handling of AltGr on Windows

    • Fix forcontent.cookies.accept not working properly

    • Fixes for screen sharing (some websites are still broken until an upcoming Qt 5.15.3)

    • Support for FIDO U2F / WebAuth

    • Fix for the unwanted creation of directories such asdatabases-incognito in the home directory

    • Proper autocompletion in the devtools console

    • Proper signalisation of a tab’s audible status ([A])

    • Fix for a hang when opening the context menu on macOS Big Sur (11.0)

    • Hardware accelerated graphics on macOS

Fixed

  • Setting thecontent.headers.referer setting tosame-domain (the default) was supposed to truncate referrers to only the host with QtWebEngine. Unfortunately, this functionality broke in Qt 5.14. It works properly again with this release, including a test so this won’t happen again.

  • With QtWebEngine 5.15, setting thecontent.headers.referer setting tonever did still send referrers. This is now fixed as well.

  • In v1.14.0, a regression was introduced, causing a crash when qutebrowser was closed after opening a download with PDF.js. This is now fixed.

  • With Qt 5.12, theObject.fromEntries JavaScript API is unavailable (it was introduced in Chromium 73, while Qt 5.12 is based on 69). This causedhttps://www.vr.fi/en and possibly other websites to break when accessed with Qt 5.12. A suitable polyfill is now included with qutebrowser ifcontent.site_specific_quirks is enabled (which is the default).

  • While XDG startup notifications (e.g. launch feedback via the bouncy cursor in KDE Plasma) were supported ever since Qt 5.1, qutebrowser’s desktop file accidentally declared that it wasn’t supported. This is now fixed.

  • Thedmenu_qutebrowser andqutedmenu userscripts now correctly read the qutebrowser sqlite history which has been in use since v1.0.0.

  • With Python 3.8+ and vertical tabs, a deprecation warning for an implicit int conversion was shown. This is now fixed.

  • Ever since Qt 5.11, fetching more completion data when that data is loaded lazily (such as with history) and the last visible item is selected was broken. The exact reason is currently unknown, but this release adds a tentative fix.

  • When PgUp/PgDown were used to go beyond the last visible item, the above issue caused a crash, which is now also fixed.

  • As a workaround for an overzealous Microsoft Defender false-positive detecting a "trojan" in the (unprocessed) adblock list,:adblock-update now doesn’t cache the HTTP response anymore.

  • With the QtWebKit backend andcontent.headers set tosame-domain (the default), origins with the same domain but different schemes or ports were treated as the same domain. They now are correctly treated as different domains.

  • When a URL path uses percent escapes (such ashttps://example.com/embedded%2Fpath), using:navigate up would treat the%2F as a path separator and replace any remaining percent escapes by their unescaped equivalents. Those are now handled correctly.

  • On macOS 11.0 (Big Sur), the default monospace font name caused a parsing error, thus resulting in broken styling for the completion, hints, and other UI components. They now look properly again.

  • Due to a Qt bug, installing Qt/PyQt from prebuilt binaries on systems with a very oldlibxcb-utils version (notably, Debian Stable, but not Ubuntu since 16.04 LTS) results in a setup which fails to start. This also affects themkvenv.py script, which now includes a workaround for this case.

  • Theopen_url_instance.sh userscript now complains whensocat is not installed, rather than silencing the error.

  • The example AppArmor profile inmisc/ was outdated and written for the older QtWebKit backend. It is now updated to serve as an useful starting point with QtWebEngine.

  • When running:devtools on Fedora without the needed (optional) dependency installed, it was suggested to installqt5-webengine-devtools, which does not, in fact, exist. It’s now correctly suggested to installqt5-qtwebengine-devtools instead.

  • With Qt 5.15.2, lines/borders coming from thereadability-js userscript were invisible. This is now fixed by changing the border color to grey (with all Qt versions).

  • Due to changes in the underlying Chromium, thecolors.webpage.prefers_color_scheme_dark setting broke with Qt 5.15.2. It now works properly again.

  • A bug in thepkg_resources module used by qutebrowser caused deprecation warnings to appear on start with Python 3.9 on some setups. Those are now hidden.

  • Minor performance improvements.

  • Fix for various functionality breaking in private windows with v1.14.0, after the last private window is closed. This includes:

    • Ad blocking

    • Downloads

    • Site-specific quirks (e.g. for Google login)

    • Certain settings such ascontent.javascript.enabled

v1.14.0 (2020-10-15)

Note: The QtWebEngine version bundled with the Windows/macOSreleases is still based on Qt 5.15.0 (like with qutebrowser v1.12.0 andv1.13.0) rather than Qt 5.15.1 because of aQt bug causingfrequent renderer process crashes. When Qt 5.15.2 is released(planned for November 3rd, 2020), a qutebrowser v1.14.x patchrelease with an updated QtWebEngine will be released.

Furthermore, this release still only contains partial session support for QtWebEngine5.15. It’s still recommended to run against Qt 5.15 due to the security patchescontained in it — for most users, the added workarounds seem to work out fine. Arewritten session support will be part of qutebrowser v2.0.0, tentatively planned for theend of the year or early 2021.

Changed

  • Thecontent.media_capture setting got split up into three more fine-grained settings,content.media.audio_capture,.video_capture and.audio_video_capture. Before this change, answering "always" to a prompt about e.g. audio capturing would set thecontent.media_capture setting, which would also allow the same website to capture video on a future visit. Now every prompt will set the appropriate setting, though existingcontent.media_capture settings inautoconfig.yml will be migrated to set all three settings. To review/change previously granted permissions, use:config-diff and e.g.:config-unset -u example.org content.media.video_capture.

  • The main window’s (invisible) background color is now set to transparent. This allows using the alpha channel in statusbar/tabbar colors to get a partially transparent qutebrowser window on a setup which supports doing so.

  • If QtWebEngine is compiled with PipeWire support and libpipewire is installed, qutebrowser will now support screen sharing on Wayland. Note that QtWebEngine 5.15.1 is needed.

  • When:undo is used with a count, it now reopens the count-th to last tab instead of the last one. The depth can instead be passed as an argument, which is also completed.

  • The defaultcompletion.timestamp_format now also shows the time.

  • :back and:forward now take an optional index which is completed using the current tab’s history.

  • The time a website in a tab was visited is now saved/restored in sessions.

  • When attempting to download a file to a location for which there’s already a still-running download, a confirmation prompt is now displayed.

  • :completion-item-focus now understandsnext-page andprev-page with corresponding<PgDown> /<PgUp> default bindings.

  • When the last private window is closed, all private browsing data is now cleared.

  • Whenconfig.source(...) is used with a--config-py argument given, qutebrowser used to search relative files in the config basedir, leading to them not being found when using a sharedconfig.py for different basedirs. Instead, they are now searched relative to the givenconfig.py file.

  • navigate prev ([[) andnavigate next (]]) now recognize links withnav-prev andnav-next classes, such as those used by the Hugo static site generator.

  • Whentabs.favicons is disabled buttabs.tabs_are_windows is set, the window icon is still set to the page’s favicon now.

  • The--asciidoc argument tosrc2asciidoc.py andbuild_release.py now only takes the path toasciidoc.py, using the current Python interpreter by default. To configure the Python interpreter as well, use--asciidoc-python path/to/python --asciidoc path/to/asciidoc.py instead of the former--asciidoc path/to/python path/to/asciidoc.py.

  • Dark mode (colors.webpage.darkmode.*) is now supported with Qt 5.15.2 (which is not released yet).

  • The default for the darkmodepolicy.images setting is now set tosmart which fixes issues with e.g. formulas on Wikipedia.

  • Thereadability-js userscript now adds some CSS to improve the reader mode styling in various scenarios:

    • Images are now shrunk to the page width, similarly to what Firefox' reader mode does.

    • Some images are now displayed as block (rather than inline) which is what Firefox' reader mode does as well.

    • Blockquotes are now styled more distinctively, again based on the Firefox reader mode.

    • Code blocks are now easier to distinguish from text and tables have visible cell margins.

  • Thereadability-js userscript now supports hint userscript mode.

Added

  • New argumentstrip for:navigate which removes queries and fragments from the current URL.

  • :undo now has a new-w /--window argument, which can be used to restore closed windows (rather than tabs). This is bound toU by default.

  • :jseval can now take#"['disable-shared-workers']" and:restart (or set the setting in yourconfig.py).

  • When a window is closed, the tab it contains are now correctly shut down (closing e.g. any dialogs which are still open for those tabs).

  • The Qt 5.15 session workaround now loads the correct (rather than the last) page when:back was used before saving a session.

  • In certain situations on Windows, qutebrowser fails to find the username of the user launching qutebrowser (most likely due to a bug in the application launching it). When this happens, an error is now displayed instead of crashing.

  • Certainautoconfig.yml with an invalid structure could lead to crashes, which are now fixed.

  • Generating docs withasciidoc2html.py (e.g. viamkvenv.py) now works correctly without Pygments being installed system-wide.

  • Ever since Qt 5.9, wheninput.mouse.rocker_gestures was enabled, the context menu still was shown when clicking the right mouse button, thus preventing the rocker gestures. This is now fixed.

  • Clicking the inspector switched from existing modes (such as passthrough) to normal mode since v1.13.0. Now insert mode is only entered when the inspector is clicked in normal mode.

  • Pulseaudio now shows qutebrowser’s audio streams as qutebrowser correctly, rather than showing them as Chromium with some Qt versions.

  • If:help was called with a deprecated command (e.g.:help :inspector), the help page would show despite deprecated commands not being documented. This now shows an error instead.

  • Thequte-lastpass userscript now filters out duplicate entries with--merge-candidates.

v1.13.0 (2020-06-26)

Deprecated

  • The:inspector command is deprecated and has been replaced by a new:devtools command (see below).

Removed

  • The:debug-log-level command was removed as it’s replaced by the newlogging.level.console setting.

  • Thequte://plainlog special page got replaced byqute://log?plain - the names of those pages is considered an implementation detail, and:messages --plain should be used instead.

Changed

  • Changes to commands:

    • :config-write-py now adds a note aboutconfig.py files being targeted at advanced users.

    • :report now takes two optional arguments for bug/contact information, so that it can be used without the report window popping up.

    • :message now takes a--logfilter /-f argument, which is a list of logging categories to show.

    • :debug-log-filter now understands the full logfilter syntax.

  • Changes to settings:

    • fonts.tabs has been split intofonts.tabs.{selected,unselected} (see below).

    • statusbar.hide has been renamed tostatusbar.show with the possible values beingalways (hide = False),never (hide = True) orin-mode (new, only show statusbar outside of normal mode.

    • TheQtFont config type formerly used forfonts.tabs andfonts.debug_console is now removed and entirely replaced byFont. The former distinction was mainly an implementation detail, and the accepted values shouldn’t have changed.

    • input.rocker_gestures has been renamed toinput.mouse.rocker_gestures.

    • content.dns_prefetch is now enabled by default again, since the crashes it caused are now fixed (Qt 5.15) or worked around.

    • scrolling.bar supports a newoverlay value to show an overlay scrollbar, which is now the default. On unsupported configurations (on Qt < 5.11, with QtWebKit or on macOS), the value falls back towhen-searching ornever (QtWebKit).

    • url.auto_search supports a newschemeless value which always opens a search unless the given URL includes an explicit scheme.

  • New handling of bindings in hint mode which fixes various bugs and allows for single-letter keybindings in hint mode.

  • The statusbar now shows partial keychains in all modes (e.g. while hinting).

  • Newt[Cc][Hh] default bindings which work similarly to thet[Ss][Hh] bindings for JavaScript but toggle cookie permissions.

  • Thetor_identity userscript now takes the password via a-p flag and has a new-c flag to customize the Tor control port.

  • Small performance improvements.

Added

  • New settings:

    • logging.level.ram andlogging.level.console to configure the default logging levels via the config.

    • fonts.tabs.selected andfonts.tabs.unselected to set the font of the selected tab independently from unselected tabs (e.g. to make it bold).

    • input.mouse.back_forward_buttons which can be set tofalse to disable back/forward mouse buttons.

  • New:devtools command (replacing:inspector) with various improved functionality:

    • The devtools can now be docked to the main window, by running:devtools left (wIh),bottom (wIj),top (wIk) orright (wIl). To show them in a new window, use:devtools window (wIw). Using:devtools (wi) will open them at the last used position.

    • The devtool window now has a "qutebrowser developer tools" window title.

    • When a resource is opened from the devtools, it now opens in a proper qutebrowser tab.

    • On Fedora, when theqt5-webengine-devtools package is missing, an error is now shown instead of a blank inspector window.

    • If opened as a window, the devtools are now closed properly when the associated tab is closed.

    • When the devtools are clicked, insert mode is entered automatically.

Fixed

  • Crash whentabs.focus_stack_size is set to -1.

  • Crash when apdf.js file for PDF.js exists, butviewer.html does not.

  • Crash when:completion-item-yank --sel is used on a platform without primary selection support (e.g. Windows/macOS).

  • Crash when there’s a feature permission request from Qt with an invalid URL (which happens due to a Qt bug with Qt 5.15 in private browsing mode).

  • Crash in rare cases where QtWebKit/QtWebEngine imports fail in unexpected ways.

  • Crash when something removed qutebrowser’s IPC socket file and it’s been running for 6 hours.

  • :config-write-py now works with paths starting with~/... again.

  • New site-specific quirk for a missingglobalThis in Qt ⇐ 5.12 on Reddit and Spotify.

  • When; is added tohints.chars, using hint labels containing;; now works properly.

  • Hint letters outside of ASCII should now work.

  • Whenbindings.key_mappings is used with hints, it now works properly with letters outside of ASCII as well.

  • With Qt 5.15, the audible/muted indicators are not updated properly due to a Qt bug. This release adds a workaround so that at least the muted indicator is shown properly.

  • As a workaround for crashes with QtWebEngine versions between 5.12 and 5.14 (inclusive), changing the user agent (content.headers.user_agent) exposed to JS now requires a restart. The corresponding HTTP header is not affected.

v1.12.0 (2020-06-01)

Removed

  • tox -e mkvenv which was deprecated in qutebrowser v1.10.0 is now removed. Use themkvenv.py script instead.

  • Support for usingconfig.bind(key, None) inconfig.py to unbind a key was deprecated in v1.8.2 and is now removed. Useconfig.unbind(key) instead.

  • :yank markdown was deprecated in v1.7.0 and is now removed. Use:yank inline [{title}]({url}) instead.

Added

  • New:debug-keytester command, which shows a "key tester" widget. Previously, that was only available as a separate application viapython3 -m scripts.keytester.

  • New:config-diff command which opens thequte://configdiff page.

  • New--debug-flag log-cookies to log cookies to the debug log.

  • Newcolors.contextmenu.disabled.{fg,bg} settings to customize colors for disabled items in the context menu.

  • New line selection mode (:toggle-selection --line), bound toShift-V in caret mode.

  • Newcolors.webpage.darkmode.* settings to control Chromium’s dark mode. Note that those settings only work with QtWebEngine on Qt >= 5.14 and require a restart of qutebrowser.

Changed

  • Windows and macOS releases now ship Qt 5.15, which is based on Chromium 80.0.3987.163 with security fixes up to 81.0.4044.138.

  • Thecontent.cookies.accept setting now accepts URL patterns.

  • Tests are now included in release tarballs. Note that only running them with the exact dependencies listed inmisc/requirements/requirements-tests.txt{,-raw} is supported.

  • The:tab-focus command now has completion for tabs in the current window.

  • Thebindings.key_mappings setting now maps<Ctrl+I> to the tab key by default.

  • :tab-give --private now detaches a tab into a new private window.

Fixed

  • Using:open -s now only rewriteshttp:// in URLs tohttps://, not other schemes likequte://.

  • When an unhandled exception happens in certain parts of the code (outside of the main thread), qutebrowser did crash or freeze when trying to show its exception handler. This is now fixed.

  • :inspector now works correctly when cookies are disabled globally.

  • Added workaround for a (Gentoo?) PyQt/packaging issue related to theQWebEngineFindTextResult handling added in v1.11.0.

  • When entering caret selection mode (v, v) very early before a page is loaded, an error is now shown instead of a crash happening.

  • The workaround for session loading with Qt 5.15 now handlessessions.lazy_restore so that the saved page is loaded instead of the "stub" page with no possibility to get to the web page.

  • A site specific quirk to allow typing accented characters on Google Docs was active for docs.google.com, but not drive.google.com. It is now applied for both subdomains.

  • With older graphics hardware (OpenGL < 4.3) with Qt 5.14 on Wayland, WebGL causes segfaults. Now qutebrowser detects that combination and suggests to disable WebGL or use XWayland.

v1.11.1 (2020-05-07)

Security

  • CVE-2020-11054: After a certificate error was overridden by the user, qutebrowser displays the URL as yellow (colors.statusbar.url.warn.fg). However, when the affected website was subsequently loaded again, the URL was mistakenly displayed as green (colors.statusbar.url.success_https). While the user already has seen a certificate error prompt at this point (or setcontent.ssl_strict tofalse which is not recommended), this could still provide a false sense of security. This is now fixed.

v1.11.0 (2020-04-27)

Added

  • New settings:

    • search.wrap which can be set to false to prevent wrapping around the page when searching. With QtWebEngine, Qt 5.14 or newer is required.

    • content.unknown_url_scheme_policy which allows controlling when an external application is opened for external links (never, from user interaction, always).

    • content.fullscreen.overlay_timeout to configure how long the fullscreen overlay should be displayed. If set to0, no overlay is displayed.

    • hints.padding to add additional padding for hints.

    • hints.radius to set a border radius for hints (set to3 by default).

  • New placeholders forurl.searchengines values:

    • {unquoted} inserts the search term without any quoting.

    • {semiquoted} (same as{}) quotes most special characters, but slashes remain unquoted.

    • {quoted} (same as{} in earlier releases) also quotes slashes.

Changed

  • First adaptions to Qt 5.15, including a stop-gap measure for session loading not working properly with it.

  • Searching now wraps around the page by default with QtWebKit (where it didn’t before). Setsearch.wrap tofalse to restore the old behavior.

  • The{} placeholder for search engines (theurl.searchengines setting) now does not quote slashes anymore, but other characters typically encoded in URLs still get encoded. This matches the behavior of search engines in Chromium. To revert to the old behavior, use{quoted} instead.

  • Thecontent.windowed_fullscreen setting got renamed tocontent.fullscreen.window.

  • Mouse-wheel scrolling is now prevented while hints are active.

  • Changes to userscripts:

    • qute-bitwarden now has an optional--totp flag which can be used to copy TOTP codes to clipboard (requires thepyperclip module).

    • readability-js now opens readability tabs next to the original tab (using the:open --related flag).

    • readability-js now displays a favicon for readability tabs.

    • password_fill now triggers achange JavaScript event after filling the data.

  • Thedictcli.py script now shows better error messages.

  • Various improvements to themkvenv.py script (mainly useful for development).

  • Minor performance improvements.

Deprecated

  • A warning about old Qt versions is now also shown with Qt 5.9 and 5.10, as support for Qt < 5.11 will be dropped in qutebrowser v2.0.

Fixed

  • unsafeWindow is now defined for Greasemonkey scripts with QtWebKit.

  • The proxiedwindow global is now shared between different Greasemonkey scripts (but still separate from the page’swindow), to match the original Greasemonkey implementation.

  • The--output-messages (-m) flag added in v1.9.0 now also works correctly when using:spawn --userscript.

  • :version and--version now don’t crash if there’s an (invalid)/etc/os-release file which has non-comment lines without a= character.

  • Scripts inscripts/ now report errors tostderr correctly, instead of usingstdout.

v1.10.2 (2020-04-17)

Changed

  • Windows and macOS releases now bundle Qt 5.14.2, including security fixes up to Chromium 80.0.3987.132.

Fixed

  • The WhatsApp workaround now also works when using WhatsApp in languages other than English.

  • Themkvenv.py script now also works properly on Windows.

v1.10.1 (2020-02-15)

Fixed

  • Crash when saving data fails during shutdown (which was a regression introduced in v1.9.0).

  • Error while reading config.py whenfonts.tabs orfonts.debug_console is set to a value includingdefault_size.

  • When astate file contains invalid UTF-8 data, a proper error is now displayed.

Changed

  • When the Qt version changes (and also on the first start of v1.10.1 on Qt 5.14), service workers registered by websites are now deleted. This is done as a workaround for QtWebEngine issues causing crashes when visiting pages using service workers (such as Google Mail/Drive). No persistent data should be affected as websites can re-register their service workers, but a (single) backup is kept atwebengine/Service Worker-bak in qutebrowser’s data directory.

  • Better output on stdout when config errors occur.

  • Themkvenv.py now ensures the latest versions ofsetuptools andwheel are installed in the virtual environment, which should speed up installation and fix install issues.

  • The default forcolors.statusbar.command.private.bg has been changed to a slightly different gray, as a workaround for a Qt issue where the cursor was invisible in that case.

v1.10.0 (2020-02-02)

Added

  • Newcolors.webpage.prefers_color_scheme_dark setting which allows forcingprefers-color-scheme: dark colors for websites (QtWebEngine with Qt 5.14 or newer).

  • Newfonts.default_size setting which can be used to set a bigger font size for all UI fonts.

Changed

  • Thefonts.monospace setting has been removed and replaced byfonts.default_family. The newdefault_family setting is improved in various ways:

    • It accepts a list of font families (or a single font family) rather than a comma-separated string. As an example, instead offonts.monospace = "Courier, Monaco", usefonts.default_family = ["Courier", "Monaco"].

    • Since a list is now accepted as value, no quoting of font names with spaces is required anymore. As an example, instead offonts.monospace = '"xos4 Terminus"', usefonts.default_family = 'xos4 Terminus'.

    • It is now empty by default rather than having a long list of font names in the default config. When the value is empty, the system’s default monospaced font is used.

  • Ifmonospace is now used in a font value, it’s used literally and not replaced anymore. Instead,default_family is replaced as explained above.

  • The defaultcontent.headers.accept_language value now adds a;q=0.9 classifier which should make the value sent more in-line with what other browsers do.

  • Thequte-pass userscript now has a new--mode gopass switch which uses gopass rather than pass.

  • Thetox -e mkvenv (ormkvenv-pypi) way of installing qutebrowser is now replaced by amkvenv.py script. See the updatedinstall instructions for details.

  • macOS and Windows releases now ship with Qt/QtWebEngine 5.14.1

    • Based on Chromium 77.0.3865.129 with security fixes up to Chromium 79.0.3945.117.

    • Sandboxing is now enabled on Windows.

    • Monospace fonts are now used when a website requests them on macOS 10.15.

    • Web notifications are now supported.

Fixed

  • When quitting qutebrowser, components are now cleaned up differently. This should fix certain (rare) segmentation faults and exceptions when quitting, especially with the new exit scheme introduced in in PyQt5 5.13.1.

  • Added a workaround for per-domain settings (e.g. a JavaScript whitelist) not being applied in some scenarios with Qt 5.13 and above.

  • Added additional site-specific quirk for WhatsApp Web.

  • Thequte-pass userscript now works correctly when aPASSWORD_STORE_DIR ending with a trailing slash is given.

v1.9.0 (2020-01-08)

Added

  • Initial support for Qt 5.14.

  • Newcontent.site_specific_quirks setting which enables workarounds for websites with broken user agent parsing (enabled by default, see the "Fixed" section for fixed websites).

  • Newqt.force_platformtheme setting to force Qt to use a given platform theme.

  • Newtabs.tooltips setting which can be used to disable hover tooltips for tabs.

  • New settings to configure the appearance of context menus:

    • fonts.contextmenu

    • colors.contextmenu.menu.bg

    • colors.contextmenu.menu.fg

    • colors.contextmenu.selected.bg

    • colors.contextmenu.selected.fg

Changed

  • The macOS binaries now require macOS 10.13 High Sierra or newer. Support for macOS 10.12 Sierra has been dropped.

  • Thecontent.headers.user_agent setting now is a format string with the default value resembling the behavior of it being set to null before. This slightly changes the sent user agent for QtWebKit: Instead of mentioning qutebrowser and its version it now mentions the Qt version.

  • Thequte-pass userscript now has a new--extra-url-suffixes (-s) argument which passes extra URL suffixes to the tldextract library.

  • A stack is now used for:tab-focus last rather than just saving one tab. Additionally,:tab-focus now understandsstack-prev andstack-next arguments to traverse that stack.

  • :hint now has a newright-click target which allows right-clicking elements via hints.

  • The Terminus font has been removed from the default monospace fonts since it caused trouble with HighDPI setups. To get it back, add either"xos4 Terminus" orTerminus (depending on fontconfig version) to the beginning of thefonts.monospace setting.

  • As a workaround for a Qt bug causing a segfault, desktop sharing is now automatically rejected on Qt versions before 5.13.2. Note that screen sharing still won’t work on Linux before Qt 5.14.

  • Comment lines in quickmarks/bookmarks files are now ignored. However, note that qutebrowser will overwrite those files if bookmark/quickmark commands are used.

  • Reopening PDF.js pages from e.g. a session file will now re-download and display those PDFs.

  • Improved behavior when using:open-download in a sandboxed environment (KDE Flatpak).

  • qutebrowser now enables the new PyQt exit scheme, which should result in things being cleaned up more properly (e.g. cookies being saved even without a timeout) on PyQt 5.13.1 and newer.

  • The:spawn command has a new-m /--output-messages argument which shows qutebrowser messages based on a command’s standard output/error.

  • Improved insert mode detection for some CodeMirror usages (e.g. in JupyterLab and Jupyter Notebook).

  • If JavaScript is disabled globally,file://* now doesn’t automatically have it enabled anymore. Run:set -u file://* content.javascript.enabled true to restore the previous behavior.

  • Settings with URL patterns can now be used to affect the behavior of the QtWebEngine inspector. Note that the underlying URL ischrome-devtools://* from Qt 5.11 to Qt 5.13, butdevtools://* with Qt 5.14.

  • Improvements whentabs.tabs_are_windows is set:

    • Using:tab-take and:tab-give now shows an error, as the effect of doing so would be equal to:tab-clone.

    • The:buffer completion doesn’t show any window sections anymore, only a flat list of tabs.

  • Improved parsing in some corner cases for theQtFont type (used forfonts.tabs andfonts.debug_console).

  • Performance improvements for the following areas:

    • Adding settings with URL patterns

    • Matching of settings using URL patterns

Fixed

  • Downloads (e.g. via:download) now see the same user agent header as webpages, which fixes cases where overly restrictive servers/WAFs closed the connection before.

  • dictcli.py now works correctly on Windows again.

  • The logic for:restart has been revisited, which should fix issues with relative basedirs.

  • Remaining issues related to Python 3.8 are now fixed (mostly warnings, especially on QtWebKit).

  • Workaround for a Qt bug where a page never finishes loading with a non-overridable TLS error (e.g. due to HSTS).

  • Thequte://configdiff page now doesn’t show built-in settings (e.g. javascript being enabled forqute:// andchrome:// pages) anymore.

  • Thequte-lastpass userscript now stops prompting for passwords when cancelling the password input.

  • The tab hover text now shows ampersands (&) correctly.

  • With QtWebEngine and Qt >= 5.11, the inspector now shows its icons correctly even if loading of images is disabled via thecontent.images setting.

  • Entering a very long string (over 50k characters) in the completion used to crash, now it shows an error message instead.

  • Various improvements for URL/searchengine detection:

    • Strings with a dot but with characters not allowed in a URL (e.g. an underscore) are now not treated as URL anymore.

    • Strings like "5/8" are now not treated as IP anymore.

    • URLs with an explicit scheme and a space (%20) are correctly treated as URLs.

    • Mail addresses are now treated as search terms.

    • Withurl.open_base_url set, searching for a search engine name now works.

    • url.open_base_url = True together withurl.auto_search = 'never' is now handled correctly.

    • Fixed crash when a search engine URL turns out to be invalid.

  • New "site specific quirks", which work around some broken websites:

    • WhatsApp Web

    • Google Accounts

    • Slack (with older QtWebEngine versions)

    • Dell.com support pages (with Qt 5.7)

    • Google Docs (fixes broken IME/compose key)

v1.8.3 (2019-12-05)

Fixed

  • Segmentation fault introduced in v1.8.2 when a tab gets closed immediately after it has finished loading (e.g. with certain login flows).

v1.8.2 (2019-11-22)

Changed

  • Windows/macOS releases now ship with Qt 5.12.6. This includes security fixes up to Chromium 77.0.3865.120 plus a security fix for CVE-2019-13720 from Chromium 78.

Fixed

  • Unbinding keys viaconfig.bind(key, None) accidentally worked in v1.7.0 but raises an exception in v1.8.0. It now works again, but is deprecated and shows an error. Note that:config-py-write did write such invalid lines before v1.8.0, so existing config files might need adjustments.

  • Thereadability-js userscript now handles encodings correctly (which it didn’t before for some websites).

  • <Shift-Insert> can now be used to paste text starting with a hyphen.

  • Following hints via the number keypad now works properly again.

  • Errors while reading the state file are now displayed instead of causing a crash.

  • Crash when using:debug-log-level without a console attached.

  • Downloads are now hidden properly when the browser is in fullscreen mode.

  • Crash when settingcolors.webpage.bg to an empty value with QtWebKit.

  • Crash when the history database file is not a proper sqlite database.

  • Workaround for missing/broken error pages on Debian.

  • A deprecation warning (caused by pywin32) about the imp module on Windows is now hidden.

v1.8.1 (2019-09-27)

Changed

  • No code changes - this release only repackages the Windows/macOS releases due to issues with the v1.8.0 release.

  • Updated dependencies for Windows/macOS releases:

    • macOS and Windows releases now ship with Qt/QtWebEngine 5.12.5. Those are based on Chromium 69.0.3497.128 with security fixes up to Chromium 76.0.3809.87.

    • Qt 5.13 couldn’t be used yet due to various bugs in Qt 5.13.0 and .1.

v1.8.0 (2019-09-25)

Added

  • New userscripts:

    • readability-js which uses Mozilla’s node.js readability library.

    • qute-bitwarden which integrates the Bitwarden CLI.

Changed

  • The statusbar text for passthrough mode now shows all configured bindings to leave the mode, not only one.

  • When:config-source is used with a relative filename, the file is now searched in the config directory instead of the current working directory.

  • HTML5 inputs with date/time types now enter insert mode when selected.

  • dictcli.py now shows where dictionaries are installed to and complains when running it as root if doing so would result in a wrong installation path.

  • The Makefile now can also runsetup.py build when invoked without a target.

  • Changes to userscripts:

    • qute-pass: Don’t runpass if only a username is requested.

    • qute-pass: Support private domains likemyrouter.local.

    • readability: Improved CSS styling.

  • Performance improvements in various areas:

    • Loading config files

    • Typing without any completion matches

    • General keyboard handling

    • Scrolling

  • :version now shows details about the loaded autoconfig.yml/config.py.

  • Hosts are now additionally looked up including their ports in netrc files.

  • With Qt 5.10 or newer, qutebrowser now doesn’t force software rendering with Nouveau drivers anymore. However, QtWebEngine/Chromium still do so.

  • The XSS Auditor is now disabled by default (content.xss_auditing =false). This reflects a similar change in Chromium, see theirXSS Auditor Design Document for details.

Fixed

  • :config-write-py now correctly writesconfig.unbind(...) lines (instead ofconfig.bind(..., None)) when unbinding a default keybinding.

  • Prevent repeat keyup events for JavaScript when a key is held down.

  • The Makefile now rebuilds the manpage correctly.

  • ~/.config/qutebrowser/blocked-hosts can now also contain /etc/hosts-like lines, not just simple hostnames.

  • Restored compatibility with Jinja2 2.8 (e.g. used on Debian Stretch or Ubuntu 16.04 LTS).

  • Fixed implicit type conversion warning with Python 3.8.

  • The desktop file now setsStartupWMClass correctly, so the qutebrowser icon is no longer shown twice in the Gnome dock when pinned.

  • Bindings involving keys which need the AltGr key now work properly.

  • Fixed crash (caused by a Qt bug) when typing characters above the Unicode BMP (such as certain emoji or CJK characters).

  • dictcli.py now works properly again.

  • Shift can now be used while typing hint keystrings, which e.g. allows typing number hints on French keyboards.

  • With rapid hinting in number mode, backspace now edits the filter text after following a hint.

  • A certain type of error ("locking protocol") while initializing sqlite now isn’t handled as crash anymore.

  • Crash when showing a permission request in certain scenarios.

Removed

  • At least Python 3.5.2 is now required to run qutebrowser, support for 3.5.0 and 3.5.1 was dropped.

v1.7.0 (2019-07-18)

Added

  • New settings:

    • colors.tabs.pinned.* to control colors of pinned tabs.

    • hints.leave_on_load which allows disabling leaving of hint mode when a new page is loaded.

    • colors.completion.item.selected.match.fg which allows configuring the text color for the matching text in the currently selected completion item.

    • tabs.undo_stack_size to limit how many undo entries are kept for closed tabs.

  • New commands:

    • :reverse-selection (o in caret mode) to swap the stationary/moving ends of a selection.

  • New commandline replacements:

    • {url:domain},{url:auth},{url:scheme},{url:username},{url:password},{url:host},{url:port},{url:path},{url:query} for the respective parts of the current URL.

    • {title} for the current page title.

  • The{title} field intabs.title.format,tabs.title.format_pinned andwindow.title_format got renamed to{current_title} (mirroring{current_url}) in order to not conflict with the new{title} commandline replacement.

  • Newdelete target for:hint which removes the hinted element from the DOM.

  • New--config-py commandline argument to use a customconfig.py file.

  • Qt 5.13: Support for notifications (shown via system tray).

Changed

  • Updated dependencies for Windows/macOS releases:

  • PyQt5 5.12.3 / PyQtWebEngine 5.12.1

  • Qt 5.12.4, which includes security fixes up to Chromium 74.0.3729.157

  • Python 3.7.4

  • OpenSSL 1.1.1

  • Note: This release includes Qt 5.12.4 instead of Qt 5.13.0 due toQTBUG-76913 causing frequent segfaults with Qt 5.13. After Qt 5.13.1 is released, qutebrowser v1.8.0 will be released with an updated Qt.

  • Completely revamped Windows installer which allows installing without admin permissions and allows setting qutebrowser as default browser.

  • The desktop filequtebrowser.desktop is now renamed toorg.qutebrowser.qutebrowser.desktop.

  • Pinned tabs now always show a favicon (even if the site doesn’t provide one) when shrinking.

  • Settingdownloads.location.directory now changes the directory displayed in the download prompt even ifdownloads.location.remember is set.

  • Theyank command gained a newinline argument, which allows to e.g. use:yank inline [{title}]({url}).

  • Duplicate consecutive history entries with the same URL are now ignored.

  • More detailed error messages when spawning a process failed.

  • Thecontent.pdfjs setting now supports domain patterns.

  • Improved process status output with:spawn -o.

  • Thecolors.tabs.bar.bg setting is now of typeQssColor and thus supports gradients.

  • The:fullscreen command now understands a new--enter flag which causes it to always enter fullscreen instead of toggling the current state.

  • --debug-flag stack is now needed to show stack traces on renderer process crashes.

  • --debug-flag chromium can be used to easily turn on verbose Chromium logging.

  • For runtime data (such as the IPC socket), a proper runtime path is now used on BSD; only macOS/Windows continue to use the temporary directory.

  • PDF.js is now also searched in/app/share/pdf.js/ (for Flatpak)

  • Permission prompts can now be answered withY (:prompt-accept --save yes) andN (:prompt-accept --save no) to save the answer as a per-domain setting.

  • content.dns_prefetch is now turned off by default, as it causes crashes inside QtWebEngine.

  • The (still unofficial) interceptor plugin API now containsresource_type for a request and allows redirecting requests.

  • :bookmark-remove now shows a message for consistency with:bookmark-add.

  • Very early segfaults are now also caught by the crash handler.

  • The appdata XML now contains proper release information and an (empty) OARS content rating.

  • Improved Linux distribution detection.

  • Qt 5.13: Request filtering now happens in the UI rather than IO thread.

  • Qt 5.13: Support for PDFium (Chromium’s PDF viewer) is disabled for now so that PDFs can still be downloaded (or shown with PDF.js) properly.

  • Various performance improvements (e.g. for showing hints or the :open completion).

Deprecated

  • :yank markdown got deprecated, as:yank inline [{title}]({url}) can now be used instead.

Fixed

  • Various QtWebEngine load signals are now handled differently, which should fix issues with insert mode being left while typing on sites like Google Translate.

  • Race condition causing a colored statusbar in normal mode when entering/exiting caret mode quickly.

  • Using100% for a hue in ahsv(...) config value now corresponds to 359 (rather than 255), matching the fixed behavior in Qt 5.13.

  • Chaining commands with;; used to abort with some failing commands. It now runs the second command no matter whether the first one succeeded or not.

  • Handling of profiles and private windows (and resulting crashes with Qt 5.12.2).

  • Fixes for corner-cases when using:navigate increment/decrement.

  • The type for thecolors.hints.match.fg setting was changed toQtColor. Gradients were never supported for this setting, and with this change, values likergb(0, 0, 0) now work as well.

  • Permission prompts now show a properly normalized URL with QtWebKit.

  • Crash on start when PyQt was built without SSL support with Qt >= 5.12.

  • Minor memory leaks.

v1.6.3 (2019-06-18)

Fixed

  • Crash when hinting and changing/closing the tab before hints are displayed.

  • Crash on redirects with Qt 5.13.

  • Hide bogusAA_ShareOpenGLContexts warning with Qt 5.12.4.

  • Workaround for renderer process crashes with Qt 5.12.4. If you’re unable to update, you can remove~/.cache/qutebrowser for the same result.

v1.6.2 (2019-05-06)

Changed

  • Windows/macOS releases now ship with Qt 5.12.3, which includes security fixes up to Chromium 73.0.3683.75.

Fixed

  • Crash when SQL errors occur while using the completion.

  • Crash when cancelling a download prompt started in an already closed window.

  • Crash when many prompts are opened at the same time.

  • Running without Qt installed now displays a proper error again.

  • High CPU usage when using the keyhint widget with a low delay.

  • Crash with Qt >= 5.14 on redirects.

v1.6.1 (2019-03-20)

Changed

  • Windows/macOS releases now ship with Qt 5.12.2, which includes security fixes up to Chromium 72.0.3626.121 (including CVE-2019-5786 which is known to be exploited in the wild).

Fixed

  • Crash when using:config-{dict,list}-{add,remove} with an invalid setting.

  • Functionality like hinting on pages with an element with ID_qutebrowser (such as qutebrowser.org) on Qt 5.12.

  • The .desktop file in v1.6.0 was missing the "Actions" key, which is now fixed.

  • The SVG icon now has a size of 256x256px set to comply with freedesktop standards.

  • Settingcolors.statusbar.*.bg to a gradient now has the expected effect of the gradient spanning the entire statusbar.

v1.6.0 (2019-02-25)

Added

  • New settings:

    • tabs.new_position.stacking which controls whether new tabs opened from a page should stack on each other or not.

    • completion.open_categories which allows to configure which categories are shown in the:open completion, and how they are ordered.

    • tabs.pinned.frozen to allow/deny navigating in pinned tabs.

    • hints.selectors which allows to configure what CSS selectors are used for hints, and also allows adding custom hint groups.

    • input.insert_mode.leave_on_load to turn off leaving insert mode when a new page is loaded.

  • New config manipulation commands:

    • :config-dict-add and:config-list-add to a new element to a dict/list setting.

    • :config-dict-remove and:config-list-remove to remove an element from a dict/list setting.

  • New:yank markdown feature which yanks the current URL and title in markdown format.

  • Support for new QtWebEngine features in Qt 5.12:

    • Basic support for client certificates. Selecting the certificate to use when there are multiple matching certificates isn’t implemented yet.

    • Support for DNS prefetching (plus newcontent.dns_prefetch setting).

Changed

  • Various changes to the Windows and macOS builds:

    • Bundling Qt 5.12.1, based on Chromium 69.0.3497.128 with security fixes up to 71.0.3578.94.

    • Windows: A 32-bit build is available again.

    • Windows: The builds now bundle the Universal CRT DLLs, causing them to work on earlier versions of Windows 10.

    • macOS: Support for OS X 10.11 El Capitan was dropped, requiring macOS 10.12 Sierra or newer.

    • macOS: The IPC socket path used to communicate with existing instances changed due to changes in Qt 5.12. Please make sure to quit qutebrowser before upgrading.

  • :q now closes the current window instead of quitting qutebrowser completely (:close), while:qa quits (:quit). The behavior of:wq remains unchanged (:quit --save), as closing a window while saving the session doesn’t make sense.

  • Completion highlighting is now done differently (usingQSyntaxHighlighter), which should fix some highlighting corner-cases.

  • TheQtColor config type now also understands colors likergb(...).

  • :yank now has a--quiet option which causes it to not display a message.

  • The:open completion now also shows search engines by default.

  • Thecontent.host_blocking.enabled setting now supports URL patterns, so the adblocker can be disabled on a given page.

  • Elements with atabindex attribute now also get hints by default.

  • Various small performance improvements for hints and the completion.

  • The Wayland check for QtWebEngine is now disabled on Qt >= 5.11.2, as those versions should work without any issues.

  • The JavaScriptconsole object is now available in PAC files.

  • PAC proxies currently don’t work properly on QtWebEngine (and never did), so an error is now shown when trying to configure a PAC proxy.

  • The metainfo filequtebrowser.appdata.xml is now renamed toorg.qutebrowser.qutebrowser.appdata.xml.

  • Thequte-pass userscript now understands domains in gpg filenames in addition to directory names.

  • The autocompletion forcontent.headers.user_agent got updated to only include the default and Chrome, as setting the UA to Firefox has various bad side-effects.

  • Combining Qt 5.12 with an older PyQt can lead to issues, so a warning is now shown when starting qutebrowser with that combination.

Fixed

  • Invalid world IDs now get rejected for:jseval and GreaseMonkey scripts.

  • When websites suggest download filenames with invalid characters, those are now correctly replaced.

  • Invalid hint length calculation in certain rare cases.

  • Dragging tabs in the tab bar (which was broken in v1.5.0)

  • Using Shift-Home in command mode now works properly.

  • Workaround for a Qt bug which preventedcontent.cookies.accept = no-3rdparty from working properly on some pages like GMail. However, the default forcontent.cookies.accept is stillall to be in line with what other browsers do.

  • :navigate not incrementing in anchors or queries.

  • Crash when trying to use a proxy requiring authentication with QtWebKit.

  • Slashes in search terms are now percent-escaped.

  • Whenscrolling.bar = True was set in versions before v1.5.0, this now correctly gets migrated toalways instead ofwhen-searching.

  • Completion highlighting now works again on Qt 5.11.3 and 5.12.1.

  • The non-standard headerX-Do-Not-Track is no longer sent.

  • PAC proxies were never correctly supported with QtWebEngine, but are now explicitly disallowed.

  • macOS: Context menus for download items now show in the correct macOS style.

  • Issues with fullscreen handling when exiting a video player.

  • Various fixes for Qt 5.12 issues:

    • A javascript error on page load was fixed.

    • window.print() works with Qt 5.12 now.

    • Fixed handling of duplicate download filenames.

    • Fixed brokenqute://history page.

    • Fixed PDF.js not working properly.

    • The download button in PDF.js now works (it’s not possible to make it work with earlier Qt versions).

    • Since Greasemonkey scripts modifying the DOM fail when being run at document-start, some known-broken scripts (Iridium, userstyles.org) are now forced to run at document-end.

v1.5.2 (2018-10-26)

Changed

  • Thecontent.cookies.accept setting is now set toall instead ofno-3rdparty by default, asno-3rdparty breaks various pages such as GMail.

v1.5.1 (2018-10-10)

Fixed

  • Flickering when opening/closing tabs (as soon as more than 10 are open) on some pages.

  • PDF.js is now bundled again with the macOS/Windows release.

  • PDF.js is now searched in the correct path (if not installed system-wide) instead of hardcoding~/.local/share/qutebrowser.

  • Improved logging for PDF.js resources which fail to load.

  • Crash when closing a tab after doing a search.

  • Tabs appearing when hidden after e.g. closing tabs.

v1.5.0 (2018-10-03)

Added

  • Rewritten PDF.js support:

    • PDF.js support and thecontent.pdfjs setting are now also available with QtWebEngine.

    • Opening a PDF file now doesn’t start a second request anymore.

    • Opening PDFs on https:// sites now works properly.

    • New--pdfjs flag forprompt-open-download, so PDFs can be opened in PDF.js with<Ctrl-P> in the download prompt.

  • New settings:

    • content.mouse_lock to handle HTML5 pointer locking.

    • completion.web_history.exclude which hides a list of URL patterns from the completion.

    • qt.process_model which can be used to change Chromium’s process model.

    • qt.low_end_device_mode which turns on Chromium’s low-end device mode. This mode uses less RAM, but the expense of performance.

    • content.webrtc_ip_handling_policy, which allows more fine-grained/restrictive control about which IPs are exposed via WebRTC.

    • tabs.max_width which allows to have a more "normal" look for tabs.

    • content.mute which allows to mute pages (or all tabs) by default.

  • Running qutebrowser with QtWebKit or Qt < 5.9 now shows a warning (only once), as support for those is going to be removed in a future release.

  • New t[iI][hHu] default bindings (similar totsh etc.) to toggle images.

  • The qute-pass userscript now has optional OTP support.

  • When:spawn --userscript is called with a count, that count is now passed to userscripts as$QUTE_COUNT.

Changed

  • Windows and macOS releases now bundle Python 3.7, PyQt 5.11.3 and Qt 5.11.2. QtWebEngine includes security fixes up to Chromium 68.0.3440.75 andvarious other fixes.

  • Various performance improvements when many tabs are opened.

  • Thecontent.headers.referer setting now works on QtWebEngine.

  • The:repeat command now takes a count which is multiplied with the given "times" argument.

  • The default keybinding to leave passthrough mode was changed from<Ctrl-V> to<Shift-Escape>, which makes pasting from the clipboard easier in passthrough mode and is also unlikely to conflict with webpage bindings.

  • Theapp_id is now set toqutebrowser for Wayland.

  • Command orCmd can now be used (instead ofMeta) to map the Command key on macOS.

  • Using:set option now shows the value of the setting (like:set option? already did).

  • Thecompletion.web_history_max_items setting got renamed tocompletion.web_history.max_items.

  • The Makefile shipped with qutebrowser now supports overriding variablesDATADIR andMANDIR.

  • Regenerating completion history now shows a progress dialog.

  • Thecontent.autoplay setting now supports URL patterns on Qt >= 5.11.

  • Thecontent.host_blocking.whitelist setting now takes a list of URL patterns instead of globs.

  • In passthrough mode, Ctrl + Mousewheel now also gets passed through to the page instead of zooming.

  • Editing text in an external editor now simulates a JS "input" event, which improves compatibility with websites reacting via JS to input.

  • Thequte://settings page is now properly sorted on Python 3.5.

  • :zoom,:zoom-in and:zoom-out now have a--quiet switch which causes them to not display a message.

  • Thescrolling.bar setting now takes three values instead of being a boolean:always,never, andwhen-searching (which only displays it while a search is active).

  • @@ now repeats the last run macro.

  • Thecontent.host_blocking.lists setting now accepts afile:// URL to a directory, and reads all files in that directory.

  • The:tab-give and:tab-take command now have a new flag--keep which causes them to keep the old tab around.

  • :navigate now clears the URL query.

Fixed

  • qute:// pages now work properly on Qt 5.11.2

  • Error when passing a substring with spaces to:tab-take.

  • Greasemonkey scripts which start with a UTF-8 BOM are now handled correctly.

  • When no documentation has been generated, the plaintext documentation now can be shown for more files such asqute://help/userscripts.html.

  • Crash when doing initial run on Wayland without XWayland.

  • Crash when trying to load an empty session file.

  • :hint with an invalid--mode= value now shows a proper error.

  • Rare crash on Qt 5.11.2 when clicking on<select> elements.

  • Rare crash related to the completion.

Removed

  • Support for importing pre-v1.0.0 history files has been removed.

  • Thecontent.webrtc_public_interfaces_only setting has been removed and replaced bycontent.webrtc_ip_handling_policy.

v1.4.2 (2018-09-02)

Changed

  • Thecontent.xss_auditing setting is now enabled by default, to mirror Chromium’s rather than Qt’s default behavior.

  • Long URLs in the statusbar are now elided at the end rather than in the middle, to make sure the hostname is completely visible whenever possible.

Fixed

  • Crash in Qt 5.7.1 when a website useswindow.print().

  • The workaround for Nouveau graphic drivers now works properly again.

  • Crash when using:follow-selected with a link which is outside of the view.

  • Workaround for windows not showing as urgent with some window managers (like i3).

  • Crash when opening URLs with some unicode characters (IDNA 2008). Those URLs still won’t open though, due to missing support in Qt.

  • Crash when a download directory which can’t be created is configured.

  • Crash in theimporter.py script when importing Chrome bookmarks from newer Chrome versions.

  • Thecontent.webrtc_public_interfaces_only option didn’t work on Qt 5.11 previously (it now does). Note it still does not work on Qt 5.10 (due to a Qt bug) and Qt < 5.9.2.

  • Repeated escaping of entries inqute://log when refreshing page.

  • The host blocker doesn’t block 0.0.0.0 anymore.

  • Crash when using :// as URL pattern.

  • The:buffer completion now sorts tabs with indices >= 10 correctly again.

v1.4.1 (2018-07-11)

Security

Fixed

  • Rare crash when an error occurs in downloads.

  • Newlines are now stripped from the :version pastebin URL.

  • There’s a newmkvenv-pypi-old environment intox.ini which installs an older Qt, which is needed on Ubuntu 16.04.

  • Worked around a Qt issue which redirects to achrome-error:// page when trying to use U2F.

  • Thelink_pyqt.py script now works correctly with PyQt 5.11.

  • The Windows installer now uninstalls the old version before installing the new one, fixing issues with qutebrowser not starting after installing v1.4.0 over v1.3.3.

v1.4.0 (2018-07-03)

Added

  • Support for the bundledsip module in PyQt 5.11 and other changes in Qt/PyQt 5.11.x.

  • New--debug-flag log-requests to log requests to the debug log for debugging.

  • New--first flag for:hint (bound togi for inputs) which automatically selects the first hint.

  • Newinput.escape_quits_reporter setting which can be used to avoid accidentally quitting the crash reporter when pressing escape.

  • Newqute-lastpass userscript which uses the LastPass CLI to fill passwords.

  • The Makefile now installs a/usr/share/metainfo/qutebrowser.appdata.xml file.

  • QtWebEngine: Support for printing from webpages viawindow.print.

  • QtWebEngine: Support for muting tabs:

    • New{audio} field forwindow.title_format andtabs.title.format which displays[M]/[A] for muted/recently audible tabs.

    • New:tab-mute command (bound to<Alt-m>) to mute/unmute a tab.

  • QtWebEngine: Support forcontent.cookies.accept with third-party cookies blocked by default (requires Qt 5.11).

  • QtWebEngine: New settings:

    • Support for requesting persistent storage vianavigator.webkitPersistentStorage.requestQuota with a newcontent.persistent_storage setting (requires Qt 5.11). This setting also supports URL patterns.

    • Support for registering custom protocol handlers vianavigator.registerProtocolHandler with a newcontent.register_protocol_handler setting (requires Qt 5.11). This setting also supports URL patterns.

    • Support for WebRTC screen sharing with a newcontent.desktop_capture setting (requires Qt 5.10). This setting also supports URL patterns.

    • Newcontent.autoplay setting to enable/disable automatic video playback (requires Qt 5.10).

    • Newcontent.webrtc_public_interfaces_only setting to only expose public interfaces over WebRTC (requires Qt 5.9.2 or 5.11).

    • Newcontent.canvas_reading setting to disable reading from canvas elements.

Changed

  • The following settings now support URL patterns:

    • content.headers.do_not_track

    • content.headers.custom

    • content.headers.accept_language

    • content.headers.user_agent

    • content.ssl_strict

    • content.geolocation

    • content.notifications

    • content.media_capture

  • The Windows/macOS releases now bundle Qt 5.11.1 which is based on Chromium 65.0.3325.151 with security fixes up to Chromium 67.0.3396.87.

  • New short flags for commandline arguments:-B and-T for--basedir and--temp-basedir;-d and-D for--debug and--debug-flag.

  • Deleting history items via:history-clear or:completion-item-del now also removes that URL from QtWebEngine’s visited links.

  • There’s now completion for commands taking a variable count of arguments (like:config-cycle).

  • QtWebEngine: On Qt 5.11.1, no reloads are needed anymore when switching between pages with changed settings (e.g.content.javascript.enabled).

  • Theqt.force_software_rendering setting changed from a boolean to taking different values (software-opengl,qt-quick andchromium) for different kinds of software rendering workarounds.

  • On Qt 5.11, using wayland with QtWebEngine is now possible when using software rendering.

  • GreaseMonkey scripts now get their own global scope (based on the page’s one), which allows scripts like OneeChan to work.

  • Rapid hinting is now supported with theyank andyank-primary targets, copying newline-separated links.

  • QtWebEngine: On Qt 5.11, the developer tools (inspector) can now be used securely and without requiring the--enable-webengine-inspector option.

  • The<Enter> key (:follow-selected) now follows the currently focused element if there’s no selection.

  • The--logfilter argument now can be prepended with an exclamation mark (e.g.--logfilter '!init,destroy') to invert the filter.

  • :view-source now has a--pygments flag which uses the "old" way of rendering sources even with QtWebEngine.

  • Improved error messages when a setting needs a newer Qt version.

  • QtWebEngine: Various improvements to make the cursor more visible in caret browsing.

  • When a prompt is opened in insert/passthrough mode, the mode is restored after closing the prompt.

  • On Qt 5.10 or newer, dictionaries are now read from the qutebrowser data directory (e.g.~/.local/share/qutebrowser) instead of/usr/share/qt. Existing dictionaries are copied over.

  • If an error while parsing~/.netrc occurs, the cause of the error is now logged.

  • On Qt 5.9 or newer, certificate errors now show Chromium’s detailed error page.

  • Greasemonkey scripts now support a "@qute-js-world" tag to run them in a different JavaScript context.

Fixed

  • Various subtle keyboard focus issues.

  • The security fix in v1.3.3 caused URLs with ampersands (www.example.com?one=1&two=2) to send the wrong arguments when clicked on thequte://history page.

  • Crash when opening a PDF page with PDF.js enabled (on QtWebKit), but no PDF.js installed.

  • Crash when closing a tab shortly after opening it.

Removed

  • No prebuilt binaries for 32-bit Windows are supplied anymore. This is due to Qt removing QtWebEngine support for those upstream. It might be possible to distribute 32-bit binaries again with Qt 5.12 in December, but that will only happen if it turns out enough people actually need 32-bit support.

  • :tab-detach which has been deprecated in v1.1.0 has been removed.

  • Thecontent.developer_extras setting got removed. On QtWebKit, developer extras are now automatically enabled when opening the inspector.

v1.3.3 (2018-06-21)

Security

  • CVE-2018-1000559: An XSS vulnerability on thequte://history page allowed websites to inject HTML into the page via a crafted title tag. This could allow them to steal your browsing history. If you’re currently unable to upgrade, avoid using:history. See the related GitHub issue for details:https://github.com/qutebrowser/qutebrowser/issues/4011.

Fixed

  • Crash in a workaround for a Qt 5.11 bug in rare circumstances.

  • Workaround for a Qt bug which preserves searches between page loads.

  • In v1.3.2 a dependency on thePyQt5.QtQuickWidgets module was accidentally introduced. Since that module isn’t packaged everywhere, it’s been removed again.

v1.3.2 (2018-06-10)

Fixed

  • QtWebEngine: Improved workaround for a bug in Qt 5.11 where only the top/bottom half of the window is used.

  • QtWebEngine: Work around a bug in Qt 5.11 where an endless loading-loop is triggered when clicking a link with an unknown scheme.

  • QtWebEngine: When switching between pages with changed settings, less unnecessary reloads are done now.

  • QtWebEngine: It’s now possible to open external links such asmagnet:// ormailto: via hints.

v1.3.1 (2018-05-29)

Fixed

  • Work around a bug in Qt 5.11 where only the top/bottom half of the window is used. This workaround is incomplete, but fixes the majority of the cases where this happens.

  • Work around keyboard focus issues with Qt 5.11.

  • Work around an issue in Qt 5.11 where e.g. activating JavaScript per-domain needed a manual reload in some cases.

  • Don’t crash when a ² key is pressed (e.g. on AZERTY keyboards).

  • Don’t crash when a tab is opened and quickly closed again.

v1.3.0 (2018-05-03)

Added

  • New:scroll-to-anchor command to scroll to an anchor in the document.

  • Newurl.open_base_url option to open the base URL of a searchengine when no search term is given.

  • Newtabs.min_width setting to configure the minimal width for tabs.

  • New userscripts:

    • getbib to download bibtex information for DOIs on a page.

    • qute-keepass to get passwords from KeePassX.

Changed

  • QtWebEngine: Support for JavaScript Shared Web Workers have been disabled on Qt versions older than 5.11 because of security issues in in Chromium. You can get the same effect in earlier versions via:set qt.args ['disable-shared-workers']. An equivalent workaround is also contained in Qt 5.9.5 and 5.10.1.

  • The file dialog for downloads now has basic tab completion based on the entered text.

  • :version now shows OS information for POSIX OS other than Linux/macOS.

  • When there’s an error inserting the text from an external editor, a backup file is now saved.

  • Thewindow.hide_wayland_decoration setting got renamed towindow.hide_decoration and now also works outside of wayland.

  • Thetabs.favicons.show setting now can take three values:'always' (wasTrue),'never' (wasFalse) and'pinned' (to only show favicons for pinned tabs).

  • Hover tooltips on tabs now always show the webpage’s title.

  • The default value forcontent.host_blocking.lists was changed to only includeSteven Black’s hosts-list which combines various sources.

  • Error messages when trying to wrap whentabs.wrap isFalse are now logged to debug instead of messages.

Fixed

  • Using hints before a page is fully loaded is now possible again.

  • Selecting hints with the number keypad now works again.

  • Tab titles for tabs loaded from sessions should now really be correct instead of showing the URL.

  • Loading URLs with customized settings from a session now avoids an additional reload.

  • The window icon and title now get set correctly again.

  • Thetabs.switching_delay setting now has a correct maximum value limit set.

  • Thetaskadd script now works properly when there’s multi-line output.

  • QtWebEngine: Worked around issues with GreaseMonkey/stylesheets not being loaded correctly in some situations.

  • The statusbar now more closely reflects the caret mode state.

  • The icon on Windows should now be displayed in a higher resolution.

  • The QtWebEngine development tools (inspector) now also work when JavaScript is disabled globally.

  • Building.exe files now works whenupx is installed on the system.

  • The keyhint widget now shows the correct text for chained modifiers.

  • Loading GreaseMonkey scripts now also works with Jinja2 2.8 (e.g. on Debian Stable).

  • Adding styles with GreaseMonkey on fast sites now works properly.

  • Window ID 0 is now excluded properly from:tab-take completion.

  • A rare crash when cancelling a download has been fixed.

  • The Makefile (intended for packagers) now supportsPREFIX properly.

  • The workaround for a black window with Nvidia graphics is now enabled on non-Linux systems (like FreeBSD) as well.

  • Initial support for Qt 5.11.

  • Checking for a new version after sending a crash report now works properly again.

  • @match in Greasemonkey scripts now more closely matches the proper pattern syntax.

  • Searching via/ or? now doesn’t handle any characters in a special way.

  • Fixed crash when trying to retry some failed downloads on QtWebEngine.

  • An invalid spellcheck dictionary filename now doesn’t crash anymore.

  • When no spellcheck dictionaries are configured, it’s now disabled internally. This works around an issue with entering special characters on Facebook messenger.

  • The macOS release now should work again on macOS 10.11 and newer.

v1.2.1 (2018-03-14)

Fixed

  • qutebrowser now starts properly when the PyQt5 QOpenGLFunctions package wasn’t found.

  • The keybinding cheatsheet on the quickstart page is now loaded from a localqute:// URL again.

  • With "tox -e mkvenv-pypi", PyQt 5.10.0 is used again instead of Qt 5.10.1, because of an issue with Qt 5.10.1 which causes qutebrowser to fail to start ("Could not find QtWebEngineProcess").

  • Unbinding keys which were bound in older qutebrowser versions now doesn’t crash anymore.

  • Fixed a crash when reloading a page which wasn’t fully loaded with v1.2.0

  • Keys on the numeric keypad now fall back to the same bindings withoutNum+ if noNum+ binding was found.

  • Fixed hinting on some pages with Qt < 5.10.

  • Titles are now displayed correctly again for tabs which are cloned or loaded from sessions.

  • Shortcuts now correctly useCtrl instead ofCommand on macOS again.

v1.2.0 (2018-03-09)

Added

  • Initial implementation of per-domain settings:

    • :set and:config-cycle now have a-u/--pattern argument taking aURL match pattern for supported settings.

    • config.set inconfig.py now takes a third argument which is the pattern.

    • Newwith config.pattern('...') as p: context manager forconfig.py to use the shorthand syntax with a pattern.

    • Newtsh keybinding to toggle scripts for the current host. With a capitalS, the toggle is saved. With a capitalH, subdomains are included. Withu instead ofh, the exact current URL is used.

    • Newtph keybinding to toggle plugins, with the same additional binding described above.

  • New QtWebEngine features:

    • Caret/visual mode

    • Authentication via ~/.netrc

    • Retrying downloads with Qt 5.10 or newer

    • Hinting and other features inside same-origin frames

  • New flags for existing commands:

    • :session-load has a new--delete flag which deletes the session after loading it.

    • New--no-last flag for:tab-focus to not focus the last tab when focusing the currently focused one.

    • New--edit flag for:view-source to open the source in an external editor.

    • New--select flag for:follow-hint which acts like the given string was entered but doesn’t necessary follow the hint.

  • New special pages:

    • qute://bindings (opened via:bind) which shows all keybindings.

    • qute://tabs (opened via:buffer) which lists all tabs.

  • New settings:

    • statusbar.widgets to configure which widgets should be shown in which order in the statusbar.

    • tabs.mode_on_change which replacestabs.persist_mode_on_change. It can now be set torestore which remembers input modes (input/passthrough) per tab.

    • input.insert_mode.auto_enter which makes it possible to disable entering insert mode automatically when an editable element was clicked. Together withinput.forward_unbound_keys, this should allow for emacs-like "modeless" keybindings.

  • New:prompt-yank command (bound toAlt-y by default) to yank URLs referenced in prompts.

  • Thehostblock_blame script which was removed in v1.0 was updated for the new config and re-added.

  • Newcycle-inputs.js script inscripts/ which can be used with:jseval -f to cycle through inputs.

Changed

  • Complete refactoring of key input handling, with various effects:

    • emacs-like keychains such as<Ctrl-X><Ctrl-C> can now be bound.

    • Key chains can now be bound in any mode (this allows binding unused keys in hint mode).

    • Yes/no prompts don’t use keybindings from theprompt section anymore, they have their ownyesno section instead.

    • Trying to bind invalid keys now shows an error.

    • Thebindings.default setting can now only be set in aconfig.py, and existing values inautoconfig.yml are ignored.

  • Improvements for GreaseMonkey support:

    • @include and@exclude now support regex matches. With QtWebEngine and Qt 5.8 and newer, Qt handles the matching, but similar functionality will be added in Qt 5.11.

    • Support for@requires

    • Support for the GreaseMonkey 4.0 API

  • The sqlite history now uses write-ahead logging which should be a performance and stability improvement.

  • When an editor is spawned with:open-editor and:config-edit, the changes are now applied as soon as the file is saved in the editor.

  • Thehist_importer.py script now only imports URL schemes qutebrowser can handle.

  • Deleting a prefix (:,/ or?) via backspace now leaves command mode.

  • Angular 1 elements and<summary>/<details> now get hints assigned.

  • :tab-only with pinned tabs now still closes unpinned tabs.

  • Theurl.incdec_segments option now also can takeport as possible segment.

  • QtWebEngine::view-source now uses Chromium’sview-source: scheme.

  • Tabs now show their full title as tooltip.

  • When there are multiple unknown keys in a autoconfig.yml, they now all get reported in one error.

  • More performance improvements when opening/closing many tabs.

  • The:version page now has a button to pastebin the information.

  • Replacements like{url} can now be escaped as{{url}}.

Fixed

  • QtWebEngine bugfixes:

    • Improved fullscreen handling with Qt 5.10.

    • Hinting and scrolling now works properly on specialview-source: pages.

    • Scroll positions are now restored correctly from sessions.

    • :follow-selected should now work in more cases with Qt > 5.10.

    • Incremental search now flickers less and doesn’t move to the second result when pressing Enter.

    • Keys likeCtrl-V orShift-Insert are now correctly handled/filtered with Qt 5.10.

    • Fixed hangs/segfaults on exit with Qt 5.10.1.

    • Fixed favicons sometimes getting cleared with Qt 5.10.

    • Qt download objects are now cleaned up properly when a download is removed.

    • JavaScript messages are now not double-HTML escaped anymore on Qt < 5.11

  • QtWebKit bugfixes:

    • Fixed GreaseMonkey-related crashes.

    • :view-source now displays a valid URL.

  • URLs containing ampersands and other special chars are now shown correctly when filtering them in the completion.

  • :bookmark-add "" foo can now be used to save the current URL with a custom title.

  • :spawn -o now waits until the process has finished before trying to show the output. Previously, it incorrectly showed the previous output immediately.

  • Suspended pages now should always load the correct page when being un-suspended.

  • Exception types are now shown properly with:config-source and:config-edit.

  • When using:bookmark-add --toggle, bookmarks are now saved properly.

  • Crash when opening an invalid URL from an application on macOS.

  • Crash with an emptycompletion.timestamp_format.

  • Crash whencompletion.min_chars is set in some cases.

  • HTML/JS resource files are now read into RAM on start to avoid crashes when changing qutebrowser versions while it’s open.

  • Settingbindings.key_mappings to an empty value is now allowed.

  • Bindings to an empty commands are now ignored rather than crashing.

Removed

  • QUTE_SELECTED_HTML is now not set for userscripts anymore except when called via hints.

  • Thequtebrowser_viewsource userscript has been removed as:view-source --edit can now be used.

  • Thetabs.persist_mode_on_change setting has been removed and replaced bytabs.mode_on_change.

v1.1.2 (2018-03-01)

Changed

  • Windows/macOS releases now bundle Qt 5.10.1 which includes security fixes from Chromium up to version 64.0.3282.140.

Fixed

  • QtWebEngine: Crash with Qt 5.10.1 when using :undo on some tabs.

  • Compatibility with Python 3.7

v1.1.1 (2018-01-20)

Fixed

  • The Makefile now actually works.

  • Fixed crashes with Qt 5.10 when closing a tab before it finished loading.

v1.1.0 (2018-01-15)

Added

  • Initial support for Greasemonkey scripts. There are still some rough edges, but many scripts should already work.

  • There’s now amisc/Makefile file in releases, which should help distributions which package qutebrowser, as they can run something likemake -f misc/Makefile DESTDIR="$pkgdir" install now.

  • New fields forwindow.title_format andtabs.title.format:

    • {current_url}

    • {protocol}

  • New settings:

    • colors.statusbar.passthrough.fg/.bg

    • completion.delay andcompletion.min_chars to update the completion less often.

    • completion.use_best_match to automatically use the best-matching command in the completion.

    • keyhint.radius to configure the edge rounding for the key hint widget.

    • qt.highdpi to turn on Qt’s High-DPI scaling.

    • tabs.pinned.shrink (true by default) to make it possible for pinned tabs and normal tabs to have the same size.

    • content.windowed_fullscreen to show e.g. a fullscreened video in the window without fullscreening that window.

    • tabs.persist_mode_on_change to keep the current mode when switching tabs.

    • session.lazy_restore which allows to not load pages immediately when restoring a session.

  • New commands:

    • :tab-give and:tab-take, to give tabs to another window, or take them from another window.

    • :completion-item-yank (bound to<Ctrl-C>) to yank the current completion item text.

    • :edit-command to edit the commandline in an editor.

    • search.incremental for incremental text search.

  • New flags for existing commands:

    • -o flag for:spawn to show stdout/stderr in a new tab.

    • --rapid flag for:command-accept (bound toCtrl-Enter by default), which allows executing a command in the completion without closing it.

    • --private and--related flags for:edit-url, which have the same effect they have with:open.

    • --history for:completion-item-focus which causes it to go through the command history when no text was entered. The default bindings for cursor keys in the completion changed to use that, so that they can be used again to navigate through completion items when a text was entered.

    • --file for:debug-pyeval which makes it take a filename instead of a line of code.

  • Newconfig.source(...) method forconfig.py to source another file.

  • New{line} and{column} replacements foreditor.command to position the cursor correctly.

  • Newqute-pass userscript as alternative topassword_fill which allows selecting accounts via rofi or any other dmenu-compatile application.

  • Newhist_importer.py script to import history from Firefox/Chromium.

Changed

  • Some settings got renamed:

    • tabs.width.bartabs.width

    • tabs.width.indicatortabs.indicator.width

    • tabs.indicator_paddingtabs.indicator.padding

    • session_default_namesession.default_name

    • ignore_casesearch.ignore_case

  • Much improved user stylesheet handling for QtWebEngine which reduces flickering and updates immediately after setting a stylesheet.

  • High-DPI favicons are now used when available.

  • Theasciidoc2html.py script now uses Pygments (which is already a dependency of qutebrowser) instead ofsource-highlight for syntax highlighting.

  • The:buffer command now doesn’t require quoting anymore, similar to:open.

  • The ‘importer.py` script was largely rewritten and now also supports importing from Firefox’places.sqlite file and Chrome/Chromium profiles.

  • Various internal refactorings to use Python 3.5 and ECMAscript 6 features.

  • If thewindow.hide_wayland_decoration setting is False, butQT_WAYLAND_DISABLE_WINDOWDECORATION is set in the environment, the decorations are still hidden.

  • Theinstall_dict.py script for QtWebEngine was renamed todictcli.py and can now also upgrade dictionaries correctly.

  • :undo now can re-open multiple tabs after:tab-only was used.

  • :config-write-py with a relative path now puts the file into the config directory.

  • Thequte://version page now also shows the uptime of qutebrowser.

  • qutebrowser now prompts to create a non-existing directory when starting a download.

  • :jseval --file now searches relative paths in ajs/ subdir in qutebrowser’s data dir, e.g.~/.local/share/qutebrowser/js.

  • The current/default bindings are now shown in the ``:bind` completion.

  • Empty categories are now hidden in the:open completion.

  • Search terms for URLs and titles can now be mixed when filtering the completion.

  • The default font size for the UI got bumped up from 8pt to 10pt.

  • Improved matching in the completion: The words entered are now matched in any order, and mixed matches on URL/tite are possible.

  • The system’s default encoding (rather than UTF-8) is now used to decode subprocess output.

  • qutebrowser now ensures it’s focused again after an external editor is closed.

  • Thecolors.completion.fg setting can now be a list, allowing to specify different colors for the three completion columns.

Fixed

  • More consistent sizing for favicons with vertical tabs.

  • Using:home on pinned tabs is now prevented.

  • Fix crash with unknown file types loaded viaqute://help.

  • Scrolling performance improvements.

  • Sites likequte://help now redirect toqute://help/ to make sure links work properly.

  • Fixes for the size calculation of pinned tabs in the tab bar.

  • Worked around a crash with PyQt 5.9.1 compiled against Qt < 5.9.1 when using:yank orqute:// URLs.

  • Fixed crash when openingqute://help/img.

  • FixedgU (:navigate up) onqute://help and webservers not handling.. in a URL.

  • Using e.g.-s backend webkit to set the backend now works correctly.

  • Fixed crash when closing the tab an external editor was opened in.

  • When using:search-next before a search is finished, no warning about no results being found is shown anymore.

  • Fix:click-element with an ID containing non-alphanumeric characters.

  • Fix crash when a subprocess outputs data which is not decodable as UTF-8.

  • Fix crash when closing a tab immediately after hinting.

  • Worked around issues in Qt 5.10 with loading progress never being finished.

  • Fixed a crash when writing a flag before a command (e.g. `:-w open `).

  • Fixed a crash when clicking certain form elements with QtWebEngine.

Deprecated

  • :tab-detach has been deprecated, as:tab-give without argument can be used instead.

Removed

  • The long-deprecated:prompt-yes,:prompt-no,:paste-primary and:paste commands have been removed.

  • The invocation:download <url> <dest> which was deprecated in v0.5.0 was removed, use:download --dest <dest> <url> instead.

  • Themessages.unfocused option which wasn’t used anymore was removed.

  • Thex[xtb] default bindings got removed again as many users accidentally triggered them.

v1.0.4 (2017-11-28)

Fixed

  • Thequte://gpl page now works correctly again.

  • Trying to bind an empty command now doesn’t crash anymore.

  • Fixed crash when:config-write-py fails to write to the given path.

  • Fixed crash for some users when selecting a file with Qt 5.9.3

  • Improved handling for various SQL errors

  • Fix crash when setting content.cache.size to a big value (> 2 GB)

v1.0.3 (2017-11-04)

Changed

  • macOS and Windows builds are now built with PyQt 5.9.1 and Qt 5.9.2, including various bugfixes, as well as security fixes from Chromium up to version 61.0.3163.79.

  • Performance improvements for tab rendering.

  • The :open-editor command is now not hidden anymore as it’s also usable in normal mode.

Fixed

  • Handle accessing a locked sqlite database gracefully

  • Abort pinned tab dialogs properly when a tab is closed e.g. by closing a window

  • Unbinding a default keybinding twice now doesn’t bind it again

  • Completions are now sorted correctly again when filtered

v1.0.2 (2017-10-17)

Fixed

  • Fix workaround for black screens or crashes with Nvidia cards

  • Handle a filesystem going read-only gracefully

  • Fix crash when settingfonts.monospace

  • Fix list options not being modifiable via.append() inconfig.py

  • Mark the content.notifications setting as QtWebKit only correctly

  • Fix wrong rendering of keys like<back> in the completion

Changed

  • Nicer error messages and other minor improvements

v1.0.1 (2017-10-13)

Fixed

  • Fixed starting after customizingfonts.tabs orfonts.debug_console.

  • Fixed starting with old PyQt versions compiled against newer Qt versions.

  • Fixed check for PyQt version to correctly enforce 5.7 (not 5.2).

v1.0.0 (2017-10-12)

Major changes

  • Dependency changes:

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

    • Support for Python 3.4 is dropped.

    • Support for Qt before 5.7.1 and PyQt before 5.7 is dropped.

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

    • New dependency on theattrs project (packaged aspython-attr in some distributions).

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

    • PyQt5.QtOpenGL is now always required, even with QtWebKit.

  • The QtWebEngine backend is now used by default. Note this means that QtWebEngine now should be a required dependency, and QtWebKit (if new enough) should be changed to an optional dependency.

  • Completely rewritten configuration system which ignores the old config file. Seequte://help/configuring.html for details.

  • Various documentation files got moved to the doc/ subfolder;qutebrowser.desktop got moved to misc/.

  • :set now doesn’t support toggling/cycling values anymore, that functionality got moved to:config-cycle.

  • New completion engine based on sqlite, which allows to complete the entire browsing history. The default forcompletion.web_history_max_items got changed to-1 (unlimited). If the completion is too slow on your machine, try setting it to a few 1000 items.

  • Up/Down now navigates through the command history instead of selecting completion items. Either use Tab to cycle through the completion, orrestore the old behavior.

Added

  • QtWebEngine: Spell checking support, see thespellcheck.languages setting.

  • Newqt.args setting to pass additional arguments to Qt/Chromium.

  • Newbackend setting to select the backend to use. Together with the previous setting, this should make most wrapper scripts unnecessary.

  • qutebrowser can now be set as the default browser on macOS.

  • New config commands:

    • :config-cycle to cycle an option between multiple values.

    • :config-unset to remove a configured option.

    • :config-clear to remove all configured options.

    • :config-source to (re-)read aconfig.py file.

    • :config-edit to open theconfig.py file in an editor.

    • :config-write-py to write aconfig.py template file.

  • New:version command which opensqute://version.

  • New back/forward indicator in the statusbar.

  • Newbindings.key_mappings setting to map keys to other keys.

  • QtWebEngine: Support for proxy authentication.

Changed

  • 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.

  • Pinned tabs now adjust to their text’s width, so thetabs.width.pinned setting got removed.

  • :set-cmd-text now has a--run-on-count argument to run the underlying command directly if a count was given.

  • :scroll-perc got renamed to:scroll-to-perc.

Removed

  • Migrating QtWebEngine data written by versions before 2016-11-15 (before v0.9.0) is now not supported anymore.

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

  • The--harfbuzz and--relaxed-config commandline arguments got dropped.

Fixes

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

  • Wheninput.insert_mode.auto_load is set, background tabs now don’t enter insert mode anymore.

  • The keybinding help widget now works correctly when using keybindings with a count.

  • Thewindow.hide_wayland_decoration setting now works correctly again.

v0.11.1 (2017-10-09)

Fixes

  • 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.

v0.11.0 (2017-07-04)

New dependencies

  • New dependency onPyQt5.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 onPyOpenGL if QtWebEngine is used.

Added

  • Private browsing is now implemented for QtWebEngine,and changed its behavior: Thegeneral -> 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.

  • Newui -> 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 acceptsnone as an argument to clear any log filters.

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

  • Newtabs -> 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] forui -> window-title-format andtabs -> title-format.

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

Changed

  • 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

  • Improvedqute://history page (with lazy loading)

  • Crash reports are not public anymore.

  • Paths likeC: 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.

  • Whenui -> 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).

  • #"explicit" anymore, i.e. (with the default settings) open it next to the active tab.

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

  • Texts in prompts are now selectable.

  • The default level for:messages is nowinfo, noterror

  • 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.

Fixed

  • 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 styles inqt5ct 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.

v0.10.1 (2017-03-08)

Changed

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

Fixed

  • 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

v0.10.0 (2017-02-25)

Added

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

  • Newripbang 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

    • Thegeneral -> print-element-backgrounds option with Qt >= 5.8

    • Thecontent -> cookies-store option

    • Thestorage -> cache-size option

    • Thecolors -> webpage.bg option

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

    • :download --mhtml

  • Newqute: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

Changed

  • 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 topac+file://... now to use a local proxy autoconfig file (on QtWebKit)

Removed

  • (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 intostorage -> local-storage)

Fixed

  • 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 detectsrel attributes on<a> elements, and handles multiplerel attributes correctly

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

  • Lines in Jupyter notebook now trigger insert mode

v0.9.1 (2017-01-13)

Fixed

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

v0.9.0 (2016-12-28)

Added

  • 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’sunix-filename-rubout.

  • Newfonts -> 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).

  • Newhide-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.

  • Newprev-category andnext-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.

  • Newgeneral -> yank-ignored-url-parameters option to configure which URL parameters (likeutm_source etc.) to strip off when yanking a URL.

  • Support for theHTML5 page visibility API

  • Newreadability userscript which shows a readable version of a page (using thereadability-lxml python package)

  • Newcast 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.

  • Newui -> hide-scrollbar setting to hide the scrollbar independently of theuser-stylesheet setting.

  • Newgeneral -> 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

Changed

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

    • Thehints -> opacity setting does not exist anymore, but you can usergba(r, g, b, alpha) colors instead forcolors -> hints.bg.

    • Thehints -> font setting is not affected byfonts -> web-family-fixed anymore. Thus, a transformer got added to changeMonospace to${_monospace}.

    • Gradients in hint colors can now be configured by usingqlineargradient 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 stylingqutehint elements inuser-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 optionalcmdline 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 thehints -> mode setting.

  • Withnew-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 newnew-instance-open-target.window setting. It can also be set tolast-visible to show the pages in the most recently visible window, orfirst-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 forup/increment/decrement.

  • Thehints -> auto-follow setting now can be set toalways/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.

  • Thecompletion -> show setting can now be set toalways,auto ornever.

  • :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 tojavascript-can-open-windows-automatically.

  • :prompt-accept now optionally accepts a value which overrides the one entered in the input box.yes andno 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 fromstatusbar.fg.error)

    • colors -> messages.bg.error (renamed fromstatusbar.bg.error)

    • colors -> messages.border.error

    • colors -> messages.fg.warning (renamed fromstatusbar.fg.warning)

    • colors -> messages.bg.warning (renamed fromstatusbar.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

  • Thequte:settings page now also shows option descriptions.

  • qute:version andqutebrowser --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 takingleft/right/previous arguments now takeprev/next/last-used to remove ambiguity.

  • Theui -> 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 opensdefault-page without a URL even without-t/-b/-w given.

Deprecated

  • 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.

Removed

  • 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.

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

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

  • Thecompletion -> auto-open setting got merged intocompletion -> 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.

Fixed

  • :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

v0.8.3 (2016-11-05)

Fixed

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

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

  • Fixed crash when settinggeneral -> 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 editingkeys.conf already worked before)

  • The command completion now updates correctly when changing aliases

  • The tabbar now displays correctly with the Adwaita Qt theme

  • The defaultsk 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

v0.8.2 (2016-08-02)

Fixed

  • Fixedgeneral -> 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. withLC_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.

v0.8.1 (2016-07-27)

Fixed

  • 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

v0.8.0 (2016-07-26)

Added

  • 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.

  • Newqute:bookmarks page which displays all bookmarks and quickmarks.

  • New:prompt-open-download (bound toCtrl-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 optionuistatus-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.

Changed

  • :scroll-perc now prefers a count over the argument given to it, which meansgg 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.

  • Newtaskadd 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.

Fixed

  • 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.

Removed

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

  • Thegeneral -> wrap-search setting as searches now always wrap. According to a quick straw poll and prior crash logs, almost nobody is usingwrap-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.

v0.7.0 (2016-06-10)

Added

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

  • Newnetwork -> 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 *.

  • Newhints -> 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

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

  • Newinputs group for:hint to hint text input fields.

Changed

  • 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 withtabs-are-windows set.

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

  • The optionalcolorlog 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 thenormal 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

  • 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 whensys.stderr isNone

  • 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

  • FixedFileNotFoundError when starting in some cases on old Qt versions

  • Fixed sharing of cookies between tabs whenprivate-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

v0.6.2 (2016-04-30)

Fixed

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

  • Fixed crash when doing:undo in a new instance withtabs -> last-close set todefault-page.

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

  • Fixed crash in some circumstances when using dictionary hints

  • Fixed various crashes related to PyQt 5.6

v0.6.1 (2016-04-10)

Fixed

  • 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

v0.6.0 (2016-04-04)

Added

  • 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 thegt/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 modeword forhints -> 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.

  • Newpassword_fill userscript to fill passwords using thepass executable.

  • Newcurrent hinting mode which forces opening hints in the current tab (even withtarget="_blank")

Changed

  • 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 openvim viatermite)

  • 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 removequtebrowser-editor-* temporary file if editor subprocess crashed

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

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

Fixed

  • 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 inhints -> 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 downloadingdata://-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 delayedremove-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.

Removed

  • Thegt/gT bindings (luakit-like alternatives toJ/K) were removed (except for existing configs) to make room for thegt binding to show buffers.

v0.5.1 (2016-01-18)

Fixed

  • 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.

v0.5.0 (2016-01-05)

Added

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

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

  • New userscripts inmisc/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 anddmenu_qutebrowser to select URLs via dmenu

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

  • {scroll_pos} can now be used inui -> window-title-format andtabs -> title-format.

  • New settinggeneral -> 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 settingstatusbar.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 valuenone 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 resources as MHTML file.

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

Changed

  • Thecolors -> tabs.bg/fg.selected option got split intotabs.bg/fg.selected.odd/even.

  • :spawn --userscript and:hint with theuserscript target now look up relative paths in~/.local/share/qutebrowser/userscripts or$XDG_DATA_HOME. 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.

  • Theui -> 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 logVDEBUG 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 iftabs -> wrap istrue.

  • 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.

Deprecated

  • :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.

Removed

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

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

  • Therapid andrapid-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

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

  • Fixed displaying of web history ifweb-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 pressingCtrl-D.

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

  • Fixed prompting for download directory whenstorage -> 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 withforward-unbound-keys set toauto.

  • Fixed restarting after a crash is reported.

  • Removed.pyc files accidentally contained in source releases.

v0.4.1 (2015-09-30)

Fixed

  • 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.

  • Thecompletion -> 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 variousPendingDeprecationWarnings shown with Python 3.5.

v0.4.0 (2015-09-11)

Added

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

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

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

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

  • New settingstabs -> padding andtabs -> indicator-tabbing to control the size/padding of the tabbar.

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

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

  • New settingtabs -> show which supersedes the oldtabs -> hide-* options and has an additionalswitching option which shows tab while switching them. There’s also a newshow-switching option to configure the timeout.

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

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

  • Rapid hinting is now also possible for downloads.

  • Directory browsing viafile:// is now supported.

Changed

  • Some developer scripts got moved toscripts/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 fortabs -> position andui -> downloads-position got changed fromnorth/south/west/`east totop/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

  • 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.

Removed

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

  • Thetabs -> hide-always andtabs -> hide-auto settings got merged into the newtabs -> show setting.

v0.3.0 (2015-06-28)

Added

  • 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 toEnter/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 settingui -> smooth-scrolling.

  • New settingcontent -> webgl to enable/disableWebGL.

  • New settingcontent -> css-regions to enable/disable support forCSS Regions.

  • New settingcontent -> hyperlink-auditing to enable/disable support forhyperlink auditing.

  • New settingtabs -> 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 information when the process started/exited successfully.

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

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

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

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

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

  • There are now some example userscripts inmisc/userscripts.

  • Support for Qt 5.5 and tox 2.0

Changed

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

  • Thecontent -> geolocation andnotifications settings now support atrue value to always allow those. However, this isnot 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 andF now respect thebackground-tabs setting. To enforce a foreground tab (whatF 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.

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

  • Thecontent -> cookies-accept setting now has newno-3rdparty (default) andno-unknown-3rdparty values to block third-party cookies. Thedefault value got renamed toall.

  • 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 thenew-instance-open-target setting has been changed totab.

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

Deprecated

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

Removed

  • 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.

Fixed

  • Scrolling should now work more reliably on some pages where arrow keys worked buthjkl 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 theshrink option was set.

  • Sessions now store zoom/scroll-position correctly.

v0.2.1 (2015-04-19)

Fixed

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

v0.2.0 (2015-04-19)

Added

  • 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 settinggeneral -> save-session to always save the session on quit.

    • new settinggeneral -> 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 newcd keybinding can be used to clear all finished downloads.

  • History completion

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

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

    • The optioncompletion -> history-length for the command history got renamed tocmd-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 thegeneral -> auto-save-interval option).

  • Opera-like mouse rocker gestures

    • New optioninput -> 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.

  • Pass more information (QUTE_MODE,QUTE_SELECTED_TEXT,QUTE_SELECTED_HTML,QUTE_USER_AGENT,QUTE_HTML,QUTE_TEXT) to userscripts.

  • 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 optioncontent -> geolocation to permanently turn the geolocation off.

    • New optioncontent -> 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 optiongeneral -> default-page to set the page to be opened when doing that.

  • Newinput -> partial-timeout option to clear partial keystrings.

  • New optioncompletion -> 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 optionui -> 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 optioninput -> 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 valuestab-bg/tab-bg-silent fornew-instance-open-target to open a background tab.

  • Newui -> downloads-position setting to move the downloads to the bottom.

  • Newui -> 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. Therapid/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 setWM_CLASS.

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

Changed

  • 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 re-added 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 usingQSocketNotifier.

  • Add luakit-likegt/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.

  • Addstartpage/default-page values totabs -> 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 andrun_checks.py have been replaced bytox. Install tox and runtox -e mkvenv instead.

    • The tests now usepytest

    • Many new tests added

    • Mac Mini buildbot to run the tests on macOS.

    • Coverage recording viacoverage.py.

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

    • Usehunter for line tracing instead of a selfmade solution.

Deprecated

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

  • Therapid andrapid-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.

Removed

  • init_venv.py andrun_checks.py have been replaced bytox. Install tox and runtox -e mkvenv instead..

Fixed

  • 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.

v0.1.4 (2015-03-19)

Changed

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

  • Improvements to CPU usage when idle.

  • Ensure there’s no size forfont-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 offaulthandler logs.

Removed

  • Remove default search engines.

  • Remove debug console completing completely.

Fixed

  • Ignore RuntimeError inmouserelease_insertmode.

  • Hide Qt warning when aborting download reply.

  • Hide "Error while shutting down tabs" message.

  • Clear open target inacceptNavigationRequest.

  • Fix handling of signals with deleted tabs.

  • Restoresys.std* inutils.fake_io on exceptions.

  • Allow font names with integers in them.

  • FixQIODevice warnings when closing tabs.

  • Set theQSettings 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.

Security

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

  • Disable insecure SSL ciphers.

v0.1.3 (2015-02-12)

Changed

  • Various small logging improvements.

  • Don’t open relative files infuzzy_url with:open

  • Various crashdialog improvements.

  • Hide adblocked iframes.

Fixed

  • Handle shutdown of page with prompt correctly.

  • fuzzy_url: handle invalid URLs with autosearch off

  • Handle explicit searches withauto-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 upNetworkManager after downloads finished.

  • Fix restoring of cmd widget after an error.

  • Fix retrying of downloads after the tab is closed.

  • Fixcheck_libraries() output for Arch Linux.

  • Handle allIPCErrors properly.

  • Handle anotherwebelem.IsNullError with hints.

  • HandleUnicodeDecodeError when reading configs.

Security

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

v0.1.2 (2015-01-09)

Changed

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

  • Add SSL info to version info.

Removed

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

Fixed

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

  • Fix exception with certain invalid URLs likehttp: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

  • Makeinit_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 invalidShellCommand config values.

  • Replace unencodable chars

  • Fix user-stylesheet setting with an empty value.

v0.1.1 (2014-12-28)

Added

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

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

  • Add anetwork -> proxy-dns-requests option.

  • Add "Remove finished" to the download context menu

  • Open and remove clicked downloads.

Changes

  • 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.

Removed

  • Clean up and temporarily disable alias completion.

Fixed

  • Fix setting ofQWebSettings (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.

  • FixAttributeError on config changes on Ubuntu.

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

  • Handle category beingNone in Qt message handler.

  • Force-include pygments infreeze.py.

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

  • EncodeContent-Disposition header name properly.

  • Fix item sorting inNeighborList.

  • Handle data beingNone in download read timer.

  • Stop download read timer when reply has finished.

  • Fix handling of small/bigfuzzyval's inNeighborList.

  • Fix crashes when entering invalid values inqute:settings.

  • Abort questions inNetworkManager when destroyed.

  • Fix height calculation of download view.

  • Always auto-remove adblock downloads when done.

  • Ensure the docs get included infreeze.py.

  • Fix crash with:zoom.

v0.1 (2014-12-14)

Initial release.


Last updated 2026-02-20 00:23:24 CET

[8]ページ先頭

©2009-2026 Movatter.jp