# Change Log

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

## v1.0.0 (unreleased)

### Breaking changes

- 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.

- (TODO) New dependency on ruamel.yaml; dropped PyYAML dependency.

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

- New dependency on the `attrs` Python module.

- 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.

- (TODO) The QtWebEngine backend is now used by default if available.

- New config system which ignores the old config file.

- Various documentation files got moved to the doc/ subfolder, `qutebrowser.desktop` got moved to misc/.

- 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.

- `:set` now doesn’t support toggling/cycling values anymore, that functionality got moved to `:config-cycle`.

- `:scroll-perc` got renamed to `:scroll-to-perc`.

### Major changes

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

- Completely rewritten configuration system.

### Added

- New back/forward indicator in the statusbar

- New `bindings.key_mappings` setting to map keys to other keys

- New `qt_args` setting to pass additional arguments to Qt/Chromium

- New `backend` setting to select the backend to use (auto/webengine/webkit). Together with the previous setting, this should make wrapper scripts unnecessary.

- Proxy authentication is now supported with the QtWebEngine backend.

- 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 a `config.py` file

- `:config-edit` to open the `config.py` file in an editor

- `:config-write-py` to write a `config.py` template file

- New `:version` command which opens `qute://version`.

### Changed

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

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

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

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

- Pinned tabs now adjust to their text’s width, so 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.

### Fixes

- 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.

## v0.11.1 (unreleased)

### Fixes

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

- Fixed `:restart` in private browsing mode.

- Fixed printing on macOS.

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

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

- :spawn -u -d is now disallowed.

- :spawn -d shows error messages correctly now.

## v0.11.0

### New dependencies

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

- New dependency on `PyOpenGL` if QtWebEngine is used.

### Added

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

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

- (QtWebEngine) Implemented `:follow-selected`.

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

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

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

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

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

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

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

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

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

### Changed

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

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

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

- They now use the new QtWebEngine backend

- The bundled Qt is updated from 5.5 to 5.9

- The bundled Python is updated from 3.4 to 3.6

- They are now generated with PyInstaller instead of cx_Freeze

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

- Improved `qute://history` page (with lazy loading)

- Crash reports are not public anymore.

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

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

- Messages are now hidden when clicked.

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

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

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

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

- `javascript:` links can now be hinted.

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

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

- Texts in prompts are now selectable.

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

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

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

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

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

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

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

- (QtWebKit) PAC now supports SOCKS5 as type.

### Fixed

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

- Fixed crash with `:download` on PyQt 5.9.

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

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

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

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

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

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

- Fixed crash with some invalid setting values.

- Continuing a search after clearing it now works correctly.

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

- Applying 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.

## v0.10.1

### Changed

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

### Fixed

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

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

- Fixed the web inspector with QtWebEngine

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

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

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

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

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

- Crash when trying to open a file twice on Windows

## v0.10.0

### Added

- 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

### Changed

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

- Scrolling with the scrollwheel while holding shift now scrolls sideways

- New way of clicking hints which solves various small issues

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

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

- qutebrowser now automatically uses QtWebEngine if QtWebKit is unavailable

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

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

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

### Removed

- (QtWebKit) Various rarely customized settings were removed:

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

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

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

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

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

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

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

### Fixed

- Various bugs with Qt 5.8 and QtWebEngine:

  - Segfault when closing a window

  - Segfault when closing a tab with a search active

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

  - Fixed hints sometimes not working

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

- Other QtWebEngine fixes:

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

  - Crash reports are now re-enabled when using QtWebEngine

  - Fixed crashes when closing tabs while hinting

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

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

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

- Fixed PAC (proxy autoconfig) not working with QtWebKit

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

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

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

- Fixed starting on newer PyQt/sip versions with LibreSSL

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

- Fixed showing of keybindings in the :help completion

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

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

- Lines in Jupyter notebook now trigger insert mode

## v0.9.1

### Fixed

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

## v0.9.0

### Added

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Support for the HTML5 page visibility API

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

- New `cast` userscript to show a video on a Google Chromecast

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

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

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

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

- Support for PAC (proxy autoconfig) with QtWebKit

### Changed

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

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

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

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

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

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

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

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

- `:open` now also accepts quickmark names instead of URLs

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

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

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

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

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

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

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

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

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

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

- Completions for `:help` and `:bind` now also show hidden commands

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  - `colors -> messages.border.error`

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

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

  - `colors -> messages.border.warning`

  - `colors -> messages.fg.info`

  - `colors -> messages.bg.info`

  - `colors -> messages.border.info`

  - `fonts -> messages.error`

  - `fonts -> messages.warning`

  - `fonts -> messages.info`

- The `qute:settings` page now also shows option descriptions.

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

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

- Various functionality now works when javascript is disabled with QtWebKit

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

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

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

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

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

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

### Deprecated

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

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

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

### Removed

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

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

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

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

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

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

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

### Fixed

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

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

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

- Various small issues with the command completion

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

- qutebrowser now still starts with an incorrectly configured `$XDG_RUNTIME_DIR`.

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

- Fixed crash when a included HTML was not found

## v0.8.3

### Fixed

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

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

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

- Fixed crash when using hints on Void Linux.

- Fixed compatibility with Python 3.5.2+ on Debian unstable

- Compatibility with pdfjs v1.6.210

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

- The command completion now updates correctly when changing aliases

- The tabbar now displays correctly with the Adwaita Qt theme

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

- Fixed crash when closing a window without focusing it

- Userscripts now can access QUTE_FIFO correctly on Windows

## v0.8.2

### Fixed

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

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

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

- Fixed default `;o` and `;O` bindings

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

- Fixed crash when deleting a quickmark with Ctrl-D

- Fixed HTML5 video playback on Windows

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

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

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

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

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

## v0.8.1

### Fixed

- Fix crash when pressing enter without a command

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

- Hide Harfbuzz warning with the macOS .app

## v0.8.0

### Added

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

- New `qute:bookmarks` page which displays all bookmarks and quickmarks.

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

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

- New default binding `;t` for `:hint input`.

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

- New option `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.

### Changed

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

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

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

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

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

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

## Fixed

- Compatibility with PyQt 5.7

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

- Fix crash when downloading with a full disk

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

## Removed

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

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

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

## v0.7.0

### Added

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

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

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

- New marks to remember a scroll position:

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

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

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

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

- New `:messages` command to show error messages

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

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

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

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

- New `inputs` group for `:hint` to hint text input fields.

### Changed

- qutebrowser got a new (slightly updated) logo

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

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

- `:navigate` now clears the URL fragment

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

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

- Show favicons as window icon 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

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

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

- Fixed crash when downloading from a URL with SSL errors

- Close file handles correctly when a download failed

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

- Don’t display quit confirmation with finished downloads

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

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

- Fixed `:debug-console` with PyQt 5.6

- Fixed qutebrowser not starting when `sys.stderr` is `None`

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

- Fixed rebinding of keybindings being case-sensitive

- Fix for tab indicators getting lost when moving tabs

- Fixed handling of backspace in number hinting mode

- Fixed `FileNotFoundError` when starting in some cases on old Qt versions

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

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

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

- Strip off trailing spaces for history entries with no title

## v0.6.2

### Fixed

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

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

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

- Fixed crash in some circumstances when using dictionary hints

- Fixed various crashes related to PyQt 5.6

## v0.6.1

### Fixed

- Fixed broken cheatsheet image which was missing from package

- Fixed occasional crash when switching/disconnecting monitors

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

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

## v0.6.0

### Added

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

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

- The completion now matches each entered word separately.

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

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

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

- New `password_fill` userscript to fill passwords using the `pass` executable.

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

### Changed

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

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

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

- Improved performance when scrolling with many tabs open.

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

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

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

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

- Userscripts are also searched in `/usr/share/qutebrowser/userscripts`.

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

### Fixed

- 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.

### Removed

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

## v0.5.1

### Fixed

- Fixed completion for various config values when using `:set`.

- Fixed config validation for various config values.

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

## v0.5.0

### Added

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

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

- New userscripts in `misc/userscripts`:

- `open_download` to easily open a file in your downloads folder.

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

- `qutedmenu` and `dmenu_qutebrowser` to select URLs via dmenu

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

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

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

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

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

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

  - `completion -> scrollbar-width`

  - `completion -> scrollbar-padding`

  - `colors -> completion.scrollbar.fg`

  - `colors -> completion.scrollbar.bg`

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

  - `colors -> tabs.indicator.system`

  - `colors -> downloads.fg.system`

  - `colors -> downloads.bg.system`

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

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

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

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

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

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

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

### Changed

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

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

- New design for error pages

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

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

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

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

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

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

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

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

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

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

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

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

### Deprecated

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

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

### Removed

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

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

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

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

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

### Fixed

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

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

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

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

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

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

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

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

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

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

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

- Fixed upgrade from earlier config versions.

- Fixed crash when killing a running userscript.

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

- Fixed restarting after a crash is reported.

- Removed `.pyc` files accidentally contained in source releases.

## v0.4.1

### Fixed

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

- Fixed atime update frequency for IPC file.

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

- 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.

## v0.4.0

### Added

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

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

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

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

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

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

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

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

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

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

- Rapid hinting is now also possible for downloads.

- Directory browsing via `file://` is now supported.

### Changed

- Some developer scripts got moved to `scripts/dev/`

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

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

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

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

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

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

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

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

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

- Better support for Qt 5.5 and Python 3.5.

### Fixed

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

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

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

- `link_pyqt.py` now should work better on untested distributions.

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

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

- Fixed potential crash when hinting a text field.

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

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

- Downloads with unknown size are now handled correctly.

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

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

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

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

- `~` is now always expanded when spawning a script.

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

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

### Removed

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

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

## v0.3.0

### Added

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

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

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

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

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

- New setting `ui -> smooth-scrolling`.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- There are now some example userscripts in `misc/userscripts`.

- Support for Qt 5.5 and tox 2.0

### Changed

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

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

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

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

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

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

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

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

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

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

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

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

### Deprecated

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

### Removed

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

- Support for Qt installations without SSL support was dropped.

### Fixed

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

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

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

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

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

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

- Proxy authentication credentials are now remembered between different tabs.

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

- Fixed AssertionError when closing many windows quickly.

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

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

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

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

- Fixed exception when starting qutebrowser with `:set` as argument.

- Fixed horrible completion performance when the `shrink` option was set.

- Sessions now store zoom/scroll-position correctly.

## v0.2.1

### Fixed

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

## v0.2.0

### Added

- Session support

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

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

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

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

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

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

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

- New commands to manage downloads:

  - `:download` to download a URL or the current page.

  - `:download-cancel` to cancel a download.

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

  - `:download-open` to open a finished download.

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

- History completion

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

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

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

- Better save logic for the config/state:

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

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

- Opera-like mouse rocker gestures

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

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

- 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` for `new-instance-open-target` to open a background tab.

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

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

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

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

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

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

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

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

### Changed

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

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

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

- Ignore `;;` for splitting with some commands like `:bind`.

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

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

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

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

- Add a fullscreen keybinding.

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

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

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

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

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

- Show default value for config values in the completion.

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

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

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

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

- Move cursor to end of textboxes when hinting.

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

- Various performance improvements for the completion.

- Always open URLs given as argument in the foreground.

- Improve various error messages.

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

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

- Add tab index display to the statusbar.

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

- Many improvements to tests and related infrastructure:

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

  - The tests now use pytest

  - Many new tests added

  - Mac Mini buildbot to run the tests on macOS.

  - Coverage recording via coverage.py.

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

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

### Deprecated

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

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

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

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

### Removed

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

### Fixed

- Fix for cache never being used.

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

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

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

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

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

- Fix starting with `-c ""`.

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

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

- Highlight text case-insensitively in completion.

- Scroll completion to top when showing it.

- Handle unencodable file paths in config types correctly.

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

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

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

- Add a timeout to pastebin HTTP replies.

- Various other fixes for small/rare bugs.

## v0.1.4

### Changed

- 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.

### Removed

- Remove default search engines.

- Remove debug console completing completely.

### Fixed

- Ignore RuntimeError in `mouserelease_insertmode`.

- Hide Qt warning when aborting download reply.

- Hide "Error while shutting down tabs" message.

- Clear open target in `acceptNavigationRequest`.

- Fix handling of signals with deleted tabs.

- Restore `sys.std*` in `utils.fake_io` on exceptions.

- Allow font names with integers in them.

- Fix `QIODevice` warnings when closing tabs.

- Set the `QSettings` path to a config-subdirectory.

- Add workaround for adblock-message without window.

- Fix searching for terms starting with a slash.

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

### Security

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

- Disable insecure SSL ciphers.

## v0.1.3

### Changed

- Various small logging improvements.

- Don’t open relative files in `fuzzy_url` with `:open`

- Various crashdialog improvements.

- Hide adblocked iframes.

### Fixed

- Handle shutdown of page with prompt correctly.

- fuzzy_url: handle invalid URLs with autosearch off

- Handle explicit searches 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.

### Security

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

## v0.1.2

### Changed

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

- Add SSL info to version info.

### Removed

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

### Fixed

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

- Fix exception with certain invalid URLs 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.

## v0.1.1

### Added

- 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.

### Changes

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

- Add a troubleshooting section to the FAQ.

- Display IPC errors to the user.

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

- Save version to state config.

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

- Adjust page zoom if default zoom changed.

- Force tabs to be focused on `:undo`.

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

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

- Various documentation improvements.

- Various other small improvements and cleanups.

### Removed

- Clean up and temporarily disable alias completion.

### Fixed

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

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

- Handle `:restart` correctly with Python eggs.

- Handle an invalid cwd properly.

- Fix popping of a dead question in prompter.

- Fix `AttributeError` on config changes on Ubuntu.

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

- Handle category being `None` in Qt message handler.

- Force-include pygments in `freeze.py`.

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

- Encode `Content-Disposition` header name properly.

- Fix item sorting in `NeighborList`.

- Handle data being `None` in download read timer.

- Stop download read timer when reply has finished.

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

- Fix crashes when entering invalid values in `qute:settings`.

- Abort questions in `NetworkManager` when destroyed.

- Fix height calculation of download view.

- Always auto-remove adblock downloads when done.

- Ensure the docs get included in `freeze.py`.

- Fix crash with `:zoom`.

## v0.1

Initial release.