Monstar is a terminal emulator for Linux and Wayland.
- Wayland windows, fractional scaling, text input (IME), clipboard, primary selection, activation, and system bell support.
- Desktop notifications and launcher progress over D-Bus.
- Link and file opening through XDG desktop portals.
- Optional systemd scopes for shell processes.
- Kitty graphics, OSC 8 hyperlinks, URI detection, synchronized output, and terminal color support.
- Scrollback search while terminal output continues.
- Fontconfig fonts, bundled color schemes, desktop light/dark preference, padding, and background opacity settings.
- Touchpad scrolling, separate precision and discrete wheel settings, rectangular selection, and link opening.
- Configuration reloads for most appearance and interaction settings.
Reference distributions recorded on an Intel Core Ultra 7 258V. Lower is better. Results vary by workload.
Launch-and-exit time over 100 fresh runs of true:
Key event to echoed-frame commit over 200 injected keys:
Sample-time distributions from eight vtebench workloads:
vtebench measures producer blocking and PTY read throughput, not frame presentation or input latency.
Benchmark methodology
- Date: July 15, 2026.
- Session: hardware-accelerated, headless Sway 1.12 at 2560×1440.
- Renderer: GLES2 on the Intel GPU through
/dev/dri/renderD128. - Process setup: empty configuration and a fresh process for each terminal.
- Startup: measured with hyperfine 1.20.0 after 10 warmups. Commands were
monstar -e true,foot true,ghostty -e true,kitty true, andalacritty -e true. The result covers the complete process lifetime, not time to the first visible frame. - Keystroke latency: measured in 120×40 terminals under
WAYLAND_DEBUG=client. The test injected 200 keys withwtypeat intervals from 50 to 100 ms. A marked 20 ms raw-PTY echo delay was subtracted from each sample to separate output commits from toolkit-only redraws. The result includes client key handling, the PTY round trip, rendering, and buffer commit. It excludes physical input, compositor presentation, and display latency. - PTY throughput: measured with the default vtebench suite at 120×40 cells. The test used the standard 1 MiB minimum sample size and 10-second workload limit. The result covers PTY reads, not frame rate, display latency, or final-frame presentation.
- Versions: Monstar 0.1.0 (
5b350e2,ReleaseFast), foot 1.27.0, Ghostty 1.3.2 tip (c5a21ed), kitty 0.47.4, and Alacritty 0.17.0.
- XDG desktop portals open links, local files, and directories. Portal settings provide the desktop light/dark preference. Link opening uses Wayland activation tokens.
- D-Bus session services provide desktop notifications and launcher progress. Notification actions can activate the terminal window.
- Monstar launches new windows opened with
Ctrl+Shift+Nthrough the systemd user manager. Optional transient scopes place each shell process tree in a separate scope. - Wayland protocols provide fractional scaling, text-input-v3 IME, cursor shapes, clipboard and primary selection, server-side decorations, named app icons, activation, system bell, and translucent background blur support.
Enable a transient systemd scope for each newly spawned shell with:
linux-cgroup = alwaysIf the session bus or systemd scope is unavailable, Monstar leaves the shell
in its inherited cgroup. Link opening falls back to xdg-open when the portal
is unavailable. Monstar disables optional Wayland protocols when the
compositor does not support them.
Install the current development version on Arch Linux from the
monstar-git AUR package:
yay -S monstar-gitBuild and install Monstar from source into ~/.local:
zig build -Doptimize=ReleaseFast install --prefix "$HOME/.local"The command installs the executable, desktop entry, app icon, manual pages,
and bundled themes. Add $HOME/.local/bin to PATH, then launch Monstar:
monstarSee Development for build requirements.
Run Monstar without arguments to start $SHELL. Monstar falls back to
/bin/sh when SHELL is unset. Pass -e to run a command directly:
monstar -e fish --loginPass -- to run a shell expression:
monstar -- 'git log --oneline | less'Set the working directory, initial size, title, app ID, font, and one-off configuration overrides with command-line options:
monstar --working-directory ~/src \
--title scratch \
--window-size-chars 100x32 \
--font Iosevka \
-o background-opacity=0.95Run monstar --help, man monstar, or man 5 monstar for the complete
command and configuration reference.
Write configuration to $XDG_CONFIG_HOME/monstar/config. Use
~/.config/monstar/config when XDG_CONFIG_HOME is unset. Start with:
font-family = Iosevka
font-size = 12.5
theme = light:Rose Pine Dawn,dark:Rose Pine
background-opacity = 0.95
window-padding-x = 8
window-padding-y = 6
mouse-scroll-multiplier = precision:1,discrete:3By default, background-opacity affects only the default terminal background
and padding. Set background-opacity-cells = true to apply it to explicit cell
background colors too. Monstar requests compositor-provided blur whenever the
background is translucent; set background-blur = false to keep it clear.
Leave theme unset to follow the desktop light/dark preference. Load bundled
iTerm2 color schemes by name. Put custom themes in
$XDG_CONFIG_HOME/monstar/themes or ~/.config/monstar/themes.
Set the default command for new windows. Commands run through /bin/sh -c
unless prefixed with direct::
command = fish --login
# command = direct:fish --no-configPress Ctrl+Shift+, or send SIGUSR1 to reload the configuration:
pkill -USR1 monstarVisual and interaction settings apply immediately. Process and storage settings apply to new windows.
| Shortcut | Action |
|---|---|
Ctrl+Shift+C / Ctrl+Shift+V |
Copy / paste |
Ctrl+Shift+F |
Search scrollback |
Ctrl+Shift+N |
Open a new window in the current directory |
Ctrl+Shift+, |
Reload configuration |
Ctrl++ / Ctrl+= / Ctrl+- |
Adjust the font size |
Ctrl+0 |
Reset the font size |
Ctrl + left click |
Open a hyperlink or detected URI |
Ctrl + drag |
Make a rectangular selection |
Scrollback search updates as you type. Press Ctrl+N and Ctrl+P to move
between matches. Press Enter to copy a match to the primary selection. Press
Escape to restore the previous viewport.
Hold Shift while dragging to select text after an application captures the
mouse. Hold Ctrl+Shift instead of Ctrl to open a link in this state.
Middle-click to paste the primary selection.
Building requires Zig 0.16, the Wayland 1.25 core schema, wayland-protocols 1.49, and development libraries for Wayland, Fontconfig, FreeType, HarfBuzz, xkbcommon, and D-Bus. Monstar negotiates protocol versions at runtime to support older compositors.
zig build
zig build test
zig build fmt