Skip to content
This repository

A minimal KISS-compliant browser written and configured in Haskell. Repository was moved to bitbucket (cf following link).

branch: master


In a nutshell: hbro is a minimal, KISS compliant browser for linux written, configured and extensible in Haskell.

Informations about versions, dependencies, source repositories and contacts can be found in hackage.

Design principles

Do one thing well
A web browser is not a {window|bookmarks|history|download|passwords|package} manager, let alone an operating system. A web browser retrieves, renders and traverses web pages, period.
Keep It Simple, Stupid
The program should be written with simplicity in mind, and without obsession for performance, features or release frequency. It should not take time to start-up, consume much RAM or crash. Its code should be easy to understand (well, as long as you speak Haskell...) to encourage users to hack it. Simplicity provides lightness, scalability, stability and maintainability.
Configuration system should allow users to implement extra features. External programs should be able to query/order hbro.
Good defaults
A default configuration, suitable for users that cannot afford or don't want to spend (waste ?) their time in tweaks, should be provided.
Keyboard driven
Keyboard control should be made as much convenient, with as little mouse intervention, as possible.

Components and libraries used

Programming language : Haskell
Modern, purely-functional language that makes it possible to work with a short, elegant and robust code.
Layout engine : WebKit
Webkit seems to be the only engine being open-source, (kind of) standards-compliant and providing a Haskell binding. It's not much of a choice, fortunately it's not that bad.
UI toolkit : GTK+
Given the above programming language and layout engine, there's no much choice left for the UI toolkit.
Interprocess interface : ZeroMQ
Socket-like interface that implements various convenient communication schemes like request-reply and publish-subscribe.
Configuration system : Dyre
Dynamic reconfiguration library for haskell programs.

Suggestions about better alternatives for any of these points (except the programming language) are welcome.


By default, a minimal configuration file (see Hbro/Main.hs) is used to build hbro. You can create your own at ~/.config/hbro/hbro.hs to override it. Several extensions are provided with the * hbro-contrib * package, including a well-commented example of configuration file.

Known bugs and limitations

Unfortunately, many problems/limitations are inherited from the Haskell binding for webkit/gtk. Until fixed in upstream, nothing can be done on hbro to work around them. Here's a summary of them:

  • segfaults when loading some webpages or enabling javascript/flash;
  • no proxy configuration;
  • no cookies management;
  • javascript's requests open in the same window instead of spawning a new one;
  • toggling to source mode reloads current webpage (which may be undesired)

Patches or suggestions are welcome to deal with the following issues.


hbro is distributed under the Do-What-The-Fuck-You-Want-To public licence, which has a pretty self-explanatory name.

Something went wrong with that request. Please try again.