A terminal emulator
that gets out of the way.

No tmux religion. No keybinding gauntlet. Just a fast, clean terminal with tabs that work, menus that make sense, and nothing you didn't ask for.

Go + Dear ImGui + SDL3 GPL-3.0 Linux & macOS
xerotty running on Linux — tabs, a zsh prompt, and the animated lava-lamp glow backdrop
tmux-integrated terminals

Built for people who want their terminal to be their window manager. If you just want tabs and a clean GUI, you're fighting the tool.

iTerm2

A preferences panel with more tabs than your actual terminal. Profiles, triggers, arrangements, pointer actions, advanced paste— buried under menus-within-menus. It works, but the configuration surface area is hostile.

You just wanted to change the font size.

GNOME Terminal / xfce4-terminal

Simple. Clean. Exactly what you want—until you try to use it on macOS, or outside its native desktop, or without pulling in half of GTK and its runtime dependencies.

Ghostty

So close. Fast, native, genuinely good rendering. Then you right-click expecting New Tab and find Copy and Paste at the top instead. Clipboard actions everyone has keyboard shortcuts for, sitting where the things you actually opened the menu for should be.

Priorities in weird places.

Keyboard-first terminals

Alacritty, Kitty, Wezterm—powerful, fast, deeply configurable. But they assume you want to memorize keybindings for everything. Right-clicking for a context menu shouldn't feel like a concession.

Every terminal picks a side: power-user complexity or platform lock-in. None of them just give you a good GUI terminal that works the same everywhere, with tabs you can click, menus that lead with what you actually use, and a config that doesn't require a PhD.

xerotty is a cross-platform terminal emulator built on Dear ImGui and SDL3—no GTK, no Cocoa, no platform-specific widget toolkits. The same binary, the same behavior, the same menus on Linux and macOS.

It optimizes for the thing most terminals ignore: the GUI experience. Smooth tab navigation. Context menus where New Tab and New Window are at the top—the things you actually opened the menu for. Right-click that works like right-click. Scroll that works like scroll.

It stays out of your way by default: a single in-process binary, no background services. When you want more, opt in—a headless daemon can own your PTYs so sessions outlive the window, attach over SSH to any box with one ad-hoc user@host, and an MCP socket lets AI agents drive the terminal (read the screen, open tabs, run commands) behind a trust gate you control. The same one binary is the GUI, the daemon (xerotty serve), and the thin client (xerotty connect).

xerotty is also the first real project being built with Xyphia.

Renderer
Dear ImGui + SDL3, hardware-accelerated and immediate-mode. Native Wayland, X11, and Cocoa — no retained widget trees or style engines.
Language
Go. Single static binary, three roles via subcommand — GUI, daemon, and CLI client. No runtime dependencies beyond SDL3.
VT emulation
charmbracelet ultraviolet + vt. Grapheme-aware cells, comprehensive escape handling, scrollback, and search.
Daemon & remote
Headless daemon owns PTYs + scrollback over a msgpack socket. Detach / reattach, attach over SSH, survive a dropped link.
AI control
A JSON-RPC / MCP socket lets agents read the screen and scrollback and drive tabs — gated observe / propose / auto.
License
GPL-3.0. Free as in freedom.
Tabs
Click to switch. Middle-click to close. Drag to reorder. Scroll wheel to navigate. No keybinding required.
Context menus
Fully user-defined from TOML — order, items, nested submenus, conditions like enabled = "has_selection", shell-exec actions with $XEROTTY_SELECTION and $XEROTTY_CWD. Build it visually in the preferences dialog (drag to reorder, name your own submenus) or hand-write the file. New Tab and New Window come pre-bound at the top — not buried under clipboard items with shortcuts.
Selection
Single click drags by character. Double click drags by word. Triple click drags by line. iTerm2-style anchor stays put on the side you started from. Three-class tokens — $ doesn't drag the space with it.
Search
Incremental search across visible screen and scrollback history. Highlight matches, navigate with arrows.
Scrollback
Memory, disk-backed, or unlimited. Mouse wheel, page up/down, or scroll to a search match. Snaps back to live on new output.
Zoom
Ctrl+Plus/Minus or Ctrl+Scroll. Font scales, window resizes to fit. Visual feedback overlay.
Themes
Dracula, Gruvbox, Monokai, Solarized, Tango bundled. Convert any iTerm2 .itermcolors to TOML with the included import tool. Switch at runtime.
Lava lamp
An animated glow backdrop — amorphous color blobs that stretch, neck, and pinch apart behind your shell like the real thing, colored from the active theme (dracula glows purple, gruvbox glows amber). One [appearance.glow] block or a prefs checkbox. Opt-in, low-fps, stops burning cycles the instant you turn it off. Your terminal, but ambient.
Fonts
OS-backed font discovery — CoreText on macOS, fontconfig on Linux. Color emoji and Nerd Fonts work without you pre-declaring atlas ranges. Real bold from the family's bold face, faux-bold fallback when there isn't one (Monaco-style).
Config
One TOML file covers everything — fonts, themes, keybinds, the menu, link detection, scrollback mode, unsafe-paste rules. No profiles. No triggers. No arrangements. Edit with the in-app preferences dialog or in your editor — both write the same file.
Cross-platform
Same code, same UI on Linux and macOS. Native polish where it matters — Cmd keybinds and NSPasteboard on Mac, cell-snap drag-resize, point=pixel DPI matching iTerm. No GTK, no Cocoa widget toolkits.
Detach & remote
Run xerotty serve and your tabs live in a headless daemon — close the window, reattach later, nothing lost. Open a remote tab with one ad-hoc ssh user@host; the same lean binary auto-spawns on the far side. Heartbeat + reconnect ride out a slept laptop or dropped link and resync the scrollback.
AI control (MCP)
An MCP / JSON-RPC socket exposes the running terminal to AI agents — read the live screen and scrollback, open and close tabs, send input. Per-connection trust modes (observe / propose / auto) keep an agent on a leash until you let it off.
Lightweight
Single binary, starts in milliseconds. In-process by default — no background service unless you ask for one. The daemon, remote, and MCP bits are all opt-in. No phone-home, ever.