Releases: qutebrowser/qutebrowser
Releases · qutebrowser/qutebrowser
v2.3.1
Fixes
- 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 with
adblock
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
Added
- New
content.prefers_reduced_motion
setting to request websites to reduce
non-essential motion/animations. - New
colors.prompts.selected.fg
setting to customize the text color for
selected items in filename prompts.
Changed
- The hosts-based adblocker (using
content.blocking.hosts.lists
) now also
blocks all requests to any subdomains of blocked hosts. - The
fonts.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 new
QUTE_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 the
link_pyqt.py
script on Python 3.10
(e.g. viatox
ormkvenv.py
).
v2.2.3
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). - Setting
content.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 the
qute://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
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 to
set-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 with
python -OO
(which is not recommended), a notification
being shown would result in a crash, which is now fixed.
v2.2.1
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).
- With the legacy GNOME Flashback notification daemon (not GNOME Shell), when
- The
mkvenv.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:
- The
qute-bitwarden
userscript now still consumes returned data if the
Bitwarden CLI showed a warning but exited with a 0 (successful) exit code. - The
qute-pass
userscript now doesn't try to match a username with
--password-only
, and error messages with invalid patterns are improved. - The
qute-pass
userscript now avoids runningpass
twice when--otp-only
is used.
- The
v2.2.0
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 the
QtDBus
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. - New
input.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. - New
content.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. - New
fileselect.folder.command
which can be used with
fileselect.handler = external
to customize the command to use to upload
directories (<input type="file" webkitdirectory />
elements, which are
non-standard but in wide use). - New
content.notifications.presenter
setting with various new ways to show
web notifications:auto
(default): Automatically detect the best available optionqt
: 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 messagesherbe
: Use herbe
- New
content.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
- The
content.ssl_strict
setting got renamed to
content.tls.certificate_errors
, with new values:ask
: Prompt on overridable certificate errors (ssl_strict = 'ask'
)ask-block-thirdparty
: See belowblock
: Block the page load (ssl_strict = True
)load-insecurely
: Load the page despite the error (ssl_strict = False
)
- The new
content.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. - The
content.site_specific_quirks
setting got renamed to
content.site_specific_quirks.enabled
. - The
content.notifications
option got renamed to
content.notifications.enabled
. - The completion now also shows bindings starting with
set-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 an
ignore_unsupported=True
argument which supresses 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 missing
config.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 noticable performance
issue. - The
readability-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 for
T
(: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. - The
statusbar.widgets
setting now understandstext:...
entries which
allows adding a hard-coded text to the statusbar. - The polyfill for
String.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
from
content.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 setting
NSRequiresAquaSystemAppearance
to false.
Removed
- The
qute://spawn-output
page used by:spawn -o
is now removed, as it's
replaced by the newqute://process
pages.
v2.1.1
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 the 'x' 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 the
qute-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 using
bindings.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
Removed
- The following command aliases were deprecated in v2.0.0 and are now removed:
run-macro
->macro-run
record-macro
->macro-record
buffer
->tab-select
open-editor
->edit-text
toggle-selection
->selection-toggle
drop-selection
->selection-drop
reverse-selection
->selection-reverse
follow-selected
->selection-follow
follow-hint
->hint-follow
enter-mode
->mode-enter
leave-mode
->mode-leave
Added
- New
:screenshot
command which can be used to screenshot the visible part of
the page. - New optional dependency on the
importlib_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. - New
qute-keepassxc
userscript integrating with the KeePassXC browser API.
Changed
- Initial support for QtWebEngine 5.15.3 and PyQt 5.15.3/.4
- The
colors.webpage.prefers_color_scheme_dark
setting got renamed to
colors.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 via
pip
(as is e.g. the case with
mkvenv.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. - The
fileselect.*.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. - The
readability
andreadability-js
userscripts now add a
qute-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 a
qt.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. - The
colors.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, existing
blink-features
arguments in
qt.args
(or--qt-flag
) were overridden. They are now combined properly. - On QtWebEngine 5.15.2, auto detection for the
prefers-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 return
light
instead (as per the spec). - When an external file selector deletes the temporary file (like
nnn
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, using
F
(hint all tab
) sometimes would open a context menu
instead of following a link. This is now fixed. - The quirk added for a missing
String.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. - The
hist_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.
qutebrowser v2.0.2
Fixed
- When right-clicking an empty part of the downloads bar, qutebrowser v2.0.x
would crash. This is now fixed. - Setting
content.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 the
sip
dependency assip
rather than
PyQt5.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 global
sip
package. Thus, support for a globalsip
package is now reintroduced. - The changelog for v2.0.0 claimed that
hints.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 setting
hints.leave_on_load
totrue
, and reversing the change to
input.insert_mode.leave_on_load
so it is set tofalse
by default again. - When the
importlib_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 about
config.load_autoconfig(...)
being missing when loading a secondary config
(e.g. viaconfig.source(...)
). It now only shows those warnings for the main
config.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. - When
hints.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.
qutebrowser v2.0.1
Fixed
- If qutebrowser was installed as a Python egg (similar to a .zip file, via
setup.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
- The
format_json
userscript now uses sh instead of bash again. - The
add-nextcloud-bookmarks
,add-nextcloud-cookbook
,readability
and
ripbang
userscripts now use apython3
rather than plainpython
shebang. - When
QTWEBENGINE_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 for
fileselect.*.command
now also includes the "nnn"
terminal file manager.