Skip to content
/ hbro Public
forked from k0ral/hbro

A minimal KISS-compliant browser written in Haskell

License

Notifications You must be signed in to change notification settings

clinty/hbro

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hbro

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
Browsing is about retrieving, presenting and traversing web resources. Not about providing tabs, bookmarks, history, download management, adblocking, passwords saving, self-updating, ... There already exists standalone applications for most extra features one may think of, please reuse them. Hbro can be configured to call external programs for any task.
Keep It Simple, Stupid
Hbro is written with simplicity in mind, and without an obsession for performance, features or release frequency. It may not be the fastest browser, at least it starts-up almost instantly, doesn't consume all your RAM and doesn't crash. Simplicity makes hbro lightweight, scalable, stable, easy to maintain and hack. Its code is easy to understand to encourage users to hack it.
Extensible
Targets are advanced users who have various expectations ; to be sure everyone is happy, hbro is configured using a programming language, and offers an interprocess interface. As he who can do the most can do the least, the default configuration should be suitable for users that cannot afford or don't want to spend (waste ?) their time in tweaks.
Keyboard driven
Special attention is given to allow keyboard control of the browser whenever possible and not in conflict with another design principle.
Free software
Hbro is distributed under the Do-What-The-Fuck-You-Want-To public licence, which has a pretty self-explanatory name :) .

Note that some of these principles are taken from the suckless manifest.

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 one being open-source, (kind of) standards-compliant and providing a Haskell binding. It's then 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 more than welcome :) .

Configuration

By default, a pretty limited 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 featured and self-explanatory example of configuration file.

Known bugs and limitations

Patches or suggestions are welcome to deal with the following issues. See package description for contact address.

Flash videos make hbro freeze
The demo webkit browser for haskell's binding has the same problem, so it doesn't seem to come from hbro itself.
When toggling to source mode, current webpage is reloaded
This is an undesired behavior since the webpage may have changed after reloading; webkit's API allows to get the content of the DOM but only inside the body tag; it is also possible to store the HTML source as it is downloaded, but then any further change in the DOM (for example triggered by javascript functions) wouldn't be visible.
No cookies management available
The Haskell binding is missing some necessary functions that make it impossible to act on cookies management.
Configuring a proxy is impossible
This feature would make use of to the webkit_get_default_session function. Unfortunately, Webkit's Haskell binding doesn't provide such function for now.

About

A minimal KISS-compliant browser written in Haskell

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Haskell 100.0%