Uzbl follows the UNIX philosophy - "Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface." Uzbl comes in different flavors:
* uzbl-core: main component meant for integration with other tools and scripts
o Uses WebkitGtk+ for rendering, network interaction (libsoup). Css, javascript, plugin support etc come for free
o Provides interfaces to get data in (commands/configuration) and out (events): stdin/stdout/fifo/unix sockets
o You see a webkit view and (optionally) a statusbar which gets popuplated externally
o No built-in means for url changing, loading/saving of bookmarks, saving history, keybinds, downloads, ...
o Extra functionality: many sample scripts come with it, on uzbl wiki or write them yourself
o Entire configuration/state can be changed at runtime
o Uzbl keeps it simple, and puts you in charge.
* uzbl-browser: a complete browser experience based on uzbl-core
o Uses a set of scripts (mostly python) that will fit most people, so things work out of the box. Yet plenty of room for customisation
o Brings everything you expect: url changing, history, downloads, form filling, link navigation, cookies, event management etc. However: one page per instance
o Advanced, customizable keyboard interface with support for modes, modkeys, multichars, variables (keywords) etc. (eg you can tweak the interface to be vim-like, emacs-like or any-other-program-like)
o Adequate default configuration
o Focus on plaintext storage for your data and configs in simple, parseable formats and adherence to the xdg basedir spec
o Visually, similar to uzbl-core except that the statusbar contains useful things. One window per webpage
* uzbl-tabbed: wraps around uzbl-browser and multiplexes it
o Spawns one window containing multiple tabs, each tab containing a full embedded uzbl-browser
o Ideal as a quick and simple solution to manage multiple uzbl-browser instances without getting lost