WWWBrowser is a prototype WWW Browser implemented in the functional programming language Haskell using Fudgets and InternetLib.
WWWBrowser was mostly implemented in the summer 1994, when NCSA Mosaic was the dominant web browser. It thus predates Netscape Navigator. Some updates were made in 1997-1998 and more recent years.
WWWBrowser is also described in the chapter WWWBrowser -- a WWW client in the Fudgets Thesis.
Some features of WWWBrowser
- It supports forms. (See the Mosaic 2.0 forms support overview and examples).
- It supports inlined images, like
.
- The GIF, PNG, JPEG, PNM and XBM formats are recognized. PNM and GIF images are processed with Haskell code. Since April 2023, this also applies to PNG images and since May 2023, JPEG images are handled by Haskell functions from the JuicyPixels package.
- Support for transparent GIFs was added in December 2025. Limited support for transparency in PNGs was also added, so that if a transparent GIF is converted to PNG it will still look the same, but there is no alpha blending.
- For other formats, conversions are done with external programs (from the NetPBM package). Since January 2026, MS Windows icon images and WebP images are recognized and converted.
- To support screens with limited colours (e.g. 8-bit screens that can only display 256 different colours), dithering (or just color remapping) of images is done by Haskell functions in WWWBrowser. (Unfortunately this gets a bit slow for large images.)
- Inlined images are fetched in parallel. This means that pages containing many small inlined images, such as IconBAZAAR, load faster in WWWBrowser (in spite of the slow image processing) than in browsers that fetch one image at a time, like NCSA Mosaic.
- It understands most of the protocols used for information retrieval in WWW: http, ftp, nntp (news), gopher and telnet. It can also read files and directories in the local file system. When talking to nntp and ftp servers, it uses the same connection for several transfers rather than connecting/disconnecting for every document retrieved.
- It can connect to the Internet directly or through a proxy.
- It reads Mosaic's document menu file (from
~/.mosaic-doc-menu) and displays it as a drop-down menu. - It reads Netscape's bookmarks file (from
~/.netscape/boomarks.html) and displays it as a hierarchical menu. (You can't add new bookmarks or edit the bookmarks.) - Like Netscape, WWWBrowser can display part of the bookmarks file as a personal toolbar.
- It supports Netscape's What's Related feature.
- It supports Fupplets, which are applets written in Haskell. There some examples in the small Fudgets Tutorial.
- Since September 2023, it supports the Gemini protocol and document format. (These are light-weight alternatives to HTTP and HTML.)
- Also since September 2023, https is supported. (Before, https was only supported through a proxy.)
Missing features and known bugs
WWWBrowser supports most of HTML 3.2, but compared to modern browsers, some widely used features are missing.
- JavaScript is not supported.
- Style sheets (CSS) are not supported.
- Cookies are not supported.
- The
COLSPANandROWSPANattributes for table cells are not supported. Table formatting is poor in general. - Background colors/images in tables don't work properly.
- The
ALIGN=left/rightattribute for images and tables is not supported. - Client-side image maps are not supported.
- SVG images are not supported.
- Animated GIFs are not supported.
- Transparency with alpha blending in PNG images is not supported, pixels are treated as fully transparent or fully opaque.
- Frames are not supported.
- Java Applets aren't supported (but Fupplets are, see above).
mailto:links are not supported.- There is no way to save documents or start external viewers for unknown MIME types.
- The spacing is not perfect.
- More...
Command line arguments
Usage:
wwwb [ - flags ] URL
-home url
| specifies the start page |
-proxy host:port
| use the specified proxy |
-docmenufile file
| specifies where to get document menu. |
-bookmarksfile file
| specifies where to get the bookmark menu |
-personaltoolbar name
| specifies which bookmark folder to use as the personal tool bar. |
-imglog
| switches on the image fetching log window. |
-htmldebug
| shows bad HTML markup and hidden information in forms. |
-color no
| shows images in (dithered) black&white. (Faster than color images). |
-colorCube n
| sets the size of the color cube to n*n*n, where n=1,2..6. The default is to use the largest possible color cube. |
The flags can also be specified using environment variables. See the section Command line switches and environment variables in the Fugets User's Guide for details.
Links
- Vado, a Haskell web browser written in two evenings in 2017.
- Hacker News: WWWBrowser - a Haskell web browser.
- zdnet.com: Say hello to the early days of web browsers.
Feedback
You can mail your thoughts about WWWBrowser to the author.Authors
- Thomas Hallgren
- Most modules. GIF processing.
- Magnus Carlsson
- Other image processing.
