2016.11.27: Version 0.9.1 is released


This is another release of the 0.9 series of uzbl bringing a collection of bugfixes.

Get the release from github. If upgrading from a PRE-0.9 version then also make sure to read the upgrading instructions


2016.02.28: uzbl 0.9


Uzbl version 0.9.0 is released.

With a lot of big refactoring and smaller patches piling up over the past years this release is, needless to say, way overdue.

So what's with the version number? Why not 1.0? We wanted to make a 1.0 the version with fully supported WebKit2, but this is not that. In fact WebKit2 support is completely removed from 0.9 to let us focus on getting something stable.

With 179 files changed, 20242 insertions(+), 10994 deletions(-) the full list of changes would be much to long include here, instead here's a small overview.

  • A big refactor and clean-up of core
  • An almost rewrite of the python event-manager
  • Restructured and renamed commands for better consistency
  • Support for composing characters using dead keys
  • And various assorted bug fixes

The new release is available on github. Also make sure to read the upgrading instructions if upgrading from earlier versions.

Looking ahead WebKit2 is the next big challenge and the plan is to start building uzbl 1.0 in the next branch that will only support WebKit2 but still with the same API towards scripts etc. as this release.


2012.05.14: World Naked Gardening Day


This release is mostly fixes for bugs.

  • copy and paste behaves less strangely
  • fancy textareas perform better
  • by default Uzbl passes multiple clicks through to Webkit; there's a handle_multi_click variable that can be set so that you can do your own handling
  • cookies.txt is now created chmod o-r so that other users on your system cannot access it. (Existing cookie files will have their permissions changed.)
  • the back and forward commands can now take a numeric argument to go back or forward multiple steps

In the development version we've rewritten the event manager in Python 3 and exposed more Webkit functionality.


2011.11.28: 28 de Noviembre


We've added a toggle command that cycles a variable through a list of values:

# you can give the command a list of values to toggle between
# this keybinding will enable/disable a proxy
@cbind -pr = toggle proxy_url 'http://localhost:8123/' ''

# if you have several proxies you could cycle between them by passing more
# urls to the command.

# numeric variables default to toggling between 0 and 1.
# this keybinding will turn the status bar on/off.
#   (the toggle_status command still exists, but is deprecated)
@cbind  t   = toggle show_status

Uzbl can now do very basic SSL verification. Two new variables have been added: ssl_verify tells uzbl whether to check SSL certificates, and ssl_ca_file tells uzbl which certificate authority (CA) certificates to verify against.

Note: ssl_ca_file needs to be correctly set for any verification to be performed!

The UI for an SSL verification failure is really awful, it just pops up a rather confusing error message. I wanted to do much more with this, but at this point it's just better to have anything.

A new mode has been added to the scroll command, you can scroll to an absolute location.

# scrolls to 50 pixels from the top of the page
scroll vertical 50!

The default home page has some advice on what to do once you've got uzbl installed, and I've added a keybinding cheat sheet to the website.

We have big plans in the works for the next few months. A major refactor of the event manager has been completed (it would have been in this release but I need to put more thought into the installation process). And the massive task that I've been dreading - a complete rewrite of the command language - is well underway.


2011.10.01: Release early, release occasionally


Not many new features this time, just a slew of bugfixes and bunch of refactoring.

  • breaking change: the variables disable_plugins and disable_scripts have been replaced by enable_plugins and enable_scripts, for more consistency in variable naming.
  • added events for double and triple clicks
  • added a spellcheck_languages variable.
  • on some systems windows and tabs took a long time to close, this has been fixed.


2011.07.25: Scrollbars have defeated us


A quick bugfix: the scrollbars_visible option is completely gone. It didn't work at all with GTK3 builds, and a discussion on the Webkit-GTK mailing list made it apparent that the method we were using was never intended to work.

Besides, there's a better way: you can use GTK's theming capabilities to turn scrollbars off, or style them to be less offensive.


2011.07.17: Time Keeps on Slipping


Well hello again! It's been a few months since the last time we talked. Since then, uzbl has gained:

  • a download command that triggers a download (this is useful because it can use the cookies and authorization details that are available to webkit)
  • a script for saving URLs to read later has been added to the example configuration. <Ctrl>d adds a URL to the list, and D loads a URL from it.
  • some uses of X properties. Uzbl now sets an UZBL_URI X property on its windows, and a window_role variable is available to set the WM_WINDOW_ROLE property. Some window managers can use these properties to treat different Uzbl windows differently.
  • the scrollbars_visible option has been removed when Uzbl is built with GTK3. Scrollbars can be hidden using GTK's styling capabilities.
  • we now automatically build a GTK3 version if possible.

And various bugfixes (window resizing on some window managers, opening paths on the local filesystem, etc.).


2011.04.12: Happy Yuri's Day


50 years of humans in space! Not really that long, when you think about it.

So, what's new with uzbl?

  • new example bindings:
    • <Ctrl>p makes a hardcopy of a page
    • gw opens a new window (even when the NEW_WINDOW event is configured to open a tab)
    • zs switches from http to https in the current window
    • zS switches from http to https in a new window
  • big improvements to the keyboard link follower:
    • following links within frames
    • activating onclick elements
    • prettification
  • improved example download handler
  • uzbl-tabbed:
    • --socketdir and --fifodir arguments

And of course various bugfixes.

Many thanks to everybody who contributed!


2011.03.17: Uzbl-tabbed Bugfix


Yesterday it was pointed out that uzbl-tabbed is broken in the 2011.03.14 release, due to the changes in the format of event messages.

This is a very boring release that fixes that.


2011.03.14: Happy Pi Day


Today's release brings you:

  • a command history event manager plugin. Default bindings are <Up> and <Down> for browsing recent commands, and <Ctrl>r for searching through the command history.
  • an updated (much more readable) formfiller script. Unfortunately the new formfiller uses a different data syntax, so any saved data remaining from the old formfiller won't work.
  • improved vim syntax highlighting
  • a current_encoding variable that lets you force the current page to be interpreted with a certain text encoding.
  • support for cookie daemons (deprecated in the last release) has been removed.

And of course various bugfixes.

Many thanks to this month's team: Taylan Ulrich Bayırlı, Felix Herrmann, k0ral, David Keijser, Jake Probst, and Gregor Uhlenheuer. Any breakages are my fault :).


2011.02.15: Too long between releases!


Wow, it's already been 3 months since the last release? That's too long.

I've been dreading this release, because it breaks backwards compatibility. In short:

  • the way downloads are handled has changed
  • $UZBL_FIFO, $UZBL_TITLE are available to scripts as environment variables, but not as command-line arguments.
  • $ENVIRONMENT_VARIABLES are no longer expanded by the config parser
  • cookie daemons are no longer supported

The full details are on the wiki, including how to get your browser working again.

The good news is:

  • downloads will work on sites that they didn't before
  • it's easier to write and understand scripts
  • uzbl parses commands faster and more consistently
  • uzbl can make requests immediately rather than waiting for a response from an external cookie handler

Besides these changes and various cleanup and bugfixes, we have:

  • a per-site-settings script that executes commands from a config file based on the current URL
  • powerful cookie whitelisting and blacklisting
  • gtk3 support (we build against gtk2 by default, enabling gtk3 requires uncommenting some lines in the Makefile)
  • the accept_languages variable, which controls the Accept-Language HTTP header
  • a split statusbar that allows right-aligned content

This release was brought to you by Ben Boeckel, k0ral, David Keijser, Jochen Sprickerhof, and myself. (I'm the one to blame for the compatibility changes.)


2010.11.25: Beware, I Live! (Now faster, more stable and more capable)


Hey folks! Things have been quiet here for a while, but uzbl is still steadily improving. In the last 3 months we have:

  • fixed a bug that caused uzbl-tabbed to hog CPU time after closing a tab
  • introduced a C cookie daemon that uses a much faster algorithm than uzbl-cookie-daemon
  • fixed a crash when opening an image in a new window
  • fixed several memory leaks
  • added SCROLL_VERT and SCROLL_HORIZ events, which allow us to display the scroll percentage in the status bar again
  • added the show_inspector command to show the Web Inspector
  • added the enable_pagecache variable to enable the Webkit Page Cache
  • added some new default keybindings
  • refactored the default shell scripts to share code
  • and fixed and tidied lots of other little things

Thanks to Ben Boeckel, Michael Raskin, Daiki Ueno, Lars-Dominik Braun and Paweł Zuzelski for these patches, and for keeping development active! (Thanks also to those whose patches still need to be merged, I'll be getting to those too.)

There's still a lot that all of us can do to help make uzbl better, and a lot of cool things that uzbl can do for us. I'm looking forward to seeing what people come up with!


New maintainer


Hi, as of today Brendan Taylor (aka 'bct') will be the new uzbl maintainer / project leader.

Uzbl started about a year and a half ago as an experiment, an attempt to make web browsing more bearable for hackers. We didn't always make the right choices, but at the very least it has been an interesting journey. I think we've done innovative things. Uzbl (and browsers in general) still have a way to go, but at least the browsing experience is now tolerable. Partly because of our work on uzbl, partly because of some other cool browser projects that have appeared since.

Personally I've lost of interest in devoting much of my spare time on Uzbl. I have other projects going on (open source stuff, and real life projects), and I want to be more a user, less a coder.

There are various foss projects where progress goes slowly - releases taking easily a year or more - but that's not how I want it to be for Uzbl. Uzbl has clearly an active user/contributor base and it's sad to see to the pile of pending patches / pull requests just getting bigger and bigger. In the spirit of "release early, release often" I think the project also needs somebody who can at least keep up with, and preferrably, drive the progress. There's still so much innovation which can be done, and now I feel I'm holding it back.

Brendan has been a long time contributor, he seems to know what he's doing, and he has some things he wants to tackle, so I'll think he's the right person for the job. He'll share his plans with you guys shortly.

Practically, to keep things simple, the repositories stay the same. That is:

Brendan will be the guy deciding what goes in and what doesn't. He'll be the one deciding over your pull requests and patches (but again: community feedback is always welcome!) He'll also be the one defining the direction of the project, and he's in charge of the website/wiki/bugtracker/... (although we of course all pitch in where we can, right ;-)

So, welcome Brendan!


2010.08.05: Security fix and EM overhaul


The 2010.08.05 release comes with a patched config file. With shell code in hyperlinks on a page, one of the sample (uzbl-core) resp. default (uzbl-browser) button bindings (binding for mousebutton2) would execute this code. This commit fixes that issue. Note that just upgrading your uzbl is not enough. If you have an existing config, the change will not be automatically applied. So be sure you have this change in your config. Thanks Pawel Zuzelski and 'Chuzz' for spotting this. ticket 240 has more info

This release also comes with improvements to the formfiller, and a refactoring of the EM and EM plugins. See the commit for details. I believe the most interesting one is the introduction of hooks for EM plugins. Due to this refactoring, some stuff in the config has changed. You will need to merge these changes from the default/sample config into yours.

There is a whole bunch of further pending contributions, but I'm a bit short on time lately. Stay tuned.


Archcon Uzbl presentation


Archcon 2010 was an Arch Linux conference in Toronto, Canada last week.

Next to my Arch duties I also gave a talk about Uzbl. Basically I took the Uzbl lightningtalk at Fosdem and:

  • took more time to go into some details
  • added a section about other interestping browsers
  • discussed the current limitations and roadmap

slides (pdf) video

On the Archcon site you can find more info, pictures and videos. On my personal blog I did a blogpost about Archcon and my trip to Canada.


2010.04.03: Working gmails, better formfillers, less bads and more goods



  • One new formfiller.sh to rule them all. Features: posix sh, multiple profiles per site (if needed), correctly talks to uzbl (doesn't do any http)
  • download.sh: use content-disposition header (so you get more sensible filenames) and tell wget to use `$XDG_DATA_HOME/uzbl/cookies.txt`
  • bookmark script: strip tags from pagetitles when saving new bookmarks to avoid bogus separations
  • Removed inferior/duplicate/broken scripts: cookies.sh, follower.js, hint.js, formfiller.pl, linkfollow.js, scroll-percentage.js, extedit.js. In the future we will probably use formfiller.sh or something as extedit.js and scroll-percentage can maybe be reimplemented without using Uzbl.run()


  • Gtk notebook tab reordering
  • Handle SIGCHLD to correctly reap children
  • Simpler (and working) plaintext session saving/loading. no more json


  • Support both http and (new) javascript cookies. This should fix problems with gmail and probably other sites
  • `javascript_windows` parameter to control whether JS can open new windows by itself
  • replaced old `new_window` handler with `NEW_WINDOW` event. You can use this event to open links (normal links or js links) in the same/new window, but also to open the link in a new tab in uzbl-tabbed. (see config)
  • some fixes in cleanup()
  • Allow period character in variable names (update your user agent, see config)
  • Don't try to steal focus if in plug mode
  • simplify uri command. now just wraps around `set uri`
  • remove deprecated `download_handler`. we already use the `DOWNLOAD_REQUEST` event


  • you can use both tabs and spaces in the config now
  • `` binding to dump xclip contents into keycmd
  • `` binding to escape
  • Reload only reloads set commands. This avoids things such as adding entries to your menu twice when reloading (but does not restore binds anymore)
  • fix `` bind


  • stopped duplicate compiling
  • use DOCDIR
  • set correct permissions on all installed files


  • Vim syntax file for uzbl config

Dropped dependencies:

  • perl
  • python-json

From now on, we encourage users to write their scripts in either posix sh or in python, to minimize dependencies when the scripts end up in the main tree.

Syntax hilighting in vim:

syntax highlighting

This release is brought to you by Alex Alexander, Cedric Staub, Dmytro Milinevskyy, Jake Probst, James Campos, Pawel Tomak, Paweł Zuzelski, Israel Levin and of course Mason Larobina, Rob Manea and myself.


2010.03.14: mouse pointer events, http auth handler, uzbl-tabbed improvements, ...


  • resource-request-starting event. An event for every resource requested (incl. images, stylesheets, etc) (Andrea Marchesini)
  • mouse pointer events. (No plugins yet to handle them) (Igor Bogomazov)
  • http basic authentication handler (Paweł Zuzelski)
  • Plugins can now share non-function objects through the export mechanism (Mason Larobina)
  • New uzbl-tabbed events: NEW_BG_TAB, NEW_TAB_NEXT, NEW_BG_TAB_NEXT to support opening tab next to current and background tabs (Dmytro Milinevskyy)
  • eval_js: print file where the error occured (Simon Lipp)
  • reset the keycmd on load start, not commit (fixes irritating keycmd reset when you were typing while a page was loading)
  • urlencode '@' characters when getting in urls from external sources (i.e. xclip) to prevent variable expansion (Mason Larobina). this is not a permanent fix. we should not alter the url, better escaping system will come some day.
  • fix typo's in zoom binds (Israel Levin)
  • uzbl-tabbed, cookie daemon and EM: don't flush stdout/stderr when not on tty (Israel Levin)
  • check webkit version at runtime, not compiletime (Paweł Zuzelski)
  • fixes in keybinding and related EM plugins (Mason)
  • various (Paweł Zuzelski, Mason, Rob, Dmytro Milinevskyy, me)

2010.02.02: Uzbl-tabbed and linkfollowing back from the dead


A lot of patches have been piling up lately. Looking back I'm suprised myself so much has changed again.

First the awesome news:

  • Uzbl-tabbed is working again. Simon Lipp has done some great work refactoring it so that it works again after the big 2009.11.07 overhaul. It now uses uzbl events to control its behavior, which you can bind with the keybinding system from uzbl-core. Have a look at the added tabbed bindings in the config file. Also various other improvements have been made to it by him and Mason.
  • We have a new link follower script (follow.js). Not only brings this back linkfollowing after it broke in 2010.01.05 (this one doesn't depend on the Uzbl object), but you can actually configure which keys you want to use for hinting. Hence we dropped follow_Numbers.js and follow_Numbers_Strings.js. Thanks Jason Woofenden and 'tczy'.

Then the good news:

  • README cleanup (Daniel M. Hackney)
  • FAQ additions/updates (me)
  • config cleanup, added uzbl-tabbed bindings (Mason)
  • various fixes to various python scripts/plugins (Mason)
  • remove all references to Uzbl object and jsh in config. Middleclick-bind and yanking are working again, they are implemented in sh (Mason)
  • scrollbars_visible option (Simon Lipp)
  • some uriencode url fixes (Mason)
  • print_events (to stdout) option for uzbl-core (Simon Lipp)
  • argument expansion EM plugin (Mason)
  • cleaner buildprocess (don't force binary stripping, better sandbox, ... ) (Pawel, Mason, me)
  • directory reorganisation (me)
  • better javascript error handling (Simon Lipp)
  • strip leading whitespace from uri (Paweł Zuzelski)
  • various other thingies...

The somewhat bad news: scroll-percentage.js, extedit.js, auto-insert-mode-on-field-focus and similar tricks are still broken. We're still figuring out how to bring back the Uzbl object (or something similar) in a secure way. We will probably use Google's isolated worlds but it's not yet ported to WebkitGtk+.

Hope I didn't forget anything...


Uzbl @ fosdem 2010


I will be doing a lightningtalk about uzbl at the fosdem conference in Brussels on 6/7 february. more info.

I hope to see you all there!


2010.01.05: Nasty security bug


Simon Lipp brought to our attention a nasty security bug. Apparently there are ways for javascripts from a website to reach our 'Uzbl' object an use its "run" function, by using DOM method overriding, stack inspection and maybe more. I'm far from an expert in the field so I suggest you check the thread on the mailing list for more details. But basically, if site admins modify their JS they can use the 'Uzbl.run' feature to execute uzbl commands (such as shell commands). One of the many possible exploits is demonstrated here. It will show you the output of 'cat /etc/fstab'.

So do not run any uzbl version that has the 'Uzbl.run' feature (was introduced at release 2009-07-03).

We're currently finding out how to plug this hole decently without loosing features, but for now you should use this new release which is nothing more then 2009.11.22 with the Uzbl object disabled. This will break local javascripts who rely on it, such as: - link follower scripts - scroll-percentage.js (used for displaying the scroll percentage in statusbar) - extedit.js (used for editing html textareas with external editor) - js code in config to focus input area on pageload and change mode depending on focus.

All my git branches also have this temporary fix applied


2009.12.22: Mode-specific keybinds and stuff


  • mode-specific keybinds
  • executing commands through shell or directly
  • loading javascript from file
  • better sandbox in build environment
  • COMMIT variable setting when building from tarball. For all nice packagers out there.
  • geometry=maximized support
  • reset keycmd correctly in linkfollow scripts
  • create socket before daemonizing python daemons
  • various fixes and patches
  • and more...

See readme and new (sample)config for details. (this stuff is backwards compatible. your old config will still work)

Thanks to Ciprian Dorin Craciun, Jason Woofenden, 'Vithon' and the usual suspects.


2009.11.30: Bugfixes and two cool new scripts


Apparently the argument expansion of the script command was kinda broken for a while, which caused - among others - the linkfollower scripts to stop working, this release brings a fix and more cool stuff. Changes:

  • Scroll-percentage display script (like emacs and vim)
  • Script to edit textareas and other editables in external editor
  • Clean up sockets/fifos on SIGSEGV and other relevant signals (should fix most "fifo already exists" problems)
  • Fix malfunctioning parameter expansion when executing javascripts
  • Don't hardcode WM class

Thanks to Aldrik Dunbar (aka 'N3ON') for the scroll-percentage script and Rob and Mason for their good work as usual.

Two more notes:

  • The 'Ran out of links' warnings are caused by a regression in GTK. This is now fixed upstream
  • The linkfollower scripts need a big makeover. See this thread for more info.


2009.11.29: Completion plugin, mouse events, better scrolling and more.



  • Keycmd completion plugin (see below) (Mason)
  • Mousebutton events (not yet combinable with modkeys) (Rob)
  • Improved scroll command (Nicolas Pouillard)
  • Security fixes in download.sh and scheme.py (Andy Spencer)
  • `search_clear` command to clear search string (Rob)
  • Give all executables in `$PATH` 'uzbl-' prefix (Dieter)
  • Socket I/O fixes (Rob)
  • better utf-8 handling with `KEY_PRESS/RELEASE` (Rob)
  • Point to correct prefix in default config (Dieter)
  • Removal of deprecated yank, clipboard, cookies.py scripts (Dieter)
  • Stacked bindings work from the insert mode now. (Mason)
  • `MODKEY_ADDITION` request to group multiple modkeys as one (Mason)
  • `IGNORE_KEY` request to customize which keys to ignore. This also allows non-english users to ignore function keys they need to press to access special characters without those keys registering as a modkey action. (Mason)
  • Many various fixes and improvements in code and documentation. big TODO cleanup

Keycmd completion plugin: This plugin for the event manager (used in uzbl-browser) completes:

  • variablenames (with '@' prefix)
  • commands
  • variablenames in the set command (without '@' prefix)

The completion plugin aims to behave as similar to bash completion as possible.
When you press 'Tab':

  • If there is only one possible completion, it will complete right away
  • Otherwise, the keycmd will expand to complete as much as possible and will show you all options when you press 'Tab' again
  • If the keyword is in the completion list and you press 'Tab' again a space will be injected into the keycmd, in the case of set completion a ' = ' will be injected instead.



2009.11.07: A huge makeover. The second phase in the life of uzbl


For the last two months, Rob Manea and Mason Larobina have been doing truly awesome work giving uzbl a much needed makeover and today, all those changes should be ready for wider consumption. Various patches were also contributed by Barak P, Brendan T, David K, Maximilian G, Olivier S and yours truly. (authors file)


  • splitup and better separation of concerns: uzbl-core, uzbl-browser and uzbl-tabbed. Basically:
    • Uzbl-core is the old uzbl, minus the built-in event handling, and minus the keyboard interface. (statusbar is still there, but more flexible)
    • Uzbl-browser is a complete, "working out of the box" browser implementation based on uzbl-core and many of the scripts we already knew. It handles a lot of the events from uzbl-core, it also handles keyboard input, it updates the statusbar when appropriate, and also some more things.. (read on)
    • Uzbl-tabbed is the old uzbl-tabbed, but refactored to work with the new uzbl-browser. (note: this is not done yet. uzbl-tabbed is broken in this release, you'll have to wait a bit or try out jake's C++ tab manager)
    For more information, refer to the readme.
  • EM (event manager) instead of handlers : very finegrained, language agnostic way to handle events: anytime anything happens, uzbl-core emits a message on stdout and/or over a socketfile, so you can handle everything (or not) however you want. The only remaining handlers right now are cookie, download and scheme. On the long term we want to shift all of those to the events system, but then we'd need synchronous events..
  • Much better keybinds (support for special keys, everything is configurable, better Modkeys, more generic/flexible modes). Your old binding strings should be backwards compatible, but the way binds are defined is now different.
  • ability to add entries to the various context menus
  • print support
  • and much more
  • the website and docs have also had an overhaul to reflect these changes

I highly recommend you study the new sample config carefully. A lot of things have changed, and a lot of things are now possible which weren't before. Many of these things are now demonstrated in the sample config.

Also, if you were using many of the example scripts from the old uzbl, you probably now just want 'uzbl-browser'. It comes with all the scripts by default, so you can remove them all in your XDG* dirs (unless you want to override them).

PS: If you run uzbl on the commandline, you'll see a lot of 'Gtk-WARNING **: Ran out of links' messages. We haven't figured out yet what these are but they seem harmless.


Segfaults with WebkitGtk


Are you getting segfaults since you upgraded your libwebkit? Try downgrading it to or earlier. The WebkitGtk guys told me they will do a bugfix release, but we impatient Arch users can check:

Btw: we're also preparing a new Uzbl release, based on the huge improvements Rob and Mason have been doing (much better command interface/key handling/events/refactorings/..) If you want to get a sneak preview, try out the experimental tree.

UPDATE: you can also use a new webkit version if you compile enchant with "--disable-zemberek"


2009.09.12: many refactorings, fixes and improvements


  • uzbl: deprecate the history_handler variable. The script stays, but you can bind to load_finish_handler. (Tom Adams)
  • uzbl: more sensible (better performing) max_conns and max_conns_host (me)
  • uzbl: don't hardcode keycmd clearing on load_start and make it optional (Tom Adams)
  • uzbl: always_insert_mode fix (James S Wheaton)
  • cookie_daemon.py: domain whitelisting (Michael Fiano)
  • cookie_daemon.py: initscript-like {start|stop|restart|reload} commands (Mason Larobina)
  • cookie_daemon.py: prevent duplicate daemons (Mason Larobina)
  • uzbl_tabbed: multiline tablist (Jake Probst)
  • uzbl_tabbed: bring_to_front (Devon Jones)
  • Makefile: /usr/local prefix by default (Tom Adams)
  • configs: don't put things like hostname in default user-agent (me)
  • various code cleanups and improvements
  • deprecate uzblctrl in favor of the more generic socat tool. (Tom Adams)

  • 2009.09.12 tree

  • 2009.09.12 tgz

In the meanwhile, the event-messages branch has been moved into experimental. The diff is huge, it's still a work in progress but everyone clearly agrees that this is "the future".
It will bring many improvements, such as binding of special keys, a good implementation of Modkeys and finegrained event handling in whichever (scripting) language you want. See this mailing list thread for more details.


Projects based on / inspired by Uzbl


Sometimes people disagree on some aspects and start their own project. Or they want more, and build something new on top of the existing codebase. Here is a list of all uzbl-based/inspired projects I'm aware of:

  • uzbl_tabbed: Python-based wrapper around uzbl (using Xembed) which provides tabs. This script is included with uzbl, in the examples directory. (started by Tom Adams and currently led by Mason Larobina)
  • pyweb: A browser ('framework') in python, inspired by uzbl. The main point here is complete integration with python, and hence compromiseless flexibility (if you like python) (led by Tom Adams)
  • surf: I think I can best describe it as: 'Surf is to Uzbl what dwm is to wmii.' Their codebase is smaller, but if you want to customize/integrate you'll need to hack some C. (suckless.org)
  • ffuzbl: A firefox add-on which brings the look and feel of uzbl to firefox. (but doesn't use uzbl itself) (Azer Koculu)
  • Ezbl: Probably the youngest of them all; this project aims to provide a browser in emacs by embedding uzbl using Xembed. (Daniel Hackney)

I also would like to port uzbl to / package uzbl for the n900. I have a project page (uzbl mobile) but didn't find the time to work on it yet.


PS: We're currently hacking and refactoring 'events' in uzbl. It will be much easier to handle all kinds of events (better then the current handlers) and also we'll be able to improve the keybind system a lot. (See mailing list post for details)

2009.08.26: scheme_handler, cookies_daemon.py and some fixes


  • scheme_handler: lets you define actions for url's who begin with 'mailto:', 'git:', 'irc:' and so on. (thanks to Tom Adams)

  • cookie_daemon.py: based on cookies.py, but now in daemon implementation for fast performance. For usage instructions and more info see cookie_daemon.py wiki page
    (Thanks Mason Larobina)

  • download handler gets same proxy setting as uzbl (Paweł Zuzelski),

  • Home/End keys forwarding

  • 2009.08.26 tree

  • 2009.08.26 tgz


2009.08.08: fast cookies (WIP), custom variables, default font_families and more


  • talk_to_socket command: yeah baby this is it. With this thing you can have handlers running in the background listening on a socket. You can use this for fast communication with handlers instead of respawning them all the time. You can try lwithers' cookie handler but some people are also working on a python one. Note that the current example config still uses the slower spawn command! We will improve this in the future to ship a socket based handler and use talk_to_socket by default.
  • removed html_mode in favor of "data URI scheme"
  • custom variables: you can now set your own variables in your scripts and config file and use them whereever you want.
  • setting of default font_families.
  • uzbl_tabbed.py:
    • on the fly session saving and loading
    • cleanup itself after being SIGTERM'd or SIGINT'd from the terminal
    • re-factored fifo code

Get it while it's hot:

Again, a huge thanks to all contributors! They are the ones making this happen.


2009.07.18: unit testing, better variable expansion, new_window handler and more


I recently introduced a new contribution workflow which allows us to handle contributions more transparantly and efficiently, and thanks to it, I've been able to integrate a lot of pending code.

So, a 5818 lines changeset brings:

  • a unit testing framework
  • better variable expansion with support for constants and html escaping.
  • delete our old Gscanner based keyword replacer, we now use our variable expansion everywhere. Note that you probably have variables such as KEYCMD, MODE, UNAME, COMMIT etc in your user agent/statusbar, these will need to be replaced with the new variables/constants. Look at the sample config and readme for details.
  • documentation updates (a list of all possible variables and constants, among others)
  • customizable "new window" handler for links with target="_blank" and such
  • address scheme parameter for cookie handlers (sample cookie handlers are updated)
  • cookies.py should now also work better with gmail and facebook.
  • support for calling: uzbl example.com (eg you don't need the -u flag anymore), which helps integration with some other tools such as urxvt and Xfce.
  • added --version argument to see commit hash.
  • added --geometry flag to start uzbl with given geometry/position.
  • cleaned up sample config a bit
  • portability improvements (use more posix sh, work with gmake on BSD etc)
  • several small fixes and cleanups

Get it while it's hot:

Note: uzbl can still be quite slow if you're using a cookie handler. This is because we spawn a new process (and a script for that matter) for each single http request. We're working on resolving this...

Again, a huge thanks to the plenty of people who've done contributions!


Cool new stuff. First release. And a nice community contribution...


Hi. I intend to make the lives of downstream packagers a little easier so I will call my master tags "releases" and provide links to tarballs. Expect a new release every few weeks or so.

So here is the first uzbl alpha release, version 2009.07.03

This version brings:

  • A JS object to execute commands (be sure to read the security implications in the readme)
  • config file changes: command substitution, variable expansion, javascript substitution
  • bidirectional socket (responses come back through the socket now)
  • reading config from stdin is optional now (so you can background uzbl)
  • Makefile compat fix, typos, cookies.py XDG paths bugfix and more small stuff

For people with crappy window managers or on platforms over which they have very little control (*cough* you know who you are), lazy ones or just those who haven't seen the light yet, there is more good news:

Some people in the community have taken it on them to improve uzbl_tabbed.py... a lot! (uzbl_tabbed.py was the proof of concept script introduced 2 weeks ago to demonstrate the Xembed functionality) While it is quite new, I must say it is starting to look quite nice (and configurable).

It's not for everyone, but I think some people will really like it. You'll find this updated version in the example scripts directory.

Screenshot Screenshot

More info: Uzbl wiki: uzbl tabbed

PS: There are still plenty of patches in my todo list. Give me some more time :)

kthxbye. Dieter

2 Months of hacking (working). A status update.


Depending on who you ask, you'll get various opinions on the state and usability of uzbl. Some people are already using it full-time, others are waiting for (or hacking on) one or two specific features they really want.

For me personally, what I still consider must-haves that are not finished yet:

  • better (faster) way of doing cookies, using one process instead of forking expensive python scripts all the time. (this is being worked on)
  • a good instance management script that considers tag/name/page state etc.

Others seem to want:

  • DOM access from C ~ better link following. (this is being worked on)
  • greasemonkey and fancier JS extensions. (this is being worked on)
  • a slightly more versatile configuration language (being worked on)
  • refactoring keyboard shortcut interface

But other then that, yeah uzbl is pretty usable.

Also, I don't know about you but I just love (random) statistics so here you go:

  • peak amount of people on IRC: 83
  • project followers on github: 95
  • mailing list messages: 101
  • commits (experimental): 1123
  • lines of C code: 3198 (I hope this doesn't rise too much anymore)
  • lines of code in sample scripts: 1341
  • contributors: 27 (including myself)
  • website visits: 33.600 (12.681 on may 26th, the day we were on HackerNews)

Furthermore, it seems like the wiki also started flourishing: The howtos section lists tutorials for Gentoo, Debian, Ubuntu, PLD, MacOSX and NixOS. And on the scripts and config pages people are posting really cool stuff.


Xembed, more useful sample configs/scripts and more.


Master branch now contains/supports:

  • Gtk Plug/Socket (Xembed), comes with sample python script for tabbing uzbl
  • a simpler way to play/test/develop/use for real: The same config file and set of scripts can now used for all situations, by just overriding the XDG variables.
  • patches for building on some different *nixes (BSD,OSX)
  • bugfix for segfault on multibyte backspacing.
  • Gtk icon.
  • Zoom type toggle (full content vs only text)

There is a lot of stuff pending to be merged in experimental as well (javascript/greasemonkey/DOM exposure/full duplex socket/uzbl config language features,..), so stay tuned!

As usual, thanks to all contributors. The list just keeps growing and growing.


Cookies, custom stylesheets, and more.


Master branch now contains/supports:

  • basic cookie support. it just stores all cookies and submits them again when visiting the same domain. No policies or complete implementation yet. (EXPERIMENTAL)
  • override page layouts with custom stylesheets
  • improved formfiller and linkfollow scripts
  • merged the concepts of actions and commands. you'll need to compare your configs and scripts again to the sample files. argument order may be different too.
  • command chainging (multiple commands in one go)
  • variable expansions in your configs and commands
  • 'data:' and 'javascript:' urls
  • setting the zoomlevel (eg set to 1.0 to reset zooming)
  • dumping your entire configuration to stdout
  • customize insert/command indicators
  • should compile on BSD
  • compiles as c99
  • Makefile $PREFIX support
  • bugfixes and many small improvements (suprise !) The bug that bothered many people, that is when launching uzbl it would load the uri set in your config instead of the one passed on the command line, is fixed.

Thanks to all contributors.

More goodies


The uzbl project is now just over one month old. To celebrate that we bring you the following goodies in the master branch:

  • sample script "form filler". aids in creating and running per-domain configs for auto-filling of html form values. ( eg "remember password" but more flexible)
  • various more things to tune (autoload_images, enable_spellcheck, disable_scripts, resizeable_text_areas, default_encoding and more)
  • Html mode so you can "use | uzbl | like this" and do really fancy things.
  • Webkit inspector
  • loading of JS in files
  • slightly improved command syntax (see example configs)
  • bugfixes and many small improvements (suprise !)
  • better documentation

As usual, don't have too high expectations. We are not even alpha yet... We've seen again great interest and input from many people. Thanks a lot guys and girls.




There is now a wiki, to share Uzbl configs, scripts, screenshots, and suchlike.

Mailing list


We now have a mailing list: uzbl-dev@lists.uzbl.org This will be the place for discussions.

For more info, see the new community page.

More updates


The master branch is again in sync with the experimental one and brings you these features:

  • overhauled the config system. no more ini-files. We now use files with commands in the same syntax as what you write to the fifo/pipes etc.
  • Entire configuration can be altered at runtime.
  • more advanced binding and command parsing options (see sample config)
  • support for dmenu-vertical (see screenshot). The sample scripts allow you to also search in page titles, bookmark tags etc if you have dmenu-vertical installed
  • customizable window title
  • massive documentation updates, which are also reflected on the website
  • and quite a lot smaller fixes, additions and sample scripts...

As usual, plenty of people have been contributing to uzbl, and we keep welcoming new people. See the AUTHORS file for details. Thanks all!

screenshot thumbnail


Some updates


Various things have been improved/added recently. Here are the main ones. I may have forgotten some.

  • Keyboard based link following (uses link numbering for now)
  • Customizable statusbar (both in what it shows, and in colors)
  • Network settings (max connections, proxy, user agent (with variable replacement))
  • Searching
  • multichar key bindings
  • bindings that can use arguments (other browsers call this "keywords")

You can find these new goodies in the master and experimental branches. Don't forget to have a good look at the sample configs and scripts, and the docs.

Thanks to all contributors!

We also have a logo now, thanks Thorsten Wilms!


  • some sort of "multiple instances management" (Not saying tabs)
  • cookies
  • much more

screenshot thumbnail

First prototype


We have something usable now. You can run uzbl and try out the browsing and loading new url's from history and/or bookmark file. Editing url's is a bit cumbersome for now. Please see README to get you started. Building instructions are on this site.

The mostly-uzbl website


Uzbl now has a website, while there isn't much on it right now, I have a TODO list of features to implement. Like a news RSS feed. Possibly a simple forum in the future. Whatever. So, this will serve as the project's home page from now on :)