Frequently asked questions
==========================
:title: Frequently asked questions
The Compiler <mail@qutebrowser.org>

[qanda]
What is qutebrowser based on?::
    qutebrowser uses http://www.python.org/[Python], http://qt.io/[Qt] and
    http://www.riverbankcomputing.com/software/pyqt/intro[PyQt].
+
The concept of it is largely inspired by http://portix.bitbucket.org/dwb/[dwb]
and http://www.vimperator.org/vimperator[Vimperator]. Many actions and
key bindings are similar to dwb.

Why another browser?::
    It might be hard to believe, but I didn't find any browser which I was
    happy with, so I started to write my own. Also, I needed a project to get
    into writing GUI applications with Python and
    link:http://qt.io/[Qt]/link:http://www.riverbankcomputing.com/software/pyqt/intro[PyQt].
+
Read the next few questions to find out why I was unhappy with existing
software.

What's wrong with link:http://portix.bitbucket.org/dwb/[dwb]/link:http://sourceforge.net/projects/vimprobable/[vimprobable]/link:https://mason-larobina.github.io/luakit/[luakit]/link:http://pwmt.org/projects/jumanji/[jumanji]/... (projects based on WebKitGTK)?::
    Most of them are based on the http://webkitgtk.org/[WebKitGTK+]
    http://webkitgtk.org/reference/webkitgtk/stable/index.html[WebKit1] API,
    which causes a lot of crashes. As the GTK API using WebKit1 is
    https://lists.webkit.org/pipermail/webkit-gtk/2014-March/001821.html[deprecated],
    these bugs are never going to be fixed.
+
The newer http://webkitgtk.org/reference/webkit2gtk/stable/index.html[WebKit2
API] seems to lack basic features like proxy support, and almost no projects
seem to have started porting to WebKit2 (I only know of
http://www.uzbl.org/[uzbl]).
+
qutebrowser uses http://qt.io/[Qt] and http://wiki.qt.io/QtWebKit[QtWebKit]
instead, which suffers from far less such crashes. It might switch to
http://wiki.qt.io/QtWebEngine[QtWebEngine] in the future, which is based on
Google's https://en.wikipedia.org/wiki/Blink_(layout_engine)[Blink] rendering
engine.

What's wrong with https://www.mozilla.org/en-US/firefox/new/[Firefox] and link:http://5digits.org/pentadactyl/[Pentadactyl]/link:http://www.vimperator.org/vimperator[Vimperator]?::
    Firefox likes to break compatibility with addons on each upgrade, gets
    slower and more bloated with every upgrade, and has some
    https://blog.mozilla.org/advancingcontent/2014/02/11/publisher-transformation-with-users-at-the-center/[horrible
    ideas] lately.
+
Also, developing addons for it is a nightmare.

What's wrong with http://www.chromium.org/Home[Chromium] and https://vimium.github.io/[Vimium]?::
    The Chrome plugin API doesn't seem to allow much freedom for plugin
    writers, which results in Vimium not really having all the features you'd
    expect from a proper minimal, vim-like browser.

Why Python?::
    I enjoy writing Python since 2011, which made it one of the possible
    choices. I wanted to use http://qt.io/[Qt] because of
    http://wiki.qt.io/QtWebKit[QtWebKit] so I didn't have
    http://wiki.qt.io/Category:LanguageBindings[many other choices]. I don't
    like C++ and can't write it very well, so that wasn't an alternative.

But isn't Python too slow for a browser?::
    http://www.infoworld.com/d/application-development/van-rossum-python-not-too-slow-188715[No.]
    I believe efficiency while coding is a lot more important than efficiency
    while running. Also, most of the heavy lifting of qutebrowser is done by Qt
    and WebKit in C++, with the
    https://wiki.python.org/moin/GlobalInterpreterLock[GIL] released.

Is there an adblocker?::
    There is a host-based adblocker which takes /etc/hosts-like lists. A "real"
    adblocker has a
    http://www.reddit.com/r/programming/comments/25j41u/adblock_pluss_effect_on_firefoxs_memory_usage/chhpomw[big
    impact] on browsing speed and
    https://blog.mozilla.org/nnethercote/2014/05/14/adblock-pluss-effect-on-firefoxs-memory-usage/[RAM
    usage], so implementing it properly might take some time and won't be done
    for v0.1 if at all.

How do I play Youtube videos with mpv?::
    You can easily add a key binding to play youtube videos inside a real video
    player - optionally even with hinting for links:
+
----
:bind m spawn mpv {url}
:bind M hint links spawn mpv {hint-url}
----
+
Note that you might need an additional package (e.g.
https://www.archlinux.org/packages/community/any/youtube-dl/[youtube-dl] on
Archlinux) to play web videos with mpv.
+
There is a very useful script for mpv, which emulates "unique application"
functionality. This way you can add links to the mpv playlist instead of
playing them all at once.
+
You can find the script here: https://github.com/mpv-player/mpv/blob/master/TOOLS/umpv
+
It also works nicely with rapid hints:
+
----
:bind m spawn umpv {url}
:bind M hint links spawn umpv {hint-url}
:bind ;M hint --rapid links spawn umpv {hint-url}
----

How do I use qutebrowser with mutt?::
    Due to a Qt limitation, local files without `.html` extensions are
    "downloaded" instead of displayed, see
    https://github.com/The-Compiler/qutebrowser/issues/566[#566]. You can work
    around this by using this in your `mailcap`:
+
----
    text/html; mv %s %s.html && qutebrowser %s.html >/dev/null 2>/dev/null; needsterminal;
----

== Troubleshooting

Configuration not saved after modifying config.::
    When editing your config file manually, qutebrowser must be exited completely.
    This can be done by issuing the command `:quit` or by pressing `Ctrl+q`.

Unable to view flash content.::
    If you have flash installed for on your system, it's necessary to enable plugins
    to use the flash plugin. Using the command `:set content allow-plugins true`
    in qutebrowser will enable plugins. Packages for flash should
    be provided for your platform or it can be obtained from
    http://get.adobe.com/flashplayer/[Adobe].

Experiencing freezing on sites like duckduckgo and youtube.::
    This issue could be caused by stale plugin files installed by `mozplugger`
    if mozplugger was subsequently removed.
    Try exiting qutebrowser and removing `~/.mozilla/plugins/mozplugger*.so`.
    See https://github.com/The-Compiler/qutebrowser/issues/357[Issue #357]
    for more details.

Experiencing segfaults (crashes) on Debian systems.::
    For Debian it's highly recommended to install the `gstreamer0.10-plugins-base` package.
    This is a workaround for a bug in Qt, it has been fixed upstream in Qt 5.4
    More details can be found
    https://bugs.webkit.org/show_bug.cgi?id=119951[here].

Segfaults on Facebook, Medium, Amazon, ...::
    If you are on a Debian or Ubuntu based system, you might experience some crashes
    visiting these sites. This is caused by various bugs in Qt which have been
    fixed in Qt 5.4. However Debian and Ubuntu are slow to adopt or upgrade
    some packages. On Debian Jessie, it's recommended to use the experimental
    repos as described in https://github.com/The-Compiler/qutebrowser/blob/master/INSTALL.asciidoc#on-debian--ubuntu[INSTALL].
+
Since Ubuntu Trusty (using Qt 5.2.1),
https://bugreports.qt.io/browse/QTBUG-42417?jql=component%20%3D%20WebKit%20and%20resolution%20%3D%20Done%20and%20fixVersion%20in%20(5.3.0%2C%20%225.3.0%20Alpha%22%2C%20%225.3.0%20Beta1%22%2C%20%225.3.0%20RC1%22%2C%205.3.1%2C%205.3.2%2C%205.4.0%2C%20%225.4.0%20Alpha%22%2C%20%225.4.0%20Beta%22%2C%20%225.4.0%20RC%22)%20and%20priority%20in%20(%22P2%3A%20Important%22%2C%20%22P1%3A%20Critical%22%2C%20%22P0%3A%20Blocker%22)[over
70 important bugs] have been fixed in QtWebKit. For Debian Jessie (using Qt 5.3.2)
it's still
https://bugreports.qt.io/browse/QTBUG-42417?jql=component%20%3D%20WebKit%20and%20resolution%20%3D%20Done%20and%20fixVersion%20in%20(5.4.0%2C%20%225.4.0%20Alpha%22%2C%20%225.4.0%20Beta%22%2C%20%225.4.0%20RC%22)%20and%20priority%20in%20(%22P2%3A%20Important%22%2C%20%22P1%3A%20Critical%22%2C%20%22P0%3A%20Blocker%22)[nearly
20 important bugs].

My issue is not listed.::
    If you experience any segfaults or crashes, you can report the issue in
    https://github.com/The-Compiler/qutebrowser/issues[the issue tracker] or
    using the `:report` command.
    If you are reporting a segfault, make sure you read the
    link:doc/stacktrace.asciidoc[guide] on how to report them with all needed
    information.
