Developing a Web Browser with Haskell

3S Functional Web Browser

Simple San Simon

Functional Web Browser

More screenshots: img1, img2, img3 … see more screenshots.
How to
Install and Execute

  • Clone the project from Github.
  • Prepare package dependencies:
    • uu-parsinglib
    • url
    • tagsoup
    • gd-haskell
    • curl-haskell
    • wxHaskell
  • Using the Makefile, type “make browser” and it will compile everything and generate the binary called “3swbrowser”.
  • In order to execute, type “./3swbrowser”. Notice that this browser needs two directories, “config” a place where it saves the default css file for html4 and “tmp” another place to save all resources downloaded. Therefore, if you want to move the binary to another place (like /usr/bin/), you must also move the “config” and “tmp” directories.


  • support for white-space property + new generic html parser with uu-parsinglib
    + format tree + added more css rules in html4.css
  • support for text properties (decoration,align,transform).
  • Support for text-indent.
  • Support for support for fonts (generic family, oblique,absolute/relative font-size).
  • Support for list css’s property.
  • Support for quotes css’s property.
  • Support for generated content.
  • Support for vertical-align properties (except top, bottom and medium)
Need to be implemented
(things I’m working on)

  • Vertical alignment
  • Margin collapsing between elements
  • other css properties like background

Browser Support

  • We have support for a small sub-set of HTML, XHTML and XML grammar. We have a generic parser that let us recognize any tag with the only restriction that the start and end tags are the same.
  • We have also support for a small sub-set of CSS. We implemented 48 CSS properties that let us modify Box features, apply styles to texts, use list and generate content.
  • We have also support for changing the style sheets for User and User Agent.
  • You can work with HTTP and File protocols, thanks to the Curl library.
  • And you can go forward and backward to navigate.

Blog at