Getting Started With ST - the simple terminal

December 26, 2019


st is a simple terminal emulator from suckless tools. It provides the core features you need from a virtual terminal without being a bloated mess. While I like urxvt, st is smaller, simpler and a touch faster. Like most suckless tools, st provides a minimal feature set, with the expectation that users will patch in additional features as wanted, or compose st with other tools (e.g. dmenu) to provide a more complex experience. This approach may seem a bit spartan to many - editing C for configuration isn’t the most friendly interface - but what you get is solid, easy to understand, and is very hackable. I use it on my systems because I like its minimalism.

Getting the source and building

To build st you’ll need a few libraries for building X applications, in particular libX11. None of the following is surprising - clone the source, read the README, adjust as needed, build and install.

Getting the source and basic build

Clone the source code directly from suckless.

$ git clone

Change directory into the source tree

cd st

At this point, you may want to checkout the latest release tag (at time of writing it’s 0.8.2) with

git checkout 0.8.2

I’m happy building straight off master.

A simple build can be done by running

$ make st

and the binary is emitted to the source directory. It can be tested with

$ ./st

This is useful for testing customizations without installing system wide.

System-wide installation

The built binary can be installed system wide using

$ sudo make clean install

User installation

Alternatively, a user installation can be done by editing, changing the PREFIX variable to, e.g. ~/.local/ (assuming ~/.local/bin is on your path).

PREFIX = ~/.local

then running

$ make clean install

If you need manpages for st, then you will need to update your MANPATH to include ~/local/share/man. Be aware that the st manpage conflicts with the SCSI tape device manuals - you may want to rename the man page. Maybe you don’t care.

You can also read the man pages by telling man about the local search path

$ man -M ~/.local/share/man st


Customization of st is usually done through editing the C files. I find it works pretty well out of the box (with tmux used from scrollback etc). Basic settings can be changed in the config.h configuration header file.

Further customization can be achieved by editing the C source code directly. The st webpage has a collection of patches from other users which can be applied to add new features. I find the default setup pretty much good to go - all I do usually is tweak the font size a little in config.h.

A git branch is useful for managing a collection of customizations. Changes can be rebased onto newer (or older) st versions, and new patch files can be generated using git diff.