Binary releases may be available from GitHub on an unpredictable schedule.
A file with an
is a pre-compiled application, which can be treated
domterm program with various resources bundled in a single file.
Just download it; make it executable (
chmod +x DomTerm-version.AppImage); and optionally rename it (maybe to
and put it on your
You should be able to run it on most recent GNU/Linux operating systems,
as well as compatible ones.
Specifically, it runs fine on Windows Subsystem for Linux (WSL 2).
AppImage includes the
front-ends, but they do depend on GUI libraries that might not be
on your platform. On WSL 2, DomTerm defaults to using
edge-app front-end, which works pretty well.
The sources are in a GitHub repository. To download the sources do:
git clone https://github.com/PerBothner/DomTerm
The following instructions assume a Unix-like environment (Linux, BSD, MacOS, or WSL on Windows). On other platforms (including plain Windows without WSL) you may be able to use electron-nodepty: Using node for background server (experimental).
Please help out with instructions for other platforms, especially MacOS, *BSD, and native (non-WSL) Windows.
On Fedora, you need to first:
sudo dnf install gcc make automake autoconf texinfo patch libwebsockets libwebsockets-devel openssl-devel file-devel libcap-devel asciidoctor zlib-devel
--with-qt (recommended), also do:
sudo dnf install gcc-c++ qt5-qtbase-devel qt5-qtwebengine-devel qt5-qtwebchannel-devel qt5-qtx11extras-devel
If configuring with
xxd - only needed at build time):
sudo dnf install vim-common
For Java classes, do:
sudo dnf install java-1.8.0-openjdk-devel
(You can also use Oracle JDK, version 8 or 9.)
If configuring with
sudo dnf install closure-compiler
If building the documentation and configuring
sudo dnf install docbook-style-xsl libxslt
If configuring with
--with-webview (experimental) do:
sudo dnf install gtk3-devel webkit2gtk3-devel
If configuring with
--with-wry (experimental) do:
sudo dnf install rust cargo gtk3-devel webkit2gtk3-devel jq
(Tested on Ubuntu 17.10.1)
You need to install the following prerequisites:
sudo apt-get install git gcc make automake pkg-config asciidoctor libmagic-dev zlib1g-dev
--with-qt (recommended), also do:
sudo apt-get install qt5-default libqt5webengine5 libqt5webchannel5-dev qtwebengine5-dev
In the future you should be able to do
apt-get install libwebsockets-dev, but at the time of writing the available package is too old,
so you have to build libwebsockets from source - see below.
If you need to build libwebsockets from source:
sudo apt-get install cmake
For building from source on WSL (Windows Subsystem for Linux) see the instructions below.
Alternatively, you can use of the pre-compiled
Then create a directory on a Windows partition,
cd to it,
unzip the downloaded file into the partition.
For example (assuming your Windows user name is
cd /mnt/c/wuser mkdir DomTerm cd DomTerm unzip /mnt/c/User/wuser/Downloads/domterm-version-wsl.zip
These library dependencies are needed:
apt-get install libmagic1 zlib1g
Optionally you can create a symlink for
cd ~/bin ln -s /mnt/c/wuser/DomTerm/bin/domterm domterm
Installing Electron is highly recommended.
brew install automake libwebsockets asciidoctor pkg-config
If you want to use the Electron front-end:
brew install npm npm install electron -g
If you will be using Qt:
brew install qt5 brew link qt5 --force
There are some issues about openssl that I’m not clear about. A reported work-around is to do:
export LDFLAGS="-L/usr/local/opt/openssl/lib -L/usr/local/lib -L/usr/local/opt/expat/lib" export CFLAGS="-I/usr/local/opt/openssl/include/ -I/usr/local/include -I/usr/local/opt/expat/include" export CPPFLAGS="-I/usr/local/opt/openssl/include/ -I/usr/local/include -I/usr/local/opt/expat/include"
A cleaner solution/fix would be welcome.
domterm server requires libwebsockets version 2.2
or newer. Version 3.2 has reported problems.
As of January 2021, the version in Fedora 33 seems fine,
but the version in Ubuntu is best not used.
If you need to build libwebsockets from source, do the following:
cd $WORKDIR git clone https://libwebsockets.org/repo/libwebsockets cd libwebsockets mkdir build cd build cmake -DLWS_WITH_SSL=0 -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_ZIP_FOPS=1 ..
-D options are suggested but not required:
-DLWS_WITH_SSL=0 avoids a dependency on OpenSSL;
-DLWS_WITH_ZIP_FOPS=1 is required if configuring
--disable-compiled-in-resources (the default).
./configure in the
The Electron framework provides a nicer domterm front-end than a regular web browser. It is similar to using qtdomterm, but it is easier to install electron on platforms that don’t have qt/qtwebengine packages easily available.
Grab a suitable package from
zip file with the plainest name (no
For example, at the time of writing the current release is 7.1.2, so
for Windows you want
Unzip into a freshly-created directory.
On Windows Subsystem for Linux (WSL), you need to unzip into a
directory on a Windows partition, not a Linux partition.
For example, assuming the Windows user name is
and Electron version number version, do:
cd /mnt/c/User/wuser mkdir electron-version cd electron-version unzip /mnt/c/User/wuser/Downloads/electron-vversion-win32-x64.zip
So that the
domterm executable can find the electron executable,
you can create an entry in
command.electron = /path/to/electron/electron
or (on WSL):
command.electron = /mnt/c/User/wuser/electron-version/electron.exe
Alternatively, you can create a symlink in your
PATH to electron.
For example, on WSL (where
~/bin is in the default
cd ~/bin ln -s /mnt/c/User/wuser/electron-version/electron.exe electron
Using libclipboard is recommended when not using Electron, as it makes Paste work better.
git clone https://github.com/jtanx/libclipboard.git cd libclipboard LIBCLIPBOARD_DIR=`pwd` cmake . make
Managing docking (draggable panes and tabes) using a native library has some advantages (compared to GoldenLayout). Specifically, you can drag panes between top-level windows. There are two candidate Qt libraries that are being considered: Qt Advanced Docking System (slightly smaller, more liberal license, nicer defaults - but needs to use a fork for now) and KDDockWidgets (seems slightly more solid, better Wayland support, can be used unpatched). Both are supported in a proof-of-concept way; both need more polishing and testing, which may determine a preference.
To use (my fork of) Qt Advanced Docking System:
sudo dnf install qt5-qtx11extras-devel # (On Fedora) git clone https://github.com/PerBothner/Qt-Advanced-Docking-System.git git checkout multi-main QT_ADS_DIR=`pwd`/+installed+ #for example mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=$QT_ADS_DIR .. make install
To use KDDockWidgets:
git clone https://github.com/KDAB/KDDockWidgets.git KDDOCK_DIR=`pwd`/+installed+ #for example mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=$KDDOCK_DIR .. make install
configure ... --with-kddockwidgets=$KDDOCK_DIR
If building from the
git respository, first do:
This runs the GNU autotools (
Then run the
where configure-options can be:
Set the root of the tree into which
will install the built domterm.
The default is
qtdomterm executables are
installed in install-prefix
man pages are installed in install-prefix
and other “resources” are installed
On WSL the install-prefix should be on a Windows partition, at least if you want to use the Electron front-end (which is recommended).
Build the C application
which uses libwebsockets.
If lws-build is specified, it should be the path
build subdirectory of the libwebsockets compiled source tree.
lws-build/include/libwebsockets.h should exist.)
Libwebsockets version 2.2 or newer is required, as older versions do not support flow control or paging.
This is the recommended “backend” and the default.
Build a WebSocket server, using Java WebSockets, which allows using any modern browser as a front-end. This server is no longer recommended or enabled by default.
This options adds the classes in
Generates help and man pages using AsciiDoctor.
The default is to do so if
asciidoctor is in the path.
Enable using JavaFX to run standalone applications.
library-name does not need to be specified if using Java SE 8.
It may be needed for OpenJDK or Java SE 7,
in which case it is either a path to
or (for convenience if using Java SE 7) the
If using Java 11 or later (which is “modularized”), you might set:
export JDK_JAVA_OPTIONS='--module-path /path/to/javafx-sdk-13.0.1/lib --add-modules javafx.controls,javafx.web'
Disable building anything that depends on Java.
Use Qt and QtWebEngine
qtdomterm, an advanced front-end that
supports multiple tabs, screen re-sizing, and other nice features.
For this you need the Qt development tools including QtWebEngine installed.
For Fedora, you also need:
sudo dnf install qt5-qtbase-devel qt5-qtwebchannel-devel qt5-qtwebengine-devel
Build experimental support for the Webview cross-platform framework. This creates a binary
which is used if you open a domterm window with the
This has only been tested on Fedora and MacOS.
Using the libclipboard library is recommended if if you a non-Electron front-end, as it makes Paste menu items work better.
If you followed the
installation instructions above
then libclipboard_dir should be
Use DocBook for generating HTML documentation. This used to be the default but is no longer recommended with texinfo 6.8.
to be compiled into the executable.
Otherwise, they are served from the compressed
To test it, you can try either:
Either starts up a useable terminal emulator in a fresh window.
(The latter is equivalent to
Optionally, you can install the built files into the configured install-prefix directory:
make appimage/DomTerm.AppImage chmod +x appimage/DomTerm.AppImage
You can run
with the same options as the
It is a single file, which makes it easy to move and install.
(It is reasonable to rename the
For better portability of the resulting
you should build it on a machine with a slightly older libraries,
and libwebsockets should be linked statically.
You might also consider configuring
--with-asciidoctor --with-webview --with-libclipboard=$LIBCLIPBOARD_DIR.
The functionality of
are more likely to break if libraries are incompatible,
but they’re separate executables so shouldn’t break core functionality.
Microsoft Windows is now supported using Windows Subsystem for Linux (WSL). This has been tested using the Ubuntu distrubution: Follow the above Ubuntu instructions for getting prerequsities (without the optional qt packages), including (currently) building libwebsockets from source.
Other distributions should work but have not been tested.
If you want to use the Electron front-end,
electron as described above.
Electron is a Windows executable, and it needs to be able to read
the “electron application” files in
Hence, if you run
domterm in-place (without
clone’d source directory must be on a Windows partition.
Alternatively, if you run domterm as installed by
then the install-prefix must be on a Windows partition.
If you want want to use a web browser,
the newer (Chrome-based) Edge works pretty well.
--browser=edge-app is the default on WSL.
Win32 versions of
both Firefox and Google Chrome also work pretty well.
The default location (for Firefox
c:\Program Files (x86)\Mozilla Firefox\firefox.exe)
should work out-of-the-box. Otherwise specify
(Internet Explorer wll probably never be supported.)
Domterm looks for the user settings file in
DomTerm.AppImage (see above) single-file application
works well (at least on WSL2).