Willow web browser suite

I enjoy working in the terminal, but none of the existing pure‐text web browsers quite provide the full‐featured experience I'm looking for; quite good for retro computing, not as comfortable as current UI conventions. On the graphical side, meanwhile, there are a number of extensions which tack keyboard controls onto existing browsers, but the resulting join is necessarily a bit ugly (there are a few browsers which have been specifically designed around the keyboard – qutebrowser stands out among them – but they all still have their own pain points in turn). So, with no better option and partially just for the challenge of it, I'm making my own. There's no way this will ever be able to compete with the big names, but I hope to gradually grow, one stable step at a time.

Willow will eventually provide a rich browsing experience across interfaces, protocols, and language; one may render a manuscript marked‐up with TEI tags to a static graphical document (e.g. PDF), open a website it links as part an annotation into an interactive but text‐only interface, and view its source through a Darcs‐style command loop. In addition to local files and the standard HTTP web, it will seamlessly integrate with the Gopher and Gemini protocols (among others yet to be determined) to help nurture the small‐web spaces.

It has not reached those goals yet. At the moment, all that exists is a mostly‐functional HTML parser, and a sketch of the data types comprising the foundation upon which the browser will be built. I have a basic plan of development (tags refer to the speculative goals of the project) roughed out, and a general idea of the architecture I want, but expect it to be a case of perpetual development in the spare time of the single developer, with no concrete timeframe on any particular milestone. Still, I hope that people eventually find Willow to be not just a helpful tool, but an enjoyable experience to use.


Willow is built as a system of modular components: willow itself provides the datatypes with which the rendering engines can construct the final view of a document, and additionally defines some common utilities and shared code to simplify parsing. The parse engines such as mangrove then use the latter to transform a (already decoded) character stream into the former skeleton types, which are then passed back to willow for final polish such as tying together multiple closely‐linked documents and applying user styles.

The UIs and configuration options will be built first with keyboard‐and‐terminal users in mind (particularly those used to Vim commands, though providing enough options to adapt the controls to something closer to Emacs). However, given the degree of overlap in browsing experiences, all design decisions will additionally consider users of assistive technologies or who otherwise have accessibility concerns; if there is any way in which the interface could be better suited to your particular situation, please do let me know.


All libraries are hosted on the standard package repositories, so the easiest installation experience would be to simply use the install command of your preferred tool (Cabal or Stack). Both tools do also provide means of obtaining the source code, but if you specifically want the official tarballs or you want to build Willow without depending on third‐party interfaces, those are included below as well. Documentation for the most recent versions are hosted on this website (links are in the sidebar); documentation for older versions may be found on both Hackage and Stackage, and anywhere else which pulls information from either location.