Skip to content

vazub/monstar

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

209 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Monstar

Monstar is a terminal emulator for Linux and Wayland.

Features

  • 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.

Performance

Reference distributions recorded on an Intel Core Ultra 7 258V. Lower is better. Results vary by workload.

Startup

Launch-and-exit time over 100 fresh runs of true:

Box plots of terminal startup times. Monstar has the lowest median at 12.3 milliseconds.

Keystroke latency

Key event to echoed-frame commit over 200 injected keys:

Box plots of terminal keystroke latency. Monstar has the lowest median at 0.26 milliseconds.

PTY throughput

Sample-time distributions from eight vtebench workloads:

Grouped box plots comparing Monstar, foot, Ghostty, kitty, and Alacritty across 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, and alacritty -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 with wtype at 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.

Linux integration

  • 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+N through 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 = always

If 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

Install the current development version on Arch Linux from the monstar-git AUR package:

yay -S monstar-git

Build 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:

monstar

See Development for build requirements.

Usage

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 --login

Pass -- 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.95

Run monstar --help, man monstar, or man 5 monstar for the complete command and configuration reference.

Configuration

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:3

By 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-config

Press Ctrl+Shift+, or send SIGUSR1 to reload the configuration:

pkill -USR1 monstar

Visual and interaction settings apply immediately. Process and storage settings apply to new windows.

Keybindings

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.

Development

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

About

wayland terminal based on libghostty. cpu rendered, like foot

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages