A graphical terminal requiring no serverside support. Available for MacOS X, Linux and iOS.


iOS OSX Linux

How it Works

It's not well known, but graphical terminals have been around for more than 25 years. One of the earliest implementations was in the VK100 (or “GIGI”) terminal, released in the early 1980s, it used a graphics drawing langauge called ReGIS. Lucky Gnuplot still supports ReGIS, and we can use this capability to render simple graphics simply and quickly in the terminal. See the examples sections for a quick walkthrough.

However a lot of the time you want more than just a quick plot. A common usecase might be checking the contents of an image on a webserver or viewing an image attached to an email. Without inline image rendering your stuck trying to find a back-channel to transfer the file across. Not always easy if you're bouncing through multiple servers. For this reason hterm supports inline rendering of PNG files, with almost no serverside support requirements. All you have to do is:

echo HTERMFILEXFER;base64 myimage.png
The terminal client will decode and render the PNG file as it streams into your terminal. Check below for more examples.



Before you start make sure gnuplot is installed on your system, almost any version released in the past 10 years is ok. Create a small file with some data, we're going to plot this as a line graph, call the file data.dat:
1 10
2 20
3 40
4 80
5 160
6 320
7 640
Now create another file called data.gnuplot with the following contents:
set size square

set ylabel "Pageviews"
set xlabel "Time"

set terminal regis
plot "data.dat" using 1:2 with lines
The run gnuplot:
gnuplot data.gnuplot

Viewing a PNG

Couldn't be easier simply:
echo HTERMFILEXFER;base64 image.png
If you use a terminal based mail reader like mutt or pine you can setup your mailcap to automatically view PNG files. Just add the following line to ~/.mailcap:
image/png;      echo HTERMFILEXFER && base64 %s && read v && clear


The source code for this project is freely available on github under a GPL style license, check the github page for more information.


If you'd like to donate to the project you can send me some Bitcoin: 188buBubFG6SmNvnsVSfvSbvDrmQcgWiw9 funds will go toward continued development. In particular if you have a bug report or feature request you'd like me to look at send me some coin and I'll try and get it done. In any case if you find a bug, please report it at the github page. Or email me at: [email protected].


If you're interested in contributing to the project or just want to chat, you can contact me at [email protected] if you'd like to checkout my other projects see my contracting website. If you'd like to file bug reports or feature requests, please feel free to add issues on github.