siduck/st: a suckless terminal with ligatures, sixel and live reload
snazzy terminal (suckless + beautiful)
At a glance
- What is it?
- This is a fork of the suckless st terminal carrying a long patch list, including font ligatures, sixel graphics, scrollback, transparency, box drawing, a column patch that stops text being cut on resize, and an Xresources live reload that changes colours and fonts without restarting. It builds with a plain make and installs three binaries plus a desktop entry.
- Who is it for?
- siduck/st suits a user who already runs a suckless-style X11 setup and wants ligatures, sixel and live-reloaded colours without writing the patches, since the patch list is the product and the terminal itself stays small. It does not suit a user on Wayland, because the repository is X11 only, with Xresources, xrdb and Xlib in the dependency list.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 96 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What this fork adds to the suckless terminal
The project describes itself as a snazzy terminal, suckless plus beautiful, and it is a fork of st with the patch set being the point.
The patch list in the README is the feature list. Ligatures. Sixel, which the README notes is on a sixel branch. Scrollback. Clipboard. Alpha, for transparency. Boxdraw. patch_column, described as not cutting text while resizing. font2. Right click paste. An st desktop entry. newterm. anygeometry. xresources. A sync patch for better draw timing to reduce flicker and tearing and improve animation smoothness. Live reload, to change colours and fonts on the fly. And st-swapmouse.
Two of those are worth more attention than the rest. The column patch addresses a genuine annoyance: without it, resizing the window truncates text. The live reload addresses the other classic st complaint, that changing a colour means editing config.h, recompiling and restarting, which breaks the workflow for anyone who uses Xresources to theme their desktop.
The credits section attributes the live reload to nimaipatel's st fork and the patch_column change to a specific diff in the same project, so this is a fork of a fork of upstream st, assembled from patches that already existed rather than written from scratch.
The source layout is the standard st one with the additions visible. There is st.c, x.c, boxdraw.c and the boxdraw data header, hb.c and hb.h for the HarfBuzz text shaping, normalMode.c and normalMode.h, plus arg.h, utils.h, win.h, st.h, config.def.h and config.mk. The xresources/ directory is the live reload machinery, and the Makefile lists the source set as st.c, x.c, boxdraw.c and hb.c.
Dependencies and the two ways to try it
The dependency list is per distribution, and it shows what st plus these patches need.
On Void it is libXft-devel, libX11-devel, harfbuzz-devel, libXext-devel, libXrender-devel, libXinerama-devel and gd-devel, with a note to install font-symbola and libXft-bgra at the end.
xbps-install libXft-devel libX11-devel harfbuzz-devel libXext-devel libXrender-devel libXinerama-devel gd-develOn Debian, and probably Ubuntu, it is shorter.
apt install build-essential libxft-dev libharfbuzz-dev libgd-devOn Arch it is almost nothing, which reflects that the base packages are usually already present.
pacman -S gdOn Fedora and the Red Hat family it is gd-devel and libXft-devel, and on SUSE and openSUSE there are two zypper commands, one for the development pattern and one for the individual packages including harfbuzz-devel.
The Nix path is the one to try first, because the README suggests running the terminal before installing it, which requires Nix.
nix run github:siduck/stThat is a genuinely good way to evaluate a terminal, since it costs nothing and does not touch your system configuration. The development shell for hacking on it is nix develop github:siduck/st, and the repository also ships a flake.nix with flake.lock and a default.nix.
Building and installing from source
The install is the classic suckless sequence, since that is what st is.
git clone https://github.com/siduck/st.git
cd st
(change the compiler if you cant use c99 to compile: sed -i 's/^#\ CC\ =\ c99/CC=gcc/' config.mk)
sudo make install
xrdb merge pathToXresourcesFileThe compiler line in the parenthesis is the one to read. The default build assumes a c99 compiler, and the sed command rewrites the commented-out CC line in config.mk to use gcc instead, for a toolchain where c99 is not the default.
The xrdb merge at the end is what loads your X resources, and the note in parentheses asks you to put the xrdb merge command in your window manager's autostart or similar, because otherwise the colours only apply to the session you merged them in.
The Makefile gives a sense of what gets installed. The install target copies three binaries into the bin directory, st, st-copyout and st-urlhandler, and sets them executable. It also generates the man page from st.1 with the version substituted, installs the terminfo entry with tic -sx st.info, copies the icon, and installs st.desktop into the share/applications directory.
The Nix flake route is described separately: you add st.url = "github:siduck/st"; to your inputs and install the inputs.st.packages."${system}".st-snazzy package.
st.url = "github:siduck/st";The name of that package, st-snazzy, is the one thing that confirms what the fork considers itself.
Xresources live reload and the default keybindings
The live reload is the feature that changes how you work with the terminal, and the mechanism is short.
alias rel="xrdb merge pathToXresourcesFile && kill -USR1 $(pidof st)"Merging the Xresources file and then sending SIGUSR1 to the st process tells the running terminal to re-read its resources. There is a demo GIF at the top of the README showing it happening, which is the fastest way to see the point: change a colour, run the alias, and the window updates without a restart and without losing your scrollback or your running process.
That last part is the difference from editing config.h, which requires a recompile, a reinstall and a restart. A theme that can be changed live turns the terminal into something you can adjust while looking at it.
The default keybindings are listed in full and can be changed in config.h. Copy and paste are ctrl + shift + c and ctrl + shift + v, and a right click on the terminal pastes the copied thing. Zoom is alt + comma to zoom in, alt + . to zoom out and alt + g to reset. Transparency is alt + s to increase it, alt + a to decrease it and alt + m to reset it. Scrolling is alt + k and alt + j. And mod + shift + enter opens a new terminal with the same working directory.
The same working directory one is a small thing that saves real friction when you are running a long job in one window and want a second prompt in the same place.
Where this st fork is the wrong choice
The first limitation is X11. Every mechanism here is X11: Xresources, xrdb, Xlib, Xft, Xinerama, and a dependency on xbps-install, apt, pacman, dnf and zypper packages of X development libraries. There is no Wayland path in the repository, and a user on Wayland cannot run this. The upstream st has the same limitation, but the patch list here doubles down on the X11 model rather than softening it.
The second is the fragility of a patched terminal. The README notes the sixel support is on a sixel branch rather than the default, which means the patch list is not one coherent tree. A patch that depends on another patch's line numbers, or on a specific upstream commit, breaks when either moves, and a fork that carries a dozen such patches is a dozen chances for that to happen. The advantage is that each patch is a small diff you can read; the cost is that you own the integration.
The third is the missing documentation. The README is a list of features, dependencies and keybindings, and it does not describe the sync patch's behaviour in detail, or what the anygeometry patch does, or how the live reload interacts with the sixel branch. Learning what the patches actually do means reading the diffs.
The fourth is the benchmark evidence. The README includes RAM usage and speed test images and explicitly notes the benchmark was done on a low-end machine with a Pentium CPU, so the speed results might vary. That is an honest caveat, and it also means the numbers are not comparable to a review of a mainstream terminal on modern hardware.
The fifth is that the keybindings assume a particular window manager setup. A terminal that hides its own title bar and expects to be composited needs a window manager that supports that, and the transparency controls do nothing without a compositor. That is normal for the suckless ecosystem, and it is a genuine constraint for anyone arriving from a mainstream terminal emulator.
Licence, maintenance and the cost of a patched terminal
The project is under the MIT licence, with the LICENSE file at the root of the repository, which is the licence upstream st uses and the right one for a fork of it.
The repository is not archived and the last push was on 2026-07-19, so it is being worked on, though not with the frequency of a mainstream terminal emulator. There are no GitHub releases, so the commit history is the version history and a user installing from source is installing whatever master currently is.
The cost of this terminal is the cost of a C program plus its X11 dependencies, which is the whole appeal. The Makefile builds four source files, and the install target puts three small binaries on your path. There is no runtime service, no configuration daemon and no network component.
The cost of maintaining it is the patch integration and the X11 stack itself. A terminal that wants ligatures needs HarfBuzz, transparency needs a compositor, box drawing needs a font with the right glyphs, and the README's recommendation of a Nerd font plus a material design icon font is a sign that the terminal's appearance depends on a font stack you assemble yourself.
The README also points to the author's dotfiles repository for the theme, with an onedark Xresources file and the JetBrainsMono Nerd Font, and to a separate logo-ls repository for the icons. So the project is really the middle layer of a personal desktop setup, and the terminal is designed to fit into a larger configuration where the same resources drive the window manager, the status bar and the terminal at once. That is the appeal for the audience it targets, and it is also the reason the fork exists at all, since the live reload patch is what makes that shared resource approach workable.
Editorial conclusion
siduck/st suits a user who already runs a suckless-style X11 setup and wants ligatures, sixel and live-reloaded colours without writing the patches, since the patch list is the product and the terminal itself stays small. It does not suit a user on Wayland, because the repository is X11 only, with Xresources, xrdb and Xlib in the dependency list. Try it with nix run before installing, and expect to change the keybindings in config.h, since the defaults assume a window manager with a title bar.
Frequently asked questions
What does the siduck/st fork add to suckless st?
The patch list includes ligatures, sixel graphics, scrollback, clipboard, alpha transparency, boxdraw, a column patch that does not cut text while resizing, a desktop entry, an Xresources live reload for changing colours and fonts on the fly, and a sync patch for better draw timing.
How do I install the siduck terminal?
Clone the repository, change into the st directory, and run sudo make install, optionally editing config.mk to use gcc if your compiler does not default to c99. The install places st, st-copyout and st-urlhandler in the bin directory, installs the man page and terminfo entry, and copies the desktop entry.
How does the Xresources live reload work?
The README suggests an alias that merges the Xresources file and then sends SIGUSR1 to the running st process, for example alias rel="xrdb merge pathToXresourcesFile && kill -USR1 $(pidof st)". That reloads colours and fonts without recompiling and restarting the terminal.
What are the default keybindings in this terminal?
ctrl + shift + c and ctrl + shift + v for copy and paste, with right click pasting as well, alt + comma, alt + . and alt + g for zoom in, out and reset, alt + s, alt + a and alt + m for increasing, decreasing and resetting transparency, alt + k and alt + j for scrolling, and mod + shift + enter to open a new terminal in the same working directory. All of them can be changed in config.h.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/siduck-st)Was this useful?