Haphaestus TV Browser

Haphaestus will be a web browser, built upon Rhapsode's infrastructure, specifically designed for use via TV remotes with minimal button presses. Aiming to show the great potential of a simpler, JavaScript-free web.

Unlike other smart TV browsers Haphaestus does not attempt to translate your TV remote input into mouse and keyboard events for the sake of any prescriptive (via JavaScript) behaviour of the webpages you're viewing. Instead treating the webpage as a static menu of links, with pagination in place of scrolling.


In an era where modern browsers have become incredribly complex in their persuit of turning a document publishing system into an application delivery platform, Haphaestus aims to be simpler & easier to adapt to your individual needs by focusing on the reading experience.
By being willing break web compatibility Haphaestus can take its privacy protections to new heights. No trackers can run on it by design.
Software developers will be able to pick up Haphaestus's individual components (collectively termed the Argonaut Stack) & use them for their own purposes.
Haphaestus aims to support as many written languages as possible, taking precedance over simplicity.
Haphaestus and its siblings aim to show that without websites prescribing how to achieve their communication ends, the exact same Web can be presented over practically any medium.


Haphaestus is assembled out of multiple, independantly repurposable, Haskell modules:

Haskell URL Resolver
Haskell Stylist
CSS Engine
Text renderer
Balkón (in-progress)
Text layout
CatTrap (in-progress)
Paragraph/box layout

& more to come...

Third-Party Components

Haphaestus makes use of several pre-existing Haskell modules, mostly to to handle parsing:

HTML Conduit & XML Conduit
HTML/XML parsers
Haskell CSS Syntax
CSS lexer
HTTP implementation
Network URI
URI parser
More efficient Haskell text encoding
Chunks of binary data
Hardware-accelerated rendering

As well as, to aid internationalization goals, the preeminant font libraries:

Harfbuzz (custom bindings)
Text shaping
Fontconfig (custom bindings)
Fontfile lookup
Font decoding & rasterization
Unicode processing

Building on Rhapsode's URL resolver & CSS engine as well as the HTML parser it uses in Haskell, Haphaestus will be developed roughly along the following roadmap:

  1. Layout, paginate, & render paragraphs of text (in-progress)
  2. Backgrounds & borders
  3. Rich Layout
  4. Navigate links
  5. Webforms
  6. Browser chrome
  7. Bonus features

These plans are extremly rough, take with a huge grain of salt.

In more detail...

Rendering paragraphs

Inline-text will be implemented with the aid of FontConfig, HarfBuzz, & FreeType from GNOME's widely-used text rendering stack.

Backgrounds & borders

This would be hardware-accelerated with OpenGL & GLSL to avoid messier optimizations elsewhere, with a possible fallback to Pixman.

Rich Layout

Haskell's immutability would make it trivial to utilize all your CPU cores for webpage layout. The CSS position property will not be supported as its mostly used by webpages to harm their own legibility.

Navigate Links


This would be implemented as a locally-run serverside webapp lowering webforms into hyperlinks the rest of Haphaestus can handle.

Browser chrome

This'll mostly be another locally-run serverside webapp serving as a root to the tree-history (described earlier), with a couple of its pages tied to dedicated TV remote buttons.

Bonus features

These are features I might implement, but are a little beyond what's needed for TVs.