hottyHTML over the TTY

☰ Contents · Start › Choose a host

Choose a host

A host is what draws a program's surfaces, usually the terminal itself. A program asks the terminal whether it is a host when it starts, and draws in cells where it is not, so you can run a hotty program anywhere. It only shows its surfaces where there is a host.

host where it runs what you get
hottyterm macOS on Apple silicon, Linux on x86_64 everything, drawn by the terminal at its own resolution
a browser any page that runs xterm.js everything, each surface in a sandboxed iframe
hotty run kitty, Ghostty and other terminals with kitty graphics surfaces as images: sharp at one zoom, no text to select

A program of hotty 0.4 needs a host of 0.4. A host of another version, 0.2 or later, answers its question with the versions it speaks; a host of 0.1 answers with capabilities the program can't read. Either way the program draws in cells, as it would without a host.

hottyterm

hottyterm is Ghostty with hotty built in. It draws surfaces as it draws text: sharp at any zoom, following its theme, with text you can select and copy. Typing in a field, hovering and scrolling happen in the terminal, with no round trip to the program.

brew install --cask neuroplastio/tap/hottyterm   # macOS on Apple silicon
yay -S hottyterm-bin                             # Arch Linux on x86_64

Other Linux distributions take the release's archive. Installing hottyterm has every way, and what hottyterm adds to Ghostty's settings.

A browser

xterm-addon-hotty makes xterm.js a host. The browser draws each surface in a sandboxed iframe over the terminal's cells, so a web page that runs a terminal program, locally or over a WebSocket, shows its surfaces too.

npm install @neuroplastio/xterm-addon-hotty @xterm/xterm

hotty.neuroplast.io runs this way. Its tour, demo apps and tools are one hotty program, in the page with nothing to install. Using the addon shows how to load it and what it lets a page decide.

Any terminal with kitty graphics

hotty run, from hotty-blitz, is a host for terminals that show images through the kitty graphics protocol: kitty, Ghostty, WezTerm and others. It sits between the program and the terminal, passes everything through except hotty, and sends each surface as an image:

hotty run -- python3 examples/dash.py
hotty run -- ssh server program   # the host runs here, so the server needs none

Images lose what a native host keeps: sharpness when you zoom, and the text of a surface, which can't be selected. Clicks, keys and scrolling still reach the surfaces. hotty run is built from source for now: The polyfill says how.

Without a host

Every other terminal, and a pipe, has no host. A program written with an SDK finds that out when it starts and draws in cells, as any terminal program does. Degrading says what a program does in each case.

Starting the terminal…