The domterm application is terminal emulator, REPL console, and screen multiplexer (like tmux or GNU screen).

The user interface and terminal emulation is handled by a JavaScript library (called DomTerm). Communication between the application and the UI is done with Web Sockets.

This LWN article provides background, motivation, and a summary of the functionality.

The name “DomTerm” is due tp that it works by manipulating the Document Object Model (DOM) of a browser: the nested structure of elements, text, and attributes. (Also, most other appropriate names were already taken...)

DomTerm is Free Software (open-source) available at The older JWebTerminal project was based on similar concepts, but was mostly written in Java using Javafx WebView.

Recent advances:

Why another terminal emulator

The goal of this project is to combine two related but separate tools: a terminal emulator, and a rich-text console, and do it properly.

There are many terminal emulators, including quite a few written in JavaScript. However, they generally work with a rectangular grid of characters, and don’t integrate rich text (images, math, variable-width text, variable-length lines, interaction) well.

There are also various tools designed for REPL-style interaction, chat clients, etc. Examples include IPython or the the JavaScript console of a web browser. However, they don’t work as terminal emulators, or at best have limited functonality or require switching modes.

For rich text applications it seems obvious to use web technologies: DOM and JavaScript.

One goal of this project is a stand-alone terminal emulator application that techies can use as a day-to-day terminal emulator, and that also seamlessly provides support for rich text and interaction. That means an embedded web engine.

The core of the project is a JavaScript package that can be used and embedded in different modes and applications.