All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning, though minor breaking changes (such as renamed commands) can happen in minor releases.
-
New
:scroll-to-anchor
command to scroll to an anchor in the document. -
New
url.open_base_url
option to open the base URL of a searchengine when no search term is given. -
New
tabs.min_width
setting to configure the minimal width for tabs. -
New
getbib
userscript to download bibtex information for DOIs on a page.
-
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.
-
The
window.hide_wayland_decoration
setting got renamed towindow.hide_decoration
and now also works outside of wayland. -
The
tabs.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 for
content.host_blocking.lists
was changed to only include Steven Black’s hosts-list which combines various sources. -
Error messages when trying to wrap when
tabs.wrap
isFalse
are now logged to debug instead of messages.
-
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.
-
The
tabs.switching_delay
setting now has a correct maximum value limit set. -
The
taskadd
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 supports
PREFIX
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
-
qutebrowser now starts properly when the PyQt5 QOpenGLFunctions package wasn’t found.
-
The keybinding cheatsheet on the quickstart page is now loaded from a local
qute://
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 without
Num+
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 use
Ctrl
instead ofCommand
on macOS again.
-
Initial implementation of per-domain settings:
-
:set
and:config-cycle
now have a-u
/--pattern
argument taking a URL match pattern for supported settings. -
config.set
inconfig.py
now takes a third argument which is the pattern. -
New
with config.pattern('...') as p:
context manager forconfig.py
to use the shorthand syntax with a pattern. -
New
tsh
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. -
New
tph
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. -
The
hostblock_blame
script which was removed in v1.0 was updated for the new config and re-added. -
New
cycle-inputs.js
script inscripts/
which can be used with:jseval -f
to cycle through inputs.
-
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 the
prompt
section anymore, they have their ownyesno
section instead. -
Trying to bind invalid keys now shows an error.
-
The
bindings.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. -
The
hist_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. -
The
url.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}}
.
-
QtWebEngine bugfixes:
-
Improved fullscreen handling with Qt 5.10.
-
Hinting and scrolling now works properly on special
view-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 like
Ctrl-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 empty
completion.timestamp_format
. -
Crash when
completion.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.
-
Setting
bindings.key_mappings
to an empty value is now allowed. -
Bindings to an empty commands are now ignored rather than crashing.
-
Initial support for Greasemonkey scripts. There are still some rough edges, but many scripts should already work.
-
There’s now a
misc/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 for
window.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.
-
-
New
config.source(...)
method forconfig.py
to source another file. -
New
{line}
and{column}
replacements foreditor.command
to position the cursor correctly. -
New
qute-pass
userscript as alternative topassword_fill
which allows selecting accounts via rofi or any other dmenu-compatile application. -
New
hist_importer.py
script to import history from Firefox/Chromium.
-
Some settings got renamed:
-
tabs.width.bar
→tabs.width
-
tabs.width.indicator
→tabs.indicator.width
-
tabs.indicator_padding
→tabs.indicator.padding
-
session_default_name
→session.default_name
-
ignore_case
→search.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.
-
The
asciidoc2html.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 the
window.hide_wayland_decoration
setting is False, butQT_WAYLAND_DISABLE_WINDOWDECORATION
is set in the environment, the decorations are still hidden. -
The
install_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. -
The
qute://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.
-
The
colors.completion.fg
setting can now be a list, allowing to specify different colors for the three completion columns.
-
More consistent sizing for favicons with vertical tabs.
-
Using
:home
on pinned tabs is now prevented. -
Fix crash with unknown file types loaded via
qute://help
. -
Scrolling performance improvements.
-
Sites like
qute://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 opening
qute://help/img
. -
Fixed
gU
(: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.
-
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. -
The
messages.unfocused
option which wasn’t used anymore was removed. -
The
x[xtb]
default bindings got removed again as many users accidentally triggered them.
-
The
qute://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)
-
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.
-
Fix workaround for black screens or crashes with Nvidia cards
-
Handle a filesystem going read-only gracefully
-
Fix crash when setting
fonts.monospace
-
Fix list options not being modifyable via
.append()
inconfig.py
-
Mark the content.notifications setting as QtWebKit only correctly
-
Fix wrong rendering of keys like
<back>
in the completion
-
Dependency changes:
-
Support for legacy QtWebKit (before 5.212 which is distributed independently from Qt) is dropped.
-
Support for Python 3.4 is dropped.
-
Support for Qt before 5.7.1 and PyQt before 5.7 is dropped.
-
New dependency on the QtSql module and Qt sqlite support.
-
New dependency on the attrs project (packaged as
python-attr
in some distributions). -
The depedency 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. See qute://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 for
completion.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, or restore the old behavior.
-
QtWebEngine: Spell checking support, see the
spellcheck.languages
setting. -
New
qt.args
setting to pass additional arguments to Qt/Chromium. -
New
backend
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.
-
New
bindings.key_mappings
setting to map keys to other keys. -
QtWebEngine: Support for proxy authentication.
-
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 the
tabs.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
.
-
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.
-
Exiting fullscreen via
:fullscreen
or buttons on a page now restores the correct previous window state (maximized/fullscreen). -
When
input.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.
-
The
window.hide_wayland_decoration
setting now works correctly again.
-
Fixed empty space being shown after tabs in the tabbar in some cases.
-
Fixed
:restart
in private browsing mode. -
Fixed printing on macOS.
-
Closing a pinned tab via mouse now also prompts for confirmation.
-
The "try again" button on error pages works correctly again.
-
:spawn -u -d is now disallowed.
-
:spawn -d shows error messages correctly now.
-
New dependency on
PyQt5.QtOpenGL
if QtWebEngine is used. QtWebEngine depends on QtOpenGL already, but on distributions packaging split PyQt5 wrappers, the wrappers for QtOpenGL are now required. -
New dependency on
PyOpenGL
if QtWebEngine is used.
-
Private browsing is now implemented for QtWebEngine, and changed its behavior: The
general -> private-browsing
setting now only applies to newly opened windows, and you can use the-p
flag to:open
to open a private window. -
New "pinned tabs" feature, with a new
:tab-pin
command (bound to<Ctrl-p>
by default). -
(QtWebEngine) Implemented
:follow-selected
. -
New
:clear-messages
command to clear shown messages. -
New
ui -> keyhint-delay
setting to configure the delay until the keyhint overlay pops up. -
New
-s
option for:open
to force a HTTPS scheme. -
:debug-log-filter
now acceptsnone
as an argument to clear any log filters. -
New
--debug-flag
argument which replaces--debug-exit
and--pdb-postmortem
. -
New
tabs -> favicon-scale
option to scale up/down favicons. -
colors -> statusbar.bg/fg.private
and.command.private
to customize statusbar colors for private windows. -
New
{private}
field displaying[Private Mode]
forui -> window-title-format
andtabs -> title-format
. -
(QtWebEngine) Proxy support with Qt 5.7.1 (already was supported for 5.8 and newer)
-
To prevent elaborate phishing attacks, the Punycode version (
xn--*
) is now shown in addition to the decoded version for international domain names (IDN). -
Starting with legacy QtWebKit now shows a warning message. With the next release, support for it will be removed.
-
The Windows releases are redone from scratch, which means:
-
They now use the new QtWebEngine backend
-
The bundled Qt is updated from 5.5 to 5.9
-
The bundled Python is updated from 3.4 to 3.6
-
They are now generated with PyInstaller instead of cx_Freeze
-
The installer is now generated using NSIS instead of being a MSI
-
-
Improved
qute://history
page (with lazy loading) -
Crash reports are not public anymore.
-
Paths like
C:
are now treated as absolute paths on Windows for downloads, and invalid paths are handled properly. -
Comments in the config file are now placed before the individual options instead of being before sections.
-
Messages are now hidden when clicked.
-
stdin is now closed immediately for processes spawned from qutebrowser.
-
When
ui -> message-timeout
is set to 0, messages are now never cleared. -
Middle/right-clicking the blank parts of the tab bar (when vertical) now closes the current tab.
-
The adblocker now also blocks non-GET requests (e.g. POST).
-
javascript:
links can now be hinted. -
:view-source
,:tab-clone
and:navigate --tab
now don’t open the tab as "explicit" anymore, i.e. (with the default settings) open it next to the active tab. -
qute:*
pages now 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.
-
The macOS .dmg is now built against Qt 5.9 which fixes various important issues (such as not being able to type dead keys).
-
Fixed crash with
:download
on PyQt 5.9. -
Cloning a page without history doesn’t crash anymore.
-
When a download results in a HTTP error, it now shows the error correctly instead of crashing.
-
Pressing ctrl-c while a config error is shown works as intended now.
-
When the key config isn’t writable, we now show an error instead of crashing.
-
Fixed crash when unbinding an unbound key in the key config.
-
Fixed crash when using
:debug-log-filter
when--filter
wasn’t given on startup. -
Fixed crash with some invalid setting values.
-
Continuing a search after clearing it now works correctly.
-
The tabbar and completion should now be more consistently and correctly styled with various system styles.
-
Applying styiles in
qt5ct
now shouldn’t crash anymore. -
The validation for colors in stylesheets is now less strict, allowing for all valid Qt values.
-
data:
URLs now aren’t added to the history anymore. -
Accidentally starting with Python 2 now shows a proper error message again.
-
For some people, running some userscripts crashed - this should now be fixed.
-
Various other rare crashes should now be fixed.
-
The settings documentation was truncated with v0.10.1 which should now be fixed.
-
Scrolling to an anchor in a background tab now works correctly, and javascript gets the correct window size for background tabs.
-
(QtWebEngine) Added a workaround for a black screen with some setups
-
(QtWebEngine) Starting with Nouveau graphics now shows an error message instead of crashing in Qt.
-
(QtWebEngine) Retrying downloads now shows an error instead of crashing.
-
(QtWebEngine) Cloning a view-source tab now doesn’t crash anymore.
-
(QtWebEngine)
window.navigator.userAgent
is now set correctly when customizing the user agent. -
(QtWebEngine) HTML fullscreen is now tracked for each tab separately, which means it’s not possible anymore to accidentally get stuck in fullscreen state by closing a tab with a fullscreen video.
-
(QtWebEngine)
:scroll-page
with--bottom-navigate
now works correctly. -
(QtWebKit) The HTTP cache is disabled on Qt 5.7.1 and 5.8 now as it leads to frequent crashes due to a Qt bug.
-
(QtWebKit) Fixed Crash when a PAC file returns an invalid value.
-
--qt-arg
and--qt-flag
can now also be used to pass arguments to Chromium when using QtWebEngine.
-
URLs are now redacted properly (username/password, and path/query for HTTPS) when using Proxy Autoconfig with QtWebKit
-
Crash when updating adblock lists with invalid UTF8-chars in them
-
Fixed the web inspector with QtWebEngine
-
Version checks when starting qutebrowser now also take the Qt version PyQt was compiled against into account
-
Hinting a input now doesn’t select existing text anymore with QtWebKit
-
The cursor now moves to the end when input elements are selected with QtWebEngine
-
Download suffixes like (1) are now correctly stripped with QtWebEngine
-
Crash when trying to print a tab which was closed in the meantime
-
Crash when trying to open a file twice on Windows
-
Userscripts now have a new
$QUTE_COMMANDLINE_TEXT
environment variable, containing the current commandline contents -
New
ripbang
userscript to create a searchengine from a duckduckgo bang -
QtWebKit Reloaded (also called QtWebKit-NG) is now fully supported
-
Various new functionality with the QtWebEngine backend:
-
Printing support with Qt >= 5.8
-
Proxy support with Qt >= 5.8
-
The
general -> print-element-backgrounds
option with Qt >= 5.8 -
The
content -> cookies-store
option -
The
storage -> cache-size
option -
The
colors -> webpage.bg
option -
The HTML5 fullscreen API (e.g. youtube videos) with QtWebEngine
-
:download --mhtml
-
-
New
qute:history
URL and:history
command to show the browsing history -
Open tabs are now auto-saved on each successful load and restored in case of a crash
-
:jseval
now has a--file
flag so you can pass a javascript file -
:session-save
now has a--only-active-window
flag to only save the active window -
macOS builds are back, and built with QtWebEngine
-
PyQt 5.7/Qt 5.7.1 is now required for the QtWebEngine backend
-
Scrolling with the scrollwheel while holding shift now scrolls sideways
-
New way of clicking hints which solves various small issues
-
When yanking a mailto: link via hints, the mailto: prefix is now stripped
-
Zoom level messages are now not stacked on top of each other anymore
-
qutebrowser now automatically uses QtWebEngine if QtWebKit is unavailable
-
:history-clear now asks for a confirmation, unless it’s run with --force.
-
input -> mouse-zoom-divider
can now be 0 to disable zooming by mouse wheel -
network -> proxy
can also be set topac+file://...
now to use a local proxy autoconfig file (on QtWebKit)
-
(QtWebKit) Various rarely customized settings were removed:
-
ui -> css-media-type
(defaults to desktop) -
general -> site-specific-quirks
(now always turned on) -
storage -> offline-storage-default-quota
(defaults to 5MB) -
storage -> offline-web-application-cache-quota
(defaults to no quota) -
storage -> object-cache-capacities
(default depends on disk space) -
content -> css-regions
(now always turned off) -
storage -> offline-storage-database
(merged intostorage -> local-storage
)
-
-
Various bugs with Qt 5.8 and QtWebEngine:
-
Segfault when closing a window
-
Segfault when closing a tab with a search active
-
Fixed various mouse actions (like automatically entering insert mode) not working
-
Fixed hints sometimes not working
-
Segfault when opening a URL after a QtWebEngine renderer process crash
-
-
Other QtWebEngine fixes:
-
Insert mode now gets entered correctly with a non-100% zoom
-
Crash reports are now re-enabled when using QtWebEngine
-
Fixed crashes when closing tabs while hinting
-
Using :undo or :tab-clone with a view-source:// or chrome:// tab is now prevented, as it segfaults
-
-
:enter-mode
now refuses to enter modes which can’t be entered manually (which caused crashes) -
:record-macro
(q
) now doesn’t try to record macros for special keys without a text -
Fixed PAC (proxy autoconfig) not working with QtWebKit
-
:download --mhtml
now uses the new file dialog -
Word hints are now upper-cased correctly when hints → uppercase is true
-
Font validation is now more permissive in the config, allowing e.g. "Terminus (TTF)" as font name
-
Fixed starting on newer PyQt/sip versions with LibreSSL
-
When downloading files with QtWebKit, a User-Agent header is set when possible
-
Fixed showing of keybindings in the :help completion
-
:navigate prev/next
now detectsrel
attributes on<a>
elements, and handles multiplerel
attributes correctly -
Fixed a crash when hinting with target
userscript
and spawning a non-existing script -
Lines in Jupyter notebook now trigger insert mode
-
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
. -
New
fonts -> completion.category
setting to customize the font used for completion category headers. -
New
:debug-log-capacity
command to adjust how many lines are logged into RAM (to report bugs which are difficult to reproduce). -
New
hide-unmatched-rapid-hints
option to not hide hint unmatched hint labels in rapid mode. -
New
{clipboard}
and{primary}
replacements for the commandline which replace the:paste
command. -
New
:insert-text
command to insert a given text into a field on the page, which replaces:paste-primary
together with the{primary}
replacement. -
New
:window-only
command to close all other windows. -
New
prev-category
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. -
New
general -> yank-ignored-url-parameters
option to configure which URL parameters (likeutm_source
etc.) to strip off when yanking an URL. -
Support for the HTML5 page visibility API
-
New
readability
userscript which shows a readable version of a page (using thereadability-lxml
python package) -
New
cast
userscript to show a video on a Google Chromecast -
New
:run-with-count
command which replaces the (undocumented):count:command
syntax. -
New
:record-macro
(q
) and:run-macro
(@
) commands for keyboard macros. -
New
ui -> hide-scrollbar
setting to hide the scrollbar independently of theuser-stylesheet
setting. -
New
general -> default-open-dispatcher
setting to configure what to open downloads with (instead of e.g.xdg-open
on Linux). -
Support for PAC (proxy autoconfig) with QtWebKit
-
Hints are now drawn natively in Qt instead of using web elements. This has a few implications for users:
-
The
hints -> opacity
setting does not exist anymore, but you can usergba(r, g, b, alpha)
colors instead forcolors -> hints.bg
. -
The
hints -> 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 using
qlineargradient
and friends instead of-webkit-gradient
. The most common cases get migrated automatically, but if you drastically changed the defaults, you’ll need to manually adjust your config. -
Styling hints by styling
qutehint
elements 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. -
With
new-instance-open-target
set to a tab option, the tab is now opened in the most recently focused (instead of the last opened) window. This can be configured with the 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
. -
The
hints -> 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. -
The
completion -> 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
-
-
The
qute: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 taking
left
/right
/previous
arguments now takeprev
/next
/last-used
to remove ambiguity. -
The
ui -> user-stylesheet
setting now only takes filenames, not CSS snippets -
ui -> window-title-format
now has a new `html5 ` 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 an URL even without-t
/-b
/-w
given.
-
The
:paste
command got deprecated as:open
with{clipboard}
and{primary}
can be used instead. -
The
:paste-primary
command got deprecated as:insert-text {primary}
can be used instead. -
The
:prompt-yes
and:prompt-no
commands got deprecated as:prompt-accept yes
and:prompt-accept no
can be used instead.
-
The
:yank-selected
command got merged into:yank
as:yank selection
and thus removed. -
The
:completion-item-prev
and:completion-item-next
commands got merged into a new:completion-focus {prev,next}
command and thus removed. -
The
ui -> hide-mouse-cursor
setting since it was completely broken and nobody seemed to care. -
The
hints -> opacity
setting - see the "Changed" section for details. -
The
completion -> auto-open
setting got merged 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.
-
:undo
now doesn’t undo tabs "closed" by:tab-detach
anymore. -
Fixed an issue with hint chars not being cleared correctly when leaving hint mode.
-
:tab-detach
now fails correctly when there’s only one tab open. -
Various small issues with the command completion
-
Fixed hang when using multiple spaces in a row with the URL completion
-
qutebrowser now still starts with an incorrectly configured
$XDG_RUNTIME_DIR
. -
Fixed crash when a userscript writes invalid unicode data to the FIFO
-
Fixed crash when a included HTML was not found
-
Fixed crash when doing
:<space><enter>
, another corner-case introduced in v0.8.0 -
Fixed
:open-editor
(<Ctrl-e>
) on Windows -
Fixed crash when setting
general -> auto-save-interval
to a too big value. -
Fixed crash when using hints on Void Linux.
-
Fixed compatibility with Python 3.5.2+ on Debian unstable
-
Compatibility with pdfjs v1.6.210
-
:bind
can now be used to bind to an alias (binding by 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 default
sk
keybinding now sets the commandline to:bind
correctly -
Fixed crash when closing a window without focusing it
-
Userscripts now can access QUTE_FIFO correctly on Windows
-
Fixed
general -> private-browsing
not being set correctly until a restart (which caused e.g. local storage to be enabled). -
When hinting input fields (
:t
), also consider input elements without a type. -
Fixed crash when opening an invalid URL with a percent-encoded and a real @ in it
-
Fixed default
;o
and;O
bindings -
Fixed local storage not working (and possible other bugs) when using a relative path with
--basedir
. -
Fixed crash when deleting a quickmark with Ctrl-D
-
Fixed HTML5 video playback on Windows
-
Fixed crash when using
:prompt-open-download
with a file with chars not encodable with the OS' filesystem encoding (e.g. 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
.
-
New
:repeat-command
command (mapped to.
) to repeat the last command. Note that two former default bundings conflict with that binding, unbinding them via:unbind .i
and:unbind .o
is recommended. -
New
qute:bookmarks
page which displays all bookmarks and quickmarks. -
New
:prompt-open-download
(bound 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 option
ui
→status-position
to configure the position of the status bar (top/bottom). -
New
--pdf <filename>
argument for:print
WHICH can be used to generate a PDF without a dialog.
-
:scroll-perc
now prefers a count over the argument given to it, which 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. -
New
taskadd
userscript to add a taskwarrior task annotated with the current URL. -
:bookmark-del
and:quickmark-del
now delete the current page’s URL if none is given.
-
Compatibility with PyQt 5.7
-
Fixed some configuration values being lost when a config option gets removed from qutebrowser’s code.
-
Fix crash when downloading with a full disk
-
Using
:jump-mark
(e.g.''
) when the current URL is invalid doesn’t crash anymore.
-
The ability to display status messages from webpages, as well as the related
ui -> display-statusbar-messages
setting. -
The
general -> wrap-search
setting as searches now always wrap. According to a quick straw poll and prior crash logs, almost nobody is 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.
-
New
:edit-url
command to edit the URL in an external editor. -
New
network -> custom-headers
setting to send custom headers with every request. -
New
{url:pretty}
commandline replacement which gets replaced by the decoded URL. -
New marks to remember a scroll position:
-
New
:jump-mark
command to jump to a mark, bound to'
-
New
:set-mark
command to set a mark, bound to ```(backtick) -
The
'
mark gets set when moving away (hinting link with anchor, searching, etc.) so you can move back with''
-
New
--force-color
argument to force colored logging even if stdout is not a terminal -
New
:messages
command to show error messages -
New pop-up showing possible keybinding when the first key of a keychain is pressed. This can be turned off using
:set ui keyhint-blacklist *
. -
New
hints -> auto-follow-timeout
setting to ignore keypresses after following a hint when filtering in number mode. -
New
:history-clear
command to clear the entire history -
New
hints -> find-implementation
to select which implementation (JS/Python) should be used to find hints on a page. Thejavascript
implementation is better, but slower. -
New
inputs
group for:hint
to hint text input fields.
-
qutebrowser got a new (slightly updated) logo
-
:tab-focus
can now take a negative index to focus the nth tab counted from the right. -
:yank
can now yank the pretty/decoded URL by adding--pretty
-
:navigate
now clears the URL fragment -
:completion-item-del
(Ctrl-D
) can now be used in:buffer
completion to close a tab -
Various SSL ciphers are now disabled by default. With recent Qt/OpenSSL versions those already all are disabled, but with older versions they might not be.
-
Show favicons as window icon with
tabs-are-windows
set. -
:bind <key>
without a command now shows the existing binding -
The optional
colorlog
dependency got removed, as qutebrowser now displays colored logs without it. -
URLs are now shown decoded when hovering.
-
Keybindings are now shown in the command completion
-
Improved behavior when pasting multiple lines
-
Rapid hints can now also be used for the
normal
hint target, which can be useful with javascript click handlers or checkboxes which don’t actually open a new page. -
:zoom-in
or:zoom-out
(+
/-
) with a too large count now zooms to the smallest/largest zoom instead of doing nothing. -
The commandline now accepts partially typed commands if they’re unique.
-
Number hints are now kept filtered after following a hint in rapid mode.
-
Number hints are now renumbered after filtering
-
Number hints can now be filtered with multiple space-separated search terms
-
hints -> scatter
is now ignored for number hints -
Better history implementation which also stores titles. As a consequence, URLs which redirect to another URL are now added to the history too, marked with a
-r
suffix to the timestamp field.
-
Fixed using
:hint links spawn
with flags - you can now use things like the-v
argument for:spawn
or pass flags to the spawned commands. -
Various fixes for hinting corner-cases where following a link didn’t work or the hint was drawn at the wrong position.
-
Fixed crash when downloading from a URL with SSL errors
-
Close file handles correctly when a download failed
-
Fixed crash when using
;Y
(:hint links yank-primary
) on a system without primary selection -
Don’t display quit confirmation with finished downloads
-
Fixed updating the tab index in the statusbar when opening a background tab
-
Fixed a crash when entering `:-- ` in the commandline
-
Fixed
:debug-console
with PyQt 5.6 -
Fixed qutebrowser not starting when
sys.stderr
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
-
Fixed
FileNotFoundError
when starting in some cases on old Qt versions -
Fixed sharing of cookies between tabs when
private-browsing
is enabled -
Toggling values with
:set
now uses lower-case values -
Hints now work with (non-standard) links with spaces around the URL
-
Strip off trailing spaces for history entries with no title
-
Fixed crash when using
:tab-{prev,next,focus}
right after closing the last tab 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
-
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 mode
word
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. -
New
password_fill
userscript to fill passwords using thepass
executable. -
New
current
hinting mode which forces opening hints in the current tab (even withtarget="_blank"
)
-
Pasting multiple lines via
:paste
now opens each line in a new tab. -
:navigate increment/decrement
now preserves leading zeroes in URLs. -
general -> editor
can now also handle{}
inside another argument (e.g. to 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 remove
qutebrowser-editor-*
temporary file if editor subprocess crashed -
Userscripts are also searched in
/usr/share/qutebrowser/userscripts
. -
Blocked hosts are now also read from a
blocked-hosts
file in the config dir (e.g.~/.config/qutebrowser/blocked-hosts
).
-
Fixed starting with -c "".
-
Fixed crash when a tab is closed twice via javascript (e.g. Dropbox authentication dialogs)
-
Fixed crash when a notification/geolocation prompt is answered after closing the tab it belongs to.
-
Fixed crash when downloading a file without any path information (e.g a magnet link).
-
Fixed crashes when opening an empty URL (e.g. via pasting).
-
Fixed validation of duplicate values in
hints -> chars
. -
Fixed crash when PDF.js was partially installed.
-
Fixed crash when XDG_DOWNLOAD_DIR was not an absolute path.
-
Fixed very long filenames when downloading
data://
-URLs. -
Fixed ugly UI fonts on Windows when Liberation Mono is installed
-
Fixed crash when unbinding key from a section which doesn’t exist in the config
-
Fixed report window after a segfault
-
Fixed some directory browser issues on Windows
-
Fixed crash when closing a window with a finished download and delayed
remove-finished-downloads
setting. -
Fixed crash when hitting
<Tab>
then<Ctrl-C>
on pages without keyboard focus. -
Fixed "Frame load interrupted by policy change" error showing up when downloading files with Qt 5.6.
-
Ability to preview PDFs using pdf.js in the browser if it’s installed. This is disabled by default and can be enabled using the
content -> pdfjs-enabled
setting. -
New setting
ui -> hide-wayland-decoration
to hide the window decoration when using wayland. -
New userscripts in
misc/userscripts
: -
open_download
to easily open a file in your downloads folder. -
view_in_mpv
to open a video in mpv and remove it from the page. -
qutedmenu
anddmenu_qutebrowser
to select URLs via dmenu -
New setting
content -> host-blocking-whitelist
to whitelist certain domains from the adblocker. -
{scroll_pos}
can now be used inui -> window-title-format
andtabs -> title-format
. -
New setting
general -> url-incdec-segments
to configure which segments of the URL should be affected by:navigate increment/decrement
. -
New
--target
argument to specify how URLs should be opened in an existing instance. -
New setting
statusbar.url.fg.success.https
to set the foreground color for the URL when a page was loaded via HTTPS. -
The scrollbar in the completion is now styled, and the following new options got added:
-
completion -> scrollbar-width
-
completion -> scrollbar-padding
-
colors -> completion.scrollbar.fg
-
colors -> completion.scrollbar.bg
-
-
New value
none
for options taking a color system so they don’t display a gradient:-
colors -> tabs.indicator.system
-
colors -> downloads.fg.system
-
colors -> downloads.bg.system
-
-
New command
:download-retry
to retry a failed download. -
New command
:download-clear
which replaces:download-remove --all
. -
:set-cmd-text
has a new--append
argument to append to the current statusbar text. -
qutebrowser now uses
~/.netrc
if available to authenticate via HTTP. -
New
:fake-key
command to send a fake keypress to a website or to qutebrowser. -
New
--mhtml
argument for:download
to download a page including all resources as MHTML file. -
New option
tabs -> title-alignment
to change the alignment of tab titles.
-
The
colors -> 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_DIR
. Using a binary in$PATH
won’t work anymore with--userscript
. -
New design for error pages
-
Link filtering for hints now checks if the text is contained anywhere in the link, and matches case-insensitively.
-
The
ui -> remove-finished-downloads
option got changed to an integer and now takes a time (in milliseconds) to keep the download around after it’s finished. When set to-1
, downloads are never removed. -
The
:follow-hint
command now optionally takes the keystring of a hint to follow. -
:scroll-px
now doesn’t take floats anymore, which made little sense. -
Updated the user agent list for the
:set network user-agent
completion. -
Starting with
--debug
doesn’t 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.
-
:download-remove --all
is now deprecated and:download-clear
should be used instead. -
:download <url> <destination>
is now deprecated and:download --dest <destination> <url>
should be used instead.
-
:scroll
with two pixel-arguments (deprecated in v0.3.0) -
The
:run-userscript
command (deprecated in v0.2.0) -
The
rapid
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 retrying of downloads which were started in a now closed tab.
-
Fixed displaying of web history if
web-history-max-items
is set to -1. -
Cloned tabs now don’t display favicons anymore if show-favicons is False.
-
Fixed a crash when clicking a bookmark name and pressing
Ctrl-D
. -
Fixed a crash when a website presents a very small favicon.
-
Fixed prompting for download directory when
storage -> prompt-download-directory
was unset. -
Fixed crash when using
:follow-hint
outside of hint mode. -
Fixed crash when using
:set foo bar?
with invalid section/option. -
Fixed scrolling to the very left/right with
:scroll-perc
. -
Using an external editor should now work correctly with some funny chars (U+2028/U+2029/BOM).
-
Movements in caret mode now should work correctly on macOS and Windows.
-
Fixed upgrade from earlier config versions.
-
Fixed crash when killing a running userscript.
-
Fixed characters being passed through when shifted with
forward-unbound-keys
set toauto
. -
Fixed restarting after a crash is reported.
-
Removed
.pyc
files accidentally contained in source releases.
-
Adjusted AppArmor config for the IPC changes in v0.4.0.
-
Fixed atime update frequency for IPC file.
-
Worked around a Qt issue where middle-clicking caused scrolling with a touchpad to restart at the beginning of the page.
-
The
completion -> web-history-max-items
setting is now also respected for items added after starting qutebrowser. -
Search terms are now shared between different tabs again
-
Tests (a reduced subset of them) now run correctly again when DISPLAY is not set.
-
Fixed an issue causing qutebrowser to crash with Python 3.5 as soon as an ad was blocked.
-
Fixed an issue causing qutebrowser to not start with more recent Python 3.4 versions (e.g. on Debian experimental).
-
Fixed various
PendingDeprecationWarnings
shown with Python 3.5.
-
New bookmark functionality (similar to quickmarks without a name).
-
New command
:bookmark-add
to bookmark the current page (bound 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 settings
tabs -> padding
andtabs -> indicator-tabbing
to control the size/padding of the tabbar. -
New setting
ui -> statusbar-padding
to control the size/padding of the status bar. -
New setting
network -> referer-header
to configure when the referer should be sent (by default it’s only sent while on the same domain). -
New setting
tabs -> show
which supersedes the 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 setting
storage -> remember-download-directory
to remember the last used download directory. -
New setting
storage -> prompt-download-directory
to download all downloads without asking. -
Rapid hinting is now also possible for downloads.
-
Directory browsing via
file://
is now supported.
-
Some developer scripts got moved to
scripts/dev/
-
When downloading to a FIFO or special file, a confirmation is displayed as this might cause qutebrowser to hang.
-
The
:yank-selected
command now works in all modes instead of just caret mode and is not hidden anymore. -
minimal_webkit_testbrowser.py
now has a--webengine
switch to test QtWebEngine if it’s installed. -
The column width percentages for the completion view now depend on the completion model.
-
The values for
tabs -> position
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 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.
-
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 setting
ui -> smooth-scrolling
. -
New setting
content -> webgl
to enable/disable WebGL. -
New setting
content -> css-regions
to enable/disable support for CSS Regions. -
New setting
content -> hyperlink-auditing
to enable/disable support for hyperlink auditing. -
New setting
tabs -> mousewheel-tab-switching
to control mousewheel behavior on the tab bar. -
New arguments
--datadir
and--cachedir
to set the data/cache location. -
New arguments
--basedir
and--temp-basedir
(intended for debugging) to set a different base directory for all data, which allows multiple invocations. -
New argument
--no-err-windows
to suppress all error windows. -
New arguments
--top-navigate
and--bottom-navigate
(-t
/-b
) for:scroll-page
to specify a navigation action (e.g. automatically go to the next page when arriving at the bottom). -
New flag
-d
/--detach
for:spawn
to detach the spawned process so it’s not closed when qutebrowser is. -
New flag
-v
/--verbose
for:spawn
to print information when the process started/exited successfully. -
Many new color settings (foreground setting for every background setting).
-
New setting
ui -> modal-js-dialog
to use the standard modal dialogs for javascript questions instead of using the statusbar. -
New setting
colors -> webpage.bg
to set the background color to use for websites which don’t set one. -
New setting
completion -> auto-open
to only open the completion when tab is pressed (if set to false). -
New visual/caret mode (bound to
v
) to select text by keyboard. -
There are now some example userscripts in
misc/userscripts
. -
Support for Qt 5.5 and tox 2.0
-
Breaking change for userscripts:
QUTE_HTML
andQUTE_TEXT
for userscripts now don’t store the contents directly, and instead contain a filename. -
The
content -> geolocation
andnotifications
settings now support atrue
value to always allow those. However, this is not recommended. -
New bindings
<Ctrl-R>
(rapid),<Ctrl-F>
(foreground) and<Ctrl-B>
(background) to switch hint modes while hinting. -
<Ctrl-M>
and numpad-enter are now bound by default for bindings where<Return>
was bound. -
:hint tab
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. -
The
ui -> user-stylesheet
setting now also takes file paths relative to the config directory. -
The
content -> 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 the
new-instance-open-target
setting has been changed totab
. -
Sessions now store zoom/scroll-position separately for each entry.
-
The
--no-crash-dialog
argument which was intended for debugging only was removed as it’s replaced by--no-err-windows
which suppresses all error windows. -
Support for Qt installations without SSL support was dropped.
-
Scrolling should now work more reliably on some pages where arrow keys worked but
hjkl
didn’t. -
Small improvements when checking if an input is a URL or not.
-
Fixed wrong cursor position when completing the first item in the completion.
-
Fixed exception when using search engines with {foo} in their name.
-
Fixed a bug where the same title was shown for all tabs on some systems.
-
Don’t install the scripts package when installing qutebrowser.
-
Fixed searching for terms starting with a hyphen (e.g.
/-foo
) -
Proxy authentication credentials are now remembered between different tabs.
-
Fixed updating of the tab title on pages without title.
-
Fixed AssertionError when closing many windows quickly.
-
Various fixes for deprecated key bindings and auto-migrations.
-
Workaround for qutebrowser not starting when there are NUL-bytes in the history (because of a currently unknown bug).
-
Fixed handling of keybindings containing Ctrl/Meta on macOS.
-
Fixed crash when downloading a URL without filename (e.g. magnet links) via "Save as…".
-
Fixed exception when starting qutebrowser with
:set
as argument. -
Fixed horrible completion performance when the
shrink
option was set. -
Sessions now store zoom/scroll-position correctly.
-
Session support
-
new command
:session-load
to load a session. -
new command
:session-save
to save a session. -
new command
:session-delete
to delete a session. -
new setting
general -> save-session
to always save the session on quit. -
new setting
general -> session-default-name
to configure the session name to use if none is given. -
new argument
-r
/--restore
to specify a session to load. -
new argument
-R
/--override-restore
to not load a session even if one was saved.
-
-
New commands to manage downloads:
-
:download
to download a URL or the current page. -
:download-cancel
to cancel a download. -
:download-delete
to delete a download from disk. -
:download-open
to open a finished download. -
:download-remove
to remove a download from the list.:download-remove --all
or the new cd keybinding can be used to clear all finished downloads.
-
-
History completion
-
New option
completion -> timestamp-format
to set the format used to display the history timestamps. -
New option
completion -> web-history-max-items
to configure how many history items to show in the completion. -
The option
completion -> history-length
for the command history got renamed 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 the
general -> auto-save-interval
option).
-
-
Opera-like mouse rocker gestures
-
New option
input -> rocker-gestures
. When turned on, the history can be navigated back/forward by holding a mouse button and pressing the other one.
-
-
New
-f
option for:reload
to reload and bypass the cache. -
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 option
content -> geolocation
to permanently turn the geolocation off. -
New option
content -> notifications
to permanently turn notifications off.
-
-
New options to disable javascript prompts/alerts:
-
content -> ignore-javascript-prompt
to turn off prompts. -
content -> ignore-javascript-alerts
to turn off alerts.
-
-
Two new options to customize the behavior of hints:
-
hints -> min-chars
to set minimum number of chars in hints. -
hints -> scatter
which when turned off distributes the hints sequentially (like dwb) instead of scattering their positions (like Vimium).
-
-
Make it possible to use
:open -[twb]
without url.-
New option
general -> default-page
to set the page to be opened when doing that.
-
-
New
input -> partial-timeout
option to clear partial keystrings. -
New option
completion -> download-path-suggestion
to configure what to show in the completion for downloads. -
Queue messages shown in unfocused windows and show them when the window is focused.
-
New option
ui -> message-unfocused
to disable this behavior.
-
-
New
--relaxed-config
argument which ignores unknown options. -
New
:tab-detach
command to open the current tab in a new window. -
Zooming via Ctrl-Mousewheel.
-
New option
input -> mouse-zoom-divider
to control how much the page is zoomed when rotating the wheel.
-
-
New option (
content -> host-blocking-enabled
) to enable/disable host blocking. -
New values
tab-bg
/tab-bg-silent
fornew-instance-open-target
to open a background tab. -
New
ui -> downloads-position
setting to move the downloads to the bottom. -
New
ui -> hide-mouse-cursor
option to hide the mouse cursor inside qutebrowser. -
New argument
-s
for qutebrowser to set a temporary config option. -
New argument
-p
for the:set
command to print the new value. -
New
--rapid
option to:hint
. 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 new
colors -> completion.alternate-bg
option.
-
Ignore quotes with maxsplit-commands (
:open
,:quickmark-load
, etc.) and don’t quote arguments for those commands in the completions. This also means some commands needed adjustments:-
Clear search when
:search
without arguments is given. (:search ""
will now search for the literal text""
) -
Add
-s
/--space
argument to:set-cmd-text
(as:set-cmd-text "foo "
will now set the literal text"foo "
)
-
-
Ignore
;;
for splitting with some commands like:bind
. -
Add unbound (new) default keybindings to config. This also adds a new
<unbound>
special command.-
To unbind a command keybinding without binding it to a new key, you now have to bind it to
<unbound>
or it’ll be readded automatically.
-
-
If an SSL error is raised multiple times with the same error/certificate/host/scheme/port, the user is only asked once.
-
Jump to last instead of first item when pressing Shift-Tab the first time in the completion.
-
Add a fullscreen keybinding.
-
Add a
:search
command in addition to/foo
so it’s more visible and can be used from scripts. -
Various improvements to documentation, logging, and the crash reporter.
-
Expand
~
to the users home directory with:run-userscript
. -
Improve the userscript runner on Linux/macOS by using
QSocketNotifier
. -
Add luakit-like
gt
/gT
keybindings to cycle through tabs. -
Show default value for config values in the completion.
-
Clone tab icon, tab text and zoom level when cloning tabs.
-
Don’t open relative file paths with
:open
, only with commandline arguments. -
Expand environment variables in config settings which take a file path.
-
Add a list of common user agents to the user agent setting completion.
-
Move cursor to end of textboxes when hinting.
-
Don’t start searches on invalid URLs for quickmarks/startpage.
-
Various performance improvements for the completion.
-
Always open URLs given as argument in the foreground.
-
Improve various error messages.
-
Add
startpage
/default-page
values 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 by tox. Install tox and runtox -e mkvenv
instead. -
The tests now use pytest
-
Many new tests added
-
Mac Mini buildbot to run the tests on macOS.
-
Coverage recording via coverage.py.
-
New
--pdb-postmortem argument
to drop into the pdb debugger on exceptions. -
Use hunter for line tracing instead of a selfmade solution.
-
-
The
:run-userscript
command - use:spawn --userscript
instead. -
The
rapid
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.
-
init_venv.py
andrun_checks.py
have been replaced by tox. Install tox and runtox -e mkvenv
instead..
-
Fix for cache never being used.
-
Fixed handling of key release events (e.g. for javascript) when holding a key and pressing a second one.
-
Fix handling of commands using
;;
at various places (key config, command parser,:bind
) -
Fix splitting of flags with arguments (
:bind -m
/--mode
). -
Fix bindings of special keys with lower-case modifiers (e.g.
<ctrl-x>
) -
Fix for weird search highlights when changing tabs while search is active.
-
Fix starting with
-c ""
. -
Fix removing of partial downloads when a download is cancelled via context menu.
-
Fix retrying of downloads which were started in a now closed tab.
-
Highlight text case-insensitively in completion.
-
Scroll completion to top when showing it.
-
Handle unencodable file paths in config types correctly.
-
Fix for crash when executing a delayed command (because of a shadowed keybinding) and then unfocusing the window.
-
Fix for crash when hinting on a page which doesn’t have a URL yet.
-
Fix exception when using
:set-cmd-text
with an empty argument. -
Add a timeout to pastebin HTTP replies.
-
Various other fixes for small/rare bugs.
-
The Windows builds come with Qt 5.4.1 which has some related bugfixes.
-
Improvements to CPU usage when idle.
-
Ensure there’s no size for
font-family
settings. -
Handle URLs with double-colon as search strings.
-
Adjust prompt size hint based on content.
-
Refactor websettings and save/restore defaults.
-
Various small improvements to logging.
-
Various improvements for hinting.
-
Improve parsing of
faulthandler
logs.
-
Ignore RuntimeError in
mouserelease_insertmode
. -
Hide Qt warning when aborting download reply.
-
Hide "Error while shutting down tabs" message.
-
Clear open target in
acceptNavigationRequest
. -
Fix handling of signals with deleted tabs.
-
Restore
sys.std*
inutils.fake_io
on exceptions. -
Allow font names with integers in them.
-
Fix
QIODevice
warnings when closing tabs. -
Set the
QSettings
path to a config-subdirectory. -
Add workaround for adblock-message without window.
-
Fix searching for terms starting with a slash.
-
Ignore tab key presses if they’d switch focus.
-
Various small logging improvements.
-
Don’t open relative files in
fuzzy_url
with:open
-
Various crashdialog improvements.
-
Hide adblocked iframes.
-
Handle shutdown of page with prompt correctly.
-
fuzzy_url: handle invalid URLs with autosearch off
-
Handle explicit searches with
auto-search=false
. -
Abort download override question on error/cancel.
-
Set a higher z-index for hint labels.
-
Close contextmenu when closing tab to avoid crash.
-
Fix statusbar quickly popping up as window.
-
Clean up
NetworkManager
after downloads finished. -
Fix restoring of cmd widget after an error.
-
Fix retrying of downloads after the tab is closed.
-
Fix
check_libraries()
output for Arch Linux. -
Handle all
IPCErrors
properly. -
Handle another
webelem.IsNullError
with hints. -
Handle
UnicodeDecodeError
when reading configs.
-
Uncheck sending of debug log by default when private browsing is on.
-
Add SSL info to version info.
-
Fix rare exception when a key is pressed shortly after opening a window
-
Fix exception with certain invalid URLs like
http:foo:0
-
Work around Qt bug which renders checkboxes on macOS unusable
-
Fix exception when a local files can’t be read in
:adblock-update
-
Hide 2 more Qt warnings.
-
Add
!important
to hint CSS so websites don’t override the hint look -
Make
init_venv.py
work with multiple sip.so
files. -
Fix splitting with certain commands with an empty argument
-
Fix uppercase hints.
-
Fix segfaults if another page is loaded while a prompt is open
-
Fix exception with invalid
ShellCommand
config values. -
Replace unencodable chars
-
Fix user-stylesheet setting with an empty value.
-
Set window icon and add a qutebrowser.ico file for Windows.
-
Ask the user when downloading to an already existing file.
-
Add a
network -> proxy-dns-requests
option. -
Add "Remove finished" to the download context menu
-
Open and remove clicked downloads.
-
Windows releases are now built with Qt 5.4 which brings many improvements and bugfixes.
-
Add a troubleshooting section to the FAQ.
-
Display IPC errors to the user.
-
Rewrite keymode handling to use only one mode which also fixes various bugs.
-
Save version to state config.
-
Set zoom to default instead of 100% with
:zoom
/=
. -
Adjust page zoom if default zoom changed.
-
Force tabs to be focused on
:undo
. -
Replace manual installation instructions on macOS with homebrew/macports.
-
Allow min-/maximizing of print preview on Windows.
-
Various documentation improvements.
-
Various other small improvements and cleanups.
-
Fix setting of
QWebSettings
(e.g. web fonts) with empty strings. -
Re-focus web view when leaving prompt/yesno mode.
-
Handle
:restart
correctly with Python eggs. -
Handle an invalid cwd properly.
-
Fix popping of a dead question in prompter.
-
Fix
AttributeError
on config changes on Ubuntu. -
Don’t treat things like "31c3" as IP address.
-
Handle category being
None
in Qt message handler. -
Force-include pygments in
freeze.py
. -
Fix scroll percentage not updating on some pages like twitter.
-
Encode
Content-Disposition
header name properly. -
Fix item sorting in
NeighborList
. -
Handle data being
None
in download read timer. -
Stop download read timer when reply has finished.
-
Fix handling of small/big
fuzzyval
's inNeighborList
. -
Fix crashes when entering invalid values in
qute:settings
. -
Abort questions in
NetworkManager
when destroyed. -
Fix height calculation of download view.
-
Always auto-remove adblock downloads when done.
-
Ensure the docs get included in
freeze.py
. -
Fix crash with
:zoom
.
Initial release.