← Tech Guides
01

Quick Reference

Deploying reconnaissance units... Full battlefield scan of all terminal emulators in the current meta. Identify strengths, weaknesses, and optimal deployment scenarios at a glance.

> Master Comparison Matrix

Terminal Platform GPU Config Format Tabs Splits Images Ligatures Multiplexer License
Kitty Linux macOS OpenGL kitty.conf Built-in GPLv3
WezTerm All OpenGL .wezterm.lua Built-in MIT
Alacritty All OpenGL alacritty.toml Apache 2
Windows Terminal Windows DirectX settings.json Sixel MIT
iTerm2 macOS Metal opt. GUI / Profiles tmux CC GPLv2
Ghostty Linux macOS Native ghostty.conf MIT
GNOME Terminal Linux CPU dconf / GUI GPLv3
Konsole Linux CPU GUI / Profiles GPLv2
Foot Linux CPU foot.ini MIT
xterm.js Web WebGL opt. JS API N/A N/A N/A MIT
⚠ Quick Pick — Tactical Recommendations
Raw Speed → Alacritty (minimal, blazing fast, zero overhead)
Feature Arsenal → WezTerm (Lua scripting, multiplexer, images, cross-platform)
macOS Native → iTerm2 or Ghostty (deep OS integration, polished UX)
Linux Power User → Kitty (kittens, graphics protocol, SSH kitten)
Windows Default → Windows Terminal (ships with OS, solid tabs/splits)
Wayland Minimal → Foot (fast, lightweight, Wayland-native)

> GPU Acceleration Tier List

S-Tier: Native GPU

Ghostty (platform-native: Metal on macOS, OpenGL on Linux), Kitty (OpenGL with custom renderer), WezTerm (OpenGL with glyph atlas), Alacritty (OpenGL with batch rendering)

A-Tier: DirectX / Partial GPU

Windows Terminal (DirectX 11/12 via ATLAS engine), iTerm2 (optional Metal renderer), xterm.js (optional WebGL addon for canvas rendering)

B-Tier: CPU Rendering

GNOME Terminal (VTE + Cairo), Konsole (QPainter), Foot (CPU but highly optimized for Wayland with damage-based rendering), xterm (X11 core rendering)

02

Terminal Fundamentals

Initializing base operations manual... Before deploying specialized units, commanders must understand the underlying communication infrastructure.

> What Terminal Emulators Actually Do

A terminal emulator is a graphical application that emulates the behavior of a hardware video terminal. It provides a text-based interface to the operating system's shell by managing a pseudo-terminal (PTY) pair.

The architecture follows a well-defined chain of communication:

 1┌──────────────────────────────────────────────────────────────┐
 2│  USER INPUT (keyboard/mouse)                                 │
 3│       │                                                      │
 4│       ▼                                                      │
 5│  TERMINAL EMULATOR (Kitty, Alacritty, etc.)                  │
 6│       │  writes to PTY master fd                             │
 7│       ▼                                                      │
 8│  PTY MASTER  ←────→  PTY SLAVE  (/dev/pts/N)                 │
 9│  (kernel tty layer: line discipline, ECHO, signals)          │
10│       │                    │                                 │
11│       │                    ▼                                 │
12│       │               SHELL (bash, zsh, fish)                │
13│       │                    │                                 │
14│       │                    ▼                                 │
15│       │               CHILD PROCESS (vim, htop, etc.)        │
16│       │                    │                                 │
17│       ▼                    │  writes ANSI sequences          │
18│  TERMINAL EMULATOR  ◄──────┘                                 │
19│       │  parses escape codes, updates cell grid               │
20│       ▼                                                      │
21│  GPU/CPU RENDERER  →  SCREEN OUTPUT                          │
22└──────────────────────────────────────────────────────────────┘

The PTY master/slave pair is created via posix_openpt() or openpty(). The terminal emulator holds the master file descriptor; the shell reads from and writes to the slave. The kernel's line discipline layer handles signal generation (Ctrl+C → SIGINT), input echoing, and line buffering.

> VT100 to Modern Era — A Brief History

1978
DEC VT100
Digital Equipment Corporation ships the VT100, establishing the de facto standard for escape code sequences. Its ANSI X3.64 compliance becomes the foundation for all future terminal emulators.
1983
DEC VT220
Adds 8-bit character sets, additional function keys, and user-defined keys. Introduces the DEC Special Graphics character set still used for box-drawing characters.
1984
xterm
Thomas Dickey begins maintaining xterm for the X Window System. It becomes the reference implementation for terminal escape sequences and remains actively developed today.
2002-2010
GNOME Terminal & Konsole Era
Desktop environment terminals mature. VTE (Virtual Terminal Emulator) library becomes the shared backend for GNOME Terminal, Tilix, Terminator, and others.
2012
iTerm2 Rises
iTerm2 gains split panes, profiles, and tmux integration mode. Becomes the gold standard on macOS, establishing expectations for modern terminal features.
2017-2018
GPU Acceleration Wave
Alacritty (2017) and Kitty (2018) prove that GPU-accelerated rendering can dramatically improve terminal performance. The modern era begins.
2019
Windows Terminal
Microsoft open-sources Windows Terminal with GPU rendering, tabs, and modern styling. Signals the end of cmd.exe and ConHost as the default Windows experience.
2021
WezTerm
Wez Furlong releases WezTerm with Lua configuration, built-in multiplexer, cross-platform support, and a programmable API. Sets new bar for configurable terminals.
2024
Ghostty
Mitchell Hashimoto (HashiCorp co-founder) releases Ghostty, built in Zig with platform-native rendering. Uses libghostty core with native AppKit/GTK shells. Achieves exceptional performance with full feature parity.

> ANSI Escape Codes

Terminal emulators interpret escape sequences embedded in the output stream. These sequences control cursor position, text styling, colors, and terminal state. All modern sequences start with ESC[ (CSI, Control Sequence Introducer).

// COMMON ESCAPE SEQUENCES
 1# Cursor movement
 2\e[H       # Move cursor to home (0,0)
 3\e[5;10H   # Move cursor to row 5, column 10
 4\e[A       # Move cursor up 1 line
 5\e[2J      # Clear entire screen
 6
 7# Text styling (SGR — Select Graphic Rendition)
 8\e[0m      # Reset all attributes
 9\e[1m      # Bold
10\e[3m      # Italic
11\e[4m      # Underline
12\e[31m     # Set foreground color to red (3-bit)
13
14# 256-color mode
15\e[38;5;82m  # Set fg to color 82 (bright green)
16\e[48;5;236m # Set bg to color 236 (dark gray)
17
18# 24-bit true color (16.7 million colors)
19\e[38;2;255;140;0m  # Set fg to #FF8C00 (amber)
20\e[48;2;26;28;30m   # Set bg to #1A1C1E (gunmetal)

> Unicode & Emoji Rendering

Modern terminals must handle the full Unicode standard, which introduces complex rendering challenges beyond simple ASCII:

  • Wide characters — CJK ideographs occupy two cell widths. Terminals use wcwidth() to determine character width, but ambiguous-width characters (e.g., some symbols) vary by locale.
  • Combining characters — Diacritical marks like U+0301 (combining acute accent) must overlay the preceding base character without consuming a cell.
  • Emoji sequences — Modern emoji use ZWJ (Zero-Width Joiner) sequences to compose complex glyphs: 👨‍💻 is actually three codepoints joined. Terminals must understand grapheme cluster boundaries.
  • Variation selectorsU+FE0E (text) and U+FE0F (emoji) control whether a character renders as text or as a color emoji glyph.
  • Bidirectional text — Hebrew and Arabic require right-to-left rendering. Most terminals have limited or no BiDi support, deferring to applications like vim to handle RTL.
ⓘ Intelligence Report — Font Fallback
When the primary font lacks a glyph, terminals must fall back to other installed fonts. Kitty, WezTerm, and Ghostty handle this automatically through platform font APIs. Alacritty requires manual font.fallback configuration in alacritty.toml for complete coverage.

> True Color Support

24-bit true color (16.7 million colors) is supported by all modern GPU-accelerated terminals. Legacy terminals and some remote environments are limited to 256 colors or 16-color ANSI palettes.

// TEST TRUE COLOR SUPPORT
1# Print a gradient to test 24-bit color
2awk 'BEGIN{
3    for (i = 0; i <= 255; i++) {
4        printf "\033[48;2;%d;%d;0m ", i, 255-i
5    }
6    printf "\033[0m\n"
7}'
8
9# Check COLORTERM environment variable
10echo $COLORTERM   # Should output "truecolor" or "24bit"

> Font Rendering Engines

FreeType + HarfBuzz (Linux)

Open-source font rasterizer and text shaper. FreeType handles glyph rasterization with optional subpixel antialiasing; HarfBuzz performs OpenType layout (ligatures, kerning). Used by Kitty, Alacritty, and Foot.

CoreText (macOS)

Apple's native text rendering framework. Provides high-quality subpixel antialiasing tuned for Retina displays. Used by iTerm2 and Ghostty on macOS. Handles font fallback and emoji color glyphs natively.

DirectWrite (Windows)

Microsoft's hardware-accelerated text rendering API. Supports ClearType subpixel rendering and variable fonts. Used by Windows Terminal and WezTerm on Windows. Integrated with Direct2D for GPU-accelerated layout.

GPU Glyph Atlases

GPU-accelerated terminals pre-rasterize glyphs into texture atlases uploaded to the GPU. Each cell references an atlas coordinate, enabling batch rendering of the entire grid in a single draw call. This is why Alacritty and Kitty feel instant even at 4K resolution.

> GPU Acceleration Approaches

Modern terminals offload rendering from the CPU to the GPU, dramatically improving performance for large scrollback buffers, rapid output, and high-DPI displays.

  • OpenGL — Used by Kitty, Alacritty, WezTerm. Mature, cross-platform. Renders the terminal grid as textured quads with glyph atlases. Kitty uses custom shaders for cell backgrounds and underline styles.
  • Metal — Apple's low-overhead GPU API. Used by Ghostty on macOS for platform-native rendering with minimal driver overhead. iTerm2 offers an optional Metal renderer.
  • DirectX 11/12 — Windows Terminal uses the ATLAS text rendering engine built on DirectX. Achieves consistent 60fps scrolling even with complex Unicode content.
  • Vulkan / WebGPU — Emerging. Some experimental terminals explore Vulkan for even lower overhead. xterm.js uses a WebGL canvas addon as a lighter alternative to DOM-based rendering in browsers.
ⓘ Performance Note
GPU acceleration matters most when rapidly scrolling through large output (e.g., cat hugefile.log). For typical interactive shell usage, even CPU-rendered terminals like GNOME Terminal and Foot perform adequately. The real advantage of GPU rendering is latency: input-to-screen time drops below 5ms in terminals like Ghostty and Alacritty.
03

Kitty

Elite reconnaissance unit deployed. Kovid Goyal's GPU-accelerated terminal with a scripting framework, graphics protocol, and built-in multiplexer. A high-APM power user's weapon of choice.

K
Kitty
GPU-Accelerated Terminal Emulator // C + Python // v0.42.2
Linux macOS GPU: OpenGL
Kitty is a fast, feature-rich, GPU-based terminal emulator written in C with a Python extension system. Created by Kovid Goyal (also the creator of Calibre), it pioneered the Kitty graphics protocol for inline image display and offers a unique "kittens" framework for extending terminal functionality with Python scripts.
Speed
9/10
Features
9/10
Config Ease
7/10
Extensibility
9.5/10
Cross-Platform
6/10
Community
8.5/10

> Installation

Official Installer
Pre-built binaries for Linux and macOS (recommended)
curl -L sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin
Homebrew (macOS)
Install via Homebrew cask
brew install --cask kitty
APT (Debian/Ubuntu)
System package (may lag behind latest)
sudo apt install kitty
Pacman (Arch)
Available in the official repos
sudo pacman -S kitty

> Configuration

Kitty uses a simple key-value configuration file at ~/.config/kitty/kitty.conf. No TOML, YAML, or Lua — just plain key value pairs with comments. The configuration is live-reloadable with ctrl+shift+f5.

// ~/.config/kitty/kitty.conf
 1# Font configuration
 2font_family      JetBrains Mono
 3bold_font        auto
 4italic_font      auto
 5font_size        13.0
 6
 7# Cursor
 8cursor_shape     beam
 9cursor_blink_interval 0.5
10
11# Scrollback
12scrollback_lines 10000
13scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
14
15# Performance
16repaint_delay    10
17input_delay      3
18sync_to_monitor  yes
19
20# Window layout
21enabled_layouts  splits,tall,fat,grid,stack
22window_padding_width 8
23
24# Tab bar
25tab_bar_style    powerline
26tab_powerline_style slanted
27
28# Color scheme (Catppuccin Mocha)
29foreground       #CDD6F4
30background       #1E1E2E
31background_opacity 0.95
32
33# Key mappings
34map ctrl+shift+enter    launch --cwd=current
35map ctrl+shift+t        new_tab_with_cwd
36map ctrl+shift+h        neighboring_window left
37map ctrl+shift+l        neighboring_window right

> Key Features

Kittens Framework

Python-based extension system. Built-in kittens include icat (image display), diff (side-by-side diff viewer), unicode_input (character picker), hints (URL/path extractor), and clipboard. Write custom kittens with the kitty Python API.

Graphics Protocol

The Kitty graphics protocol enables inline image display with full alpha compositing, animation support, and Unicode placeholder positioning. Adopted by WezTerm, Konsole, and wayland-native terminals. Supports PNG, GIF, JPEG, and BMP.

Remote Control

Control kitty instances programmatically via kitty @ set-colors, kitty @ launch, kitty @ focus-window, etc. Enables scripted workspace setups and dynamic theming. Requires allow_remote_control yes in config.

SSH Kitten

The kitten ssh command replaces plain SSH with automatic shell integration on remote hosts. Transfers terminfo, copies shell config, and enables remote image display over the Kitty graphics protocol without any setup on the remote machine.

> Image Display with icat

Kitty's graphics protocol allows displaying images directly in the terminal. The icat kitten provides a simple CLI interface:

// IMAGE DISPLAY COMMANDS
 1# Display an image inline
 2kitty +kitten icat image.png
 3
 4# Display with specific dimensions
 5kitty +kitten icat --place 40x20@0x0 photo.jpg
 6
 7# Display from URL
 8kitty +kitten icat https://placekitten.com/800/600
 9
10# Use in scripts (e.g., file manager previews)
11# Works with ranger, lf, yazi for image previews
12kitty +kitten icat --clear
13kitty +kitten icat --transfer-mode=stream < image.png
14
15# Animated GIFs play inline
16kitty +kitten icat animation.gif
ⓘ Protocol Compatibility
The Kitty graphics protocol is now supported by WezTerm, Konsole (5.25+), and several TUI libraries including notcurses, chafa, and timg. Applications like ranger, yazi, and neovim (via plugins) can detect and use the protocol automatically.

> Theme Support

Kitty ships with 300+ built-in themes and supports automatic dark/light mode switching based on OS appearance settings.

// THEME MANAGEMENT
1# Browse and apply themes interactively
2kitty +kitten themes
3
4# Apply a theme by name
5kitty +kitten themes --reload-in=all Catppuccin-Mocha
6
7# Live-reload colors without restarting
8kitty @ set-colors --all ~/.config/kitty/themes/nord.conf
9
10# Include theme file in kitty.conf
11include themes/catppuccin-mocha.conf

> Platform Support

Platform Status Notes
Linux ✓ Full Support Primary development target. X11 and Wayland native. Best feature coverage including all kittens and graphics protocol.
macOS ✓ Full Support Native .app bundle. Uses CoreText for rendering. Some macOS-specific keybinding differences. Homebrew cask available.
Windows ✗ Not Supported No native Windows support. Can be used through WSL2 with an X server (XWayland) or natively in WSL2 GUI apps (WSLg).
⚠ Commander's Note
Kitty's maintainer has explicitly stated that native Windows support is not planned. If you need a cross-platform terminal with similar features, consider WezTerm as an alternative that runs natively on all three major platforms with comparable capabilities.
04

WezTerm

Heavy assault unit online. Wez Furlong's Rust-built GPU terminal combines a built-in multiplexer, SSH domain management, and full Lua scripting into a single cross-platform powerhouse. Maximum firepower on every front.

>
WezTerm
Rust-based GPU Terminal & Multiplexer // Rust // v20240203
Linux ✓ macOS ✓ Windows ✓ BSD ✓ GPU: OpenGL/Metal/Vulkan
WezTerm is a GPU-accelerated cross-platform terminal emulator and multiplexer written in Rust by Wez Furlong, a former member of the Mercurial and Facebook/Meta engineering teams. It combines the functionality of a terminal emulator and tmux into a single binary with a powerful Lua-based configuration system. WezTerm natively supports SSH domains, serial ports, the Kitty graphics protocol, iTerm2 image protocol, Sixel, font ligatures, and true color — out of the box on every platform.
Speed
8/10
Features
10/10
Config Ease
8/10
Extensibility
10/10
Cross-Platform
10/10
Community
7.5/10

> Installation

Homebrew (macOS)
Install via Homebrew cask on macOS
brew install --cask wezterm
Winget (Windows)
Install from the Windows Package Manager
winget install wez.wezterm
Flatpak (Linux)
Universal Linux install via Flatpak
flatpak install flathub org.wezfurlong.wezterm
APT (Ubuntu/Debian)
Add the WezTerm repo and install via APT
curl -fsSL https://apt.fury.io/wez/gpg.key \
  | sudo gpg --dearmor -o /usr/share/keyrings/wezterm.gpg
sudo apt install wezterm

> Configuration

WezTerm uses Lua for its entire configuration, giving you the full power of a real programming language. The config file lives at ~/.wezterm.lua (or $XDG_CONFIG_HOME/wezterm/wezterm.lua on Linux). Changes are hot-reloaded automatically — no restart needed.

// ~/.wezterm.lua
 1local wezterm = require 'wezterm'
 2local config = {}
 3
 4-- Use config_builder for better error messages
 5if wezterm.config_builder then
 6  config = wezterm.config_builder()
 7end
 8
 9-- Font & appearance
10config.font = wezterm.font 'JetBrains Mono'
11config.font_size = 13.0
12config.color_scheme = 'Catppuccin Mocha'
13config.enable_tab_bar = true
14config.window_background_opacity = 0.95
15
16-- Window chrome
17config.window_decorations = "RESIZE"
18config.window_padding = { left = 8, right = 8, top = 8, bottom = 8 }
19
20-- Multiplexer & tabs
21config.use_fancy_tab_bar = false
22config.tab_max_width = 25
23
24-- Leader key (like tmux prefix)
25config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
26
27return config

> Key Features

Built-in Multiplexer

WezTerm includes a full multiplexer with tabs, panes (splits), and workspaces — no tmux required. Panes can be split horizontally or vertically, resized, and zoomed. Supports session persistence through the wezterm connect domain system.

SSH Domains

Connect to remote hosts as native multiplexer domains. Remote tabs and panes feel local — WezTerm handles the mux protocol over SSH. Supports agent forwarding, jump hosts, and automatic reconnection on network interruptions.

Lua Scripting

Full Lua 5.4 runtime embedded in the config. Define custom keybindings, event handlers, dynamic tab titles, status bar widgets, and conditional logic based on hostname, OS, or time of day. Supports wezterm.action callbacks and wezterm.on() event hooks.

Leader Keys

Configurable leader key system inspired by tmux and Vim. Chain multi-key sequences like LEADER + | for vertical split, LEADER + - for horizontal split. Timeout is adjustable and visual indicator shows when leader is active.

> SSH Domains

WezTerm's SSH domain feature allows you to treat remote machines as native multiplexer domains. Tabs opened in an SSH domain run on the remote host with full mux capabilities.

// SSH DOMAIN CONFIGURATION
 1-- Define SSH domains in wezterm.lua
 2config.ssh_domains = {
 3  {
 4    name = 'production',
 5    remote_address = 'prod.example.com',
 6    username = 'deploy',
 7    remote_wezterm_path = '/usr/local/bin/wezterm',
 8  },
 9  {
10    name = 'devbox',
11    remote_address = '192.168.1.50:22',
12    username = 'dev',
13    multiplexing = 'WezTerm',
14  },
15}
16
17-- Connect from CLI:
18-- wezterm connect production
19-- wezterm connect devbox
ⓘ Mux Server
WezTerm can also run as a standalone mux server with wezterm-mux-server --daemonize. Clients connect via wezterm connect unix for local sessions or wezterm connect <domain> for remote ones. Sessions persist even after the GUI disconnects — like tmux, but integrated.

> Plugin Ecosystem

WezTerm's Lua scripting has spawned a growing ecosystem of community plugins and configuration modules, collected in the awesome-wezterm repository.

Session Manager
Save and restore workspace layouts with named sessions
-- plugin: wezterm-session-manager
local session = require 'session-manager'
wezterm.on('save_session', function(win)
  session.save_state(win)
end)
Smart Splits
Navigate between WezTerm panes and Neovim splits seamlessly
-- plugin: smart-splits.nvim integration
local smart = require 'smart-splits'
smart.setup(config)
Tab Bar Customization
Custom status bar with git branch, battery, hostname
wezterm.on('update-right-status',
  function(window, pane)
    window:set_right_status(
      wezterm.format({
        {Text = pane:get_domain_name()}
      })
    )
end)
Dynamic Color Schemes
Switch themes based on time of day or OS appearance
local scheme = wezterm.gui
  .get_appearance()
if scheme == 'Dark' then
  config.color_scheme = 'Catppuccin Mocha'
else
  config.color_scheme = 'Catppuccin Latte'
end

> Image Protocol Support

WezTerm supports three inline image display protocols, making it one of the most compatible terminals for TUI applications that render graphics.

Protocol Status Details
iTerm2 Image Protocol ✓ Supported Full support for imgcat and iTerm2 inline images. Works with tools like imgcat, chafa, and viu.
Kitty Graphics Protocol ✓ Supported Native support for the Kitty graphics protocol. Works with kitty +kitten icat, ranger, yazi, and Neovim image plugins.
Sixel ✓ Supported Sixel graphics rendering for legacy compatibility with tools like libsixel, lsix, and gnuplot sixel output.

> Platform Support

Platform Status Notes
Linux ✓ Full Support X11 and Wayland. Flatpak, AppImage, and distro packages available. Full GPU acceleration via OpenGL.
macOS ✓ Full Support Native .app bundle. Metal GPU backend. Homebrew cask available. Retina display support.
Windows ✓ Full Support Native Windows build. DirectX GPU backend. Winget, Scoop, and Chocolatey packages. Full ConPTY integration.
FreeBSD ✓ Full Support Available in FreeBSD ports and can be built from source with Cargo. OpenGL rendering.
⚠ Commander's Note
WezTerm's primary developer, Wez Furlong, stepped back from active development in late 2024. The project remains functional and community-maintained, but the pace of new feature releases has slowed. Evaluate whether the current feature set meets your long-term requirements before full deployment.
05

Alacritty

Surgical strike unit deployed. Built for one purpose: raw speed. No tabs, no splits, no images — just the fastest terminal rendering on the battlefield. Pair it with tmux for an unstoppable offensive line.

A
Alacritty
OpenGL Minimalist Speed Demon // Rust // v0.16.1
Linux ✓ macOS ✓ Windows ✓ BSD ✓ GPU: OpenGL 3.3
Alacritty is a cross-platform, GPU-accelerated terminal emulator that prioritizes simplicity and performance above all else. Written in Rust using OpenGL rendering, it intentionally omits features like tabs, splits, and image protocols, delegating those to dedicated tools like tmux and screen. First released in 2017, it was one of the first GPU-accelerated terminals and remains the benchmark for raw rendering speed and input latency.
Speed
10/10
Features
4/10
Config Ease
8/10
Extensibility
2/10
Cross-Platform
9/10
Community
8/10

> Installation

Homebrew (macOS)
Install via Homebrew cask
brew install --cask alacritty
Cargo (All Platforms)
Build from source with Rust toolchain
cargo install alacritty
APT (Ubuntu/Debian)
Available in official repositories (24.04+)
sudo apt install alacritty
Winget (Windows)
Install via Windows Package Manager
winget install Alacritty.Alacritty
Scoop (Windows)
Alternative Windows package manager
scoop install alacritty
Pacman (Arch)
Available in the official Arch repos
sudo pacman -S alacritty

> Configuration

Alacritty uses TOML for its configuration (migrated from YAML in v0.13). The config file lives at ~/.config/alacritty/alacritty.toml (or %APPDATA%\alacritty\alacritty.toml on Windows). Changes are detected and applied automatically on save.

// ~/.config/alacritty/alacritty.toml
 1# Window settings
 2[window]
 3opacity = 0.95
 4padding = { x = 8, y = 8 }
 5decorations = "Full"
 6dynamic_title = true
 7
 8# Font configuration
 9[font]
10size = 13.0
11
12[font.normal]
13family = "JetBrains Mono"
14style = "Regular"
15
16[font.bold]
17style = "Bold"
18
19# Color scheme
20[colors.primary]
21background = "#1a1c1e"
22foreground = "#d0d4d8"
23
24[colors.normal]
25black   = "#1a1c1e"
26red     = "#cc2222"
27green   = "#00cc44"
28yellow  = "#ffa500"
29blue    = "#3366ff"
30magenta = "#cc66ff"
31cyan    = "#00b4b4"
32white   = "#d0d4d8"
33
34# Scrollback
35[scrolling]
36history = 10000
37multiplier = 3

> Design Philosophy

⚠ Intentional Minimalism
Alacritty deliberately omits features that other terminals bundle in. No tabs (use tmux or your window manager), no splits (use tmux), no inline images (by design — the project considers terminal image protocols outside scope), no built-in ligature rendering (added in v0.16 with font.builtin_box_drawing = false), and no scripting engine. The philosophy: do one thing — render terminal output — and do it faster than anything else. Every feature request is evaluated against the question: "Does this belong in a terminal emulator, or in another tool?"

> Vi Mode

Alacritty has a built-in Vi mode for keyboard-driven scrollback navigation and text selection. Activate it with Ctrl+Shift+Space (default binding).

Key Action Details
h/j/k/l Directional movement Move cursor left, down, up, right through scrollback buffer
w/b/e Word motions Jump by word forward, backward, end-of-word
0 / $ Line start/end Jump to beginning or end of current line
* / # Search word under cursor Search forward (*) or backward (#) for the word under the cursor
{ / } Paragraph motions Jump to previous or next empty line (paragraph boundary)
/ / ? Search Forward search (/) or backward search (?) with regex support
v / V Visual selection Start character (v) or line (V) selection mode
y Yank Copy selected text to clipboard

> Migration — YAML to TOML

Alacritty migrated from YAML to TOML configuration in v0.13. The built-in migration tool handles the conversion automatically.

// MIGRATION COMMANDS
1# Automatically convert alacritty.yml to alacritty.toml
2alacritty migrate
3
4# Dry run — preview changes without writing
5alacritty migrate --dry-run
6
7# Migrate a specific file
8alacritty migrate -c ~/.config/alacritty/alacritty.yml
9
10# The old YAML file is kept as a backup (.yml.bak)
11# Alacritty ignores .yml files when .toml exists

> Performance Benchmarks

Alacritty's minimalist architecture translates directly to best-in-class performance metrics. These benchmarks represent typical measurements on modern hardware.

Metric Alacritty Kitty WezTerm GNOME Terminal
Input Latency ~2ms ~5ms ~8ms ~12ms
Memory (Idle) ~30 MB ~55 MB ~80 MB ~45 MB
Throughput (cat large file) Fastest Fast Moderate Slow
Startup Time ~50ms ~80ms ~120ms ~60ms
GPU VRAM Minimal Low Moderate N/A (CPU)
ⓘ Benchmark Context
Real-world performance depends heavily on font complexity, scrollback size, and GPU drivers. Alacritty's advantage is most pronounced when processing large volumes of output (e.g., cat of multi-GB log files, heavy compiler output). For typical interactive use, the difference between GPU-accelerated terminals is imperceptible to most users.

> Pairing with tmux

The recommended Alacritty workflow pairs it with tmux for multiplexing. This combination gives you Alacritty's raw speed with tmux's tabs, splits, session persistence, and remote attach capabilities.

// ALACRITTY + TMUX CONFIGURATION
 1# alacritty.toml — auto-launch tmux
 2[terminal]
 3shell = { program = "/usr/bin/tmux", args = ["new-session", "-A", "-s", "main"] }
 4
 5# Keybindings that pass through to tmux
 6[[keyboard.bindings]]
 7key = "N"
 8mods = "Control|Shift"
 9chars = "\u0001c" # Ctrl-A + c = new tmux window
10
11[[keyboard.bindings]]
12key = "D"
13mods = "Control|Shift"
14chars = "\u0001%" # Ctrl-A + % = vertical split
// TMUX.CONF — OPTIMIZE FOR ALACRITTY
1# Enable true color and undercurl
2set -g default-terminal "tmux-256color"
3set -ag terminal-overrides ",alacritty:RGB"
4set -ag terminal-overrides ',*:Smulx=\E[4::%p1%dm'
5
6# Reduce escape time for snappy Vim/Neovim
7set -sg escape-time 10
8
9# Enable focus events (for Neovim autoread)
10set -g focus-events on

> Platform Support

Platform Status Notes
Linux ✓ Full Support X11 and Wayland. Available in most distro repos. Primary development target alongside macOS.
macOS ✓ Full Support Native .app bundle. Homebrew cask. Uses Core Graphics for font rendering with OpenGL display.
Windows ✓ Full Support Native Windows build via ConPTY. Winget and Scoop packages. Works with PowerShell, cmd, and WSL shells.
FreeBSD ✓ Full Support Available in FreeBSD ports. Builds from source with Cargo. Community-maintained port.
06

Windows Terminal

Microsoft's garrison fortification complete. The modern terminal for Windows 10 and 11 — GPU-rendered, tab-enabled, profile-driven, and deeply integrated with WSL, PowerShell 7, and the Windows shell ecosystem. The default command post for the entire Windows platform.

WT
Windows Terminal
Microsoft's Modern Terminal for Windows // C++ // v1.21
Windows ✓
Windows Terminal is Microsoft's open-source, GPU-accelerated terminal application for Windows 10 and 11. Released in 2019 and now the default terminal on Windows 11, it supports multiple tabs, panes, profiles for different shells (PowerShell, cmd, WSL, Azure Cloud Shell), Unicode and UTF-8, custom themes, and a JSON-based configuration system. Built with DirectX/DXGI for text rendering, it replaced the decades-old conhost.exe as the primary Windows terminal experience.
Speed
7/10
Features
8/10
Config Ease
9/10
Extensibility
5/10
Cross-Platform
2/10
Community
9/10

> Installation

Microsoft Store
Recommended — auto-updates via the Store
# Search "Windows Terminal" in Microsoft Store
# Or open directly:
ms-windows-store://pdp/?productid=9N0DX20HK701
Winget
Install from the command line
winget install Microsoft.WindowsTerminal
Scoop
Alternative package manager install
scoop bucket add extras
scoop install windows-terminal
Pre-installed (Win 11)
Default terminal on Windows 11 22H2+
# Already installed and set as default
# Verify: Settings > Privacy > For developers
#   > Terminal: Windows Terminal

> Configuration

Windows Terminal uses a JSON settings file with a GUI settings editor. Open settings with Ctrl+, (GUI) or Ctrl+Shift+, (JSON). The file lives at %LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json.

// settings.json
 1{
 2  "defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
 3  "theme": "dark",
 4  "profiles": {
 5    "defaults": {
 6      "font": {
 7        "face": "CaskaydiaCove Nerd Font",
 8        "size": 13
 9      },
10      "opacity": 90,
11      "useAcrylic": true,
12      "padding": "8",
13      "cursorShape": "bar"
14    },
15    "list": [
16      {
17        "name": "PowerShell 7",
18        "source": "Windows.Terminal.PowershellCore",
19        "colorScheme": "Catppuccin Mocha"
20      },
21      {
22        "name": "Ubuntu (WSL)",
23        "source": "Windows.Terminal.Wsl",
24        "startingDirectory": "~"
25      }
26    ]
27  }
28}

> Key Features

Profiles System

Each shell gets its own profile with independent settings: font, color scheme, starting directory, icon, background image, and more. Profiles auto-detect installed shells including PowerShell, cmd, WSL distros, Azure Cloud Shell, Git Bash, and Cygwin.

WSL Integration

First-class Windows Subsystem for Linux support. WSL distros appear as automatic profiles. Supports wsl.exe launch, \\wsl$ path navigation, and GPU passthrough for CUDA/OpenCL workloads in WSL2. Run Linux GUIs alongside Windows shells.

Quake Mode

Drop-down terminal window activated with a global hotkey (default: Win+`). The terminal slides down from the top of the screen like a Quake console. Configurable with "launchMode": "focus" and wt -w _quake.

Command Palette

VS Code-style command palette activated with Ctrl+Shift+P. Search and execute any action: switch profiles, change color schemes, split panes, adjust font size, toggle focus mode. Supports fuzzy matching and keybinding hints.

> Shell Integration

Windows Terminal v1.15+ introduced shell integration via semantic zones, command marks, and scroll-to-mark navigation. This allows the terminal to understand command boundaries, detect success/failure, and enable structured navigation.

// POWERSHELL SHELL INTEGRATION
 1# Add to $PROFILE for PowerShell 7.x
 2# Enables command marks, semantic zones, and CWD tracking
 3
 4$Global:__LastHistoryId = -1
 5
 6function Global:__Terminal-Get-LastExitCode {
 7  if ($? -eq $True) { return 0 }
 8  return -1
 9}
10
11# Scroll between commands: Ctrl+Shift+Up / Down
12# Select command output: Ctrl+Shift+Click
13# Recent command menu: Ctrl+Shift+P > "scroll to mark"
ⓘ Automatic Detection
As of Windows Terminal v1.18+, shell integration works automatically with PowerShell 7.4+ and bash (in WSL) without any profile modifications. The terminal detects FTCS escape sequences emitted by modern shells and enables mark-based navigation, command duration display, and right-click "select command output" automatically.

> Customization

Windows Terminal offers deep visual customization including acrylic/mica transparency, background images, color schemes, and multi-window layouts.

// VISUAL CUSTOMIZATION (settings.json)
 1// Acrylic transparency
 2"useAcrylic": true,
 3"opacity": 85,
 4
 5// Mica material (Windows 11)
 6"useAcrylic": false,
 7"opacity": 50,
 8
 9// Background image
10"backgroundImage": "C:/Users/me/bg.png",
11"backgroundImageStretchMode": "uniformToFill",
12"backgroundImageOpacity": 0.15,
13
14// Focus mode (hides tabs and title bar)
15// Toggle: Ctrl+Shift+P > "Toggle focus mode"
16"launchMode": "focus",
17
18// Startup actions (open split layout)
19"startupActions": "new-tab -p PowerShell ; split-pane -p Ubuntu -H"

> PowerShell 7 Integration

Windows Terminal pairs best with PowerShell 7.x (pwsh), Microsoft's cross-platform successor to Windows PowerShell 5.1. Combining them unlocks modern prompt engines, predictive IntelliSense, and rich shell integration.

// POWERSHELL 7 SETUP
 1# Install PowerShell 7
 2winget install Microsoft.PowerShell
 3
 4# Install Oh My Posh for prompt theming
 5winget install JanDeDobbeleer.OhMyPosh
 6
 7# Add to $PROFILE (pwsh):
 8oh-my-posh init pwsh --config
 9  "$env:POSH_THEMES_PATH\catppuccin_mocha.omp.json" |
10  Invoke-Expression
11
12# Enable predictive IntelliSense
13Set-PSReadLineOption -PredictionSource HistoryAndPlugin
14Set-PSReadLineOption -PredictionViewStyle ListView
15
16# Enable icons in terminal (Terminal-Icons module)
17Install-Module -Name Terminal-Icons -Repository PSGallery
18Import-Module Terminal-Icons

> Themes

Windows Terminal supports custom color schemes defined in settings.json and includes several bundled themes. The community has built hundreds of additional schemes.

Bundled Themes
Pre-installed schemes ship with Windows Terminal
Bundled: Campbell, One Half Dark,
One Half Light, Solarized Dark,
Solarized Light, Tango Dark,
Tango Light, Vintage
Community Themes
Import from windowsterminalthemes.dev
// Add to "schemes" array:
{
  "name": "Catppuccin Mocha",
  "background": "#1E1E2E",
  "foreground": "#CDD6F4",
  "cursorColor": "#F5E0DC"
}
App Theme (v1.16+)
Theme the entire app chrome, not just the terminal
"theme": "dark",
// Or custom:
"themes": [{
  "name": "HUD",
  "tab": {
    "background": "#1a1c1eFF"
  }
}]
Fragments Extension
Themes and profiles distributed as JSON fragments
// Install via package managers
// Fragments auto-merge into settings
// Location: %LOCALAPPDATA%\
//   Microsoft\Windows Terminal\
//   Fragments\{app-name}\

> Platform Support

Platform Status Notes
Windows 11 ✓ Default Terminal Pre-installed since 22H2. Set as the default terminal for all console applications. Receives updates via Microsoft Store.
Windows 10 ✓ Full Support Requires Windows 10 1903 (build 18362) or later. Install from Microsoft Store or winget. Not the default — must be set manually.
Linux ✗ Not Available Windows Terminal is Windows-only. The underlying rendering engine (Cascadia) is open source, but no Linux build exists.
macOS ✗ Not Available No macOS support. Consider iTerm2 or one of the cross-platform alternatives (WezTerm, Kitty, Alacritty) instead.
ⓘ Windows Terminal vs. conhost
Windows Terminal replaces the legacy conhost.exe that powered cmd.exe and PowerShell windows since Windows 7. Conhost is still present on the system for backward compatibility, but all new console allocations on Windows 11 are routed through Windows Terminal by default. You can revert to conhost in Settings if needed, though there is rarely a reason to do so.
07

iTerm2

macOS command post establishing secure channel. Apple's platform-exclusive powerhouse terminal with deep shell integration, AI-assisted operations, and a Python API for custom automation. The veteran commander of the macOS theatre.

iTerm2
The macOS Terminal Powerhouse // Objective-C // v3.5
macOS ✓
iTerm2 is the definitive terminal emulator for macOS, created by George Nachman. First released in 2010 as a fork of the original iTerm, it has grown into the most feature-rich terminal on the Apple platform. iTerm2 offers split panes, a sophisticated profile system, shell integration with semantic history, a Python scripting API, tmux integration mode, inline image display via imgcat, and — as of v3.5 — built-in AI chat capabilities powered by LLMs. It uses an optional Metal renderer for GPU-accelerated drawing on modern Macs.
Speed
6/10
Features
10/10
Config Ease
9/10
Extensibility
8/10
Cross-Platform
1/10
Community
9/10

> Installation

Homebrew (Recommended)
Install via Homebrew cask on macOS
brew install --cask iterm2
Direct Download
Download the .zip from the official site
# Download from https://iterm2.com/downloads.html
# Drag iTerm.app to /Applications
# Or use the stable release direct link:
curl -L https://iterm2.com/downloads/stable/latest -o iTerm2.zip
unzip iTerm2.zip && mv iTerm.app /Applications/

> Key Features

Profile System

iTerm2's profile system lets you define independent configurations for fonts, colors, key mappings, window behavior, and shell commands. Profiles can auto-switch based on the current hostname, username, directory path, or running application — detected via shell integration escape sequences.

Shell Integration

The it2 shell integration toolkit injects escape sequences into your prompt to enable semantic zones, command marks, per-command exit status tracking, and automatic profile switching. Install with iTerm2 > Install Shell Integration or source the script manually in your shell profile.

Triggers & Badges

Triggers perform actions when text matching a regex appears in the terminal: highlight text, send notifications, run scripts, set badges, or stop scrolling. Badges display a large, semi-transparent watermark label in the terminal showing dynamic info like hostname or git branch.

Python API

iTerm2 exposes a full Python 3 API via a WebSocket connection. Automate window creation, monitor sessions, react to events, inject text, inspect terminal state, and build custom toolbelt panels. Install with pip3 install iterm2 and run scripts from Scripts > Manage.

> Automatic Profile Switching

iTerm2 can automatically switch profiles based on runtime context detected through shell integration. This enables different colors, fonts, and behaviors per environment without any manual switching.

// PROFILE SWITCHING RULES
 1# Profiles > Advanced > Automatic Profile Switching
 2# Rules use the format: criteria:value
 3
 4# Switch to "Production" profile when SSH'd to prod hosts
 5Hostname: prod-*.example.com
 6
 7# Switch to "Root" profile when running as root
 8Username: root
 9
10# Switch to "Project" profile in specific directories
11Path: /Users/dev/projects/frontend*
12
13# Combine criteria with "Application" matching
14Application: python3
ⓘ Intelligence Report
Automatic Profile Switching requires shell integration to be installed. Without it, iTerm2 cannot detect hostname, username, or path changes. The shell integration script emits OSC escape sequences that update iTerm2's internal state on every prompt render.

> Shell Integration & Semantic History

Shell integration transforms iTerm2 from a passive text renderer into an intelligent command environment. Once installed, the terminal understands command boundaries, tracks exit codes, and enables structured navigation.

// SHELL INTEGRATION SETUP
 1# Install shell integration (adds to .bash_profile/.zshrc)
 2# iTerm2 > Install Shell Integration (menu)
 3# Or manually source the script:
 4source ~/.iterm2_shell_integration.zsh
 5
 6# it2 utilities installed alongside shell integration:
 7it2attention fireworks   # trigger attention animation
 8it2check                 # verify shell integration is active
 9it2copy < file.txt       # copy to clipboard (works over SSH)
10it2dl remote-file.txt    # download file via terminal (works over SSH)
11it2ul                    # upload file to remote host
12it2setcolor preset Solarized Dark  # change color preset
13it2setkeylabel set F1 "Deploy"     # set Touch Bar labels

With shell integration active, these navigation features become available:

  • Command marks — Each prompt is marked. Navigate between commands with Cmd+Shift+Up/Down.
  • Select command output — Right-click a mark to select the entire output of a single command.
  • Command status indicators — Blue arrow for running, green checkmark for success (exit 0), red X for failure (non-zero exit).
  • Recent directories — The Toolbelt shows a list of recently visited directories across all sessions.
  • Semantic history — Cmd+click on filenames and URLs in terminal output to open them in the associated application.

> Unique Features

Hotkey Window (Drop-Down Terminal)

Configure a system-wide hotkey to toggle a dedicated terminal window that drops down from the top of the screen (or slides from any edge). Operates independently from regular windows with its own profile. Activate via Preferences > Keys > Hotkey. Supports multiple hotkey windows with different profiles.

AI Chat Integration

iTerm2 v3.5+ includes a built-in AI assistant that can read terminal contents, explain errors, suggest commands, and compose scripts. Connects to OpenAI, Anthropic, or local LLMs. Accessible via Edit > Engage AI or Cmd+Shift+.. The Composer feature provides AI-assisted command completion inline at the prompt.

Inline Images (imgcat)

Display images directly in the terminal with the imgcat utility. Supports PNG, JPEG, GIF, and PDF rendering inline. Works over SSH when shell integration is installed on the remote host. Applications like ranger, yazi, and matplotlib can detect and use the iTerm2 image protocol.

Broadcast Input

Send keyboard input simultaneously to all panes in a tab, all tabs in a window, or all sessions across all windows. Essential for running the same commands on multiple servers at once. Toggle with Shell > Broadcast Input or Cmd+Opt+I.

Window Arrangements

Save the complete layout of windows, tabs, splits, and profiles as a named arrangement. Restore instantly with Window > Restore Window Arrangement. Set a default arrangement to open on launch. Includes session state, working directories, and running commands.

Regex Search & Highlighting

Full regex search through scrollback with Cmd+F. Matches highlight instantly as you type. Supports capture groups, case-insensitive mode, and search history. Results persist while scrolling. Combined with triggers, you can permanently highlight patterns like error codes or IP addresses.

> tmux Integration Mode

iTerm2's tmux integration mode is a unique feature that translates tmux windows and panes into native iTerm2 tabs and split panes. Instead of rendering tmux's own UI inside a terminal, iTerm2 becomes the tmux client — so you get native scrollback, native split panes, and native keyboard shortcuts while tmux manages the sessions on the server.

// TMUX INTEGRATION
 1# Start a new tmux session with iTerm2 integration
 2tmux -CC
 3
 4# Attach to an existing tmux session with integration
 5tmux -CC attach -t mysession
 6
 7# How it works:
 8# - tmux -CC starts tmux in "control mode"
 9# - iTerm2 reads tmux's control protocol output
10# - Each tmux window becomes a native iTerm2 tab
11# - Each tmux pane becomes a native iTerm2 split
12# - Native scrollback replaces tmux's scroll mode
13# - Disconnect/reconnect preserves all sessions
14
15# Works over SSH too:
16ssh server -t 'tmux -CC attach || tmux -CC'
ⓘ Tactical Advantage
tmux integration mode is one of iTerm2's killer features for remote development. You get persistent sessions (survive SSH disconnects), native macOS scrollback and search, native split panes with mouse resizing, and the ability to use Cmd+C/V for copy/paste instead of tmux's prefix-based copy mode. The sessions persist on the remote server even if iTerm2 crashes.

> Platform Support

Platform Status Notes
macOS ✓ Full Support Primary and only platform. Requires macOS 10.15 (Catalina) or later. Native .app bundle with Metal GPU rendering. Apple Silicon and Intel supported.
Linux ✗ Not Available No Linux port exists. Consider Kitty, WezTerm, or Ghostty for comparable feature sets on Linux.
Windows ✗ Not Available No Windows support. Windows Terminal or WezTerm are the closest alternatives on Windows.
⚠ Commander's Note
iTerm2 is a macOS-exclusive application built with Cocoa/AppKit and deeply integrated with macOS APIs (Accessibility, AppleScript, Services menu, Touch Bar, Notification Center). There are no plans to port it to other platforms. If you switch from macOS, your iTerm2 configurations and workflows will not transfer. Plan accordingly.
08

Ghostty

Stealth unit materializing on the battlefield. Mitchell Hashimoto's Zig-powered native terminal, built from scratch with platform-native rendering, an embeddable core library, and performance benchmarks that challenge every existing unit on the field.

👻
Ghostty
The Native UI Newcomer // Zig // v1.1+ (MIT License)
Linux ✓ macOS ✓ GPU: Metal/OpenGL
Ghostty is a fast, feature-rich, cross-platform terminal emulator built in Zig by Mitchell Hashimoto, co-founder of HashiCorp. Initially released as open source in December 2024 under the MIT license, Ghostty takes a unique approach: it uses platform-native UI toolkits (SwiftUI on macOS, GTK on Linux) wrapped around a shared core library called libghostty. This "native shell" architecture means Ghostty looks and feels like a native app on each platform while sharing the same high-performance terminal emulation engine underneath. It supports the Kitty graphics protocol, true color, font ligatures, and achieves exceptional rendering performance.
Speed
9.5/10
Features
8/10
Config Ease
9/10
Extensibility
7/10
Cross-Platform
7/10
Community
8.5/10

> Installation

Homebrew (macOS)
Install via Homebrew cask (recommended on macOS)
brew install --cask ghostty
Pacman (Arch)
Available in official Arch repos
sudo pacman -S ghostty
Flatpak (Linux)
Universal Linux install via Flathub
flatpak install flathub com.mitchellh.ghostty
Build from Source
Requires Zig 0.13+ and system dependencies
git clone https://github.com/ghostty-org/ghostty
cd ghostty && zig build -Doptimize=ReleaseFast

> Configuration

Ghostty uses a simple key-value configuration file at ~/.config/ghostty/config. No TOML, YAML, or JSON — just key = value pairs. The format is intentionally minimal and easy to read. Changes require restarting the terminal or pressing Cmd+Shift+, (macOS) to reload.

// ~/.config/ghostty/config
 1# Font configuration
 2font-family = "JetBrains Mono"
 3font-size = 13
 4
 5# Theme (300+ built-in themes)
 6theme = catppuccin-mocha
 7
 8# Window appearance
 9window-decoration = false
10background-opacity = 0.95
11window-padding-x = 8
12window-padding-y = 8
13
14# Cursor
15cursor-style = bar
16cursor-style-blink = true
17
18# Mouse & clipboard
19copy-on-select = clipboard
20mouse-scroll-multiplier = 3
21
22# Keybindings (override defaults)
23keybind = ctrl+shift+t=new_tab
24keybind = ctrl+shift+enter=new_split:right

> Key Features

Native UI on Every Platform

Ghostty uses SwiftUI and AppKit on macOS and GTK4 on Linux — not a cross-platform UI toolkit. This means native window management, native font rendering, native accessibility APIs, and native look-and-feel on each platform. Tabs, splits, and menus all use the platform's own widget toolkit.

Metal / OpenGL Rendering

On macOS, Ghostty uses Apple's Metal API for GPU-accelerated rendering with minimal driver overhead. On Linux, it uses OpenGL. The custom renderer handles glyph atlases, background decoration, and cursor animation with sub-5ms input-to-screen latency in typical usage.

Kitty Graphics Protocol

Full support for the Kitty graphics protocol, enabling inline image display from tools like kitty +kitten icat, chafa, timg, and TUI file managers like yazi. Supports PNG, JPEG, GIF, and animated image rendering within the terminal grid.

libghostty

The terminal emulation core is a standalone C-ABI compatible library called libghostty. This architecture enables embedding Ghostty's terminal engine in other applications. The VT parser component (libghostty-vt) can be used independently for parsing terminal escape sequences.

> Performance

Ghostty was designed from the ground up for speed. Benchmarks from the initial release show significant advantages over established terminals in several key metrics.

Benchmark Ghostty vs. Competitors
Plain text throughput (cat large file) Baseline ~4x faster than iTerm2 and Kitty in vtebench plain text reading
Scrolling performance ~2x faster Approximately 2x faster than Terminal.app at rapid scrolling with dense output
Memory usage (idle, single tab) ~129 MB vs. ~207 MB (iTerm2), ~180 MB (Kitty), ~95 MB (Alacritty)
Startup time <100ms Cold start to first frame rendered. Native app startup, no runtime initialization overhead.
ⓘ Benchmark Context
Performance benchmarks vary by hardware, OS version, and workload. The figures above are based on Ghostty's initial release benchmarks on Apple Silicon Macs (M1/M2). Real-world perception depends heavily on your specific use case — for typical interactive shell usage, the differences between modern GPU-accelerated terminals are often imperceptible. The advantage shows most clearly during heavy output (build logs, large file reads) and latency-sensitive input.

> The Zig Foundation

Ghostty is written from scratch in Zig, a systems programming language designed as a successor to C. This choice has significant implications for the project:

  • Memory safety — Zig provides safety features (bounds checking, null safety) without a garbage collector or runtime overhead. This eliminates entire classes of bugs common in C terminal emulators.
  • C ABI compatibility — Zig can directly export C-compatible functions, which is how libghostty exposes its API. Any language that can call C can embed the Ghostty terminal engine.
  • Cross-compilation — Zig's built-in cross-compiler makes it straightforward to build for multiple targets from a single machine, simplifying the release process for multiple platforms.
  • Performance — Zig compiles to native code via LLVM with optimization levels comparable to C and Rust. The lack of a runtime or hidden allocations gives the developer explicit control over performance-critical code paths.
  • Comptime — Zig's compile-time execution feature enables zero-cost abstractions for parsing state machines and lookup tables in the VT parser, contributing to the raw throughput numbers.

> libghostty — The Embeddable Core

Ghostty's architecture cleanly separates the terminal emulation engine (libghostty) from the platform-specific UI shell. This design enables several use cases beyond a standalone terminal app:

// LIBGHOSTTY ARCHITECTURE
 1# Ghostty's layered architecture:
 2
 3+---------------------------+
 4|   macOS App (SwiftUI)     |   <-- Platform Shell
 5+---------------------------+
 6|   libghostty (C ABI)      |   <-- Core Engine
 7|   - VT parser             |
 8|   - Grid/state management |
 9|   - GPU renderer           |
10+---------------------------+
11
12+---------------------------+
13|   Linux App (GTK4)        |   <-- Different Shell, Same Core
14+---------------------------+
15|   libghostty (C ABI)      |   <-- Identical Engine
16+---------------------------+

The Neovim project has explored adopting libghostty-vt as a replacement for its internal VT parser, which would bring Ghostty's fast, well-tested parsing to the editor. Other applications — IDE embedded terminals, TUI frameworks, and testing tools — could similarly benefit from a shared, high-quality terminal emulation library.

> Current Limitations

Ghostty is a young project that shipped its first public release in December 2024. While it is stable and full-featured for daily use, some areas are still maturing:

  • No Windows support — A Windows port is planned but not yet available. Windows users should consider Alacritty, WezTerm, or Windows Terminal.
  • No scripting API — Unlike WezTerm (Lua) or Kitty (Python), Ghostty does not currently expose a scripting interface for programmatic control or custom extensions.
  • Limited plugin ecosystem — As a new project, the community of third-party tools and integrations is still growing.
  • No built-in multiplexer — No native tabs-as-tmux-sessions or mux server mode like WezTerm. Tabs and splits are provided but are local-only.
  • Sixel support — Sixel graphics are not yet supported; Kitty graphics protocol is the primary image path.
⚠ New Unit Deployed
Ghostty reached v1.0 in December 2024 and has been rapidly iterating since. By early 2026, it has reached v2.0 with significant feature additions including improved split management, enhanced keybinding system, and broader Linux distribution support. The pace of development is fast, and the feature gap with established terminals continues to narrow. Keep monitoring the changelog — today's limitation may be tomorrow's resolved issue.

> Platform Support

Platform Status Notes
macOS ✓ Full Support Native SwiftUI app. Metal GPU rendering. Requires macOS 13 (Ventura) or later. Apple Silicon and Intel supported. Homebrew cask available.
Linux ✓ Full Support Native GTK4 app. OpenGL rendering. X11 and Wayland support. Available via Flatpak, AUR, and distro packages. PPA for Ubuntu/Debian.
Windows ✗ Planned Windows support is on the roadmap but no timeline has been committed. The libghostty architecture makes a Windows port feasible with a native Win32/WinUI shell.
09

Classic Terminals

Veteran units reporting for briefing. These long-serving terminals form the backbone of desktop Linux, macOS, and X11 environments. Some are being phased out by GPU-accelerated replacements; others remain entrenched in their niches. Know your roster.

> Roster Overview

A comparative assessment of the classic terminal units still active on the battlefield. These terminals prioritize stability and integration with their respective desktop environments over cutting-edge features.

Terminal Platform Engine GPU Accel. True Color Images Splits Status
GNOME Terminal Linux VTE Being replaced by Ptyxis
Konsole Linux Custom (KDE) ✓ Kitty Protocol Active development
Terminal.app macOS Apple (private) Maintenance mode
xterm Linux Custom (X11) Legacy reference
rxvt-unicode Linux Custom (X11) Legacy / declining
Foot Linux Custom (Wayland) ✓ Sixel Active development

> GNOME Terminal

The default terminal on GNOME desktops, built on the VTE (Virtual Terminal Emulator) library shared by dozens of GTK-based terminals including Tilix, Terminator, and Guake.

  • Profiles — Multiple named profiles with independent fonts, colors, scrollback, and shell commands. Switch profiles per tab or per window.
  • Transparency — Background transparency support (compositing-dependent). Custom background colors per profile.
  • Custom commands — Each profile can run a custom command instead of the default shell. Useful for launching SSH sessions or REPLs directly.
  • No GPU acceleration — VTE renders on the CPU using Cairo. Performance is adequate for interactive use but noticeably slower than GPU-accelerated terminals when scrolling through large output.
  • Being replaced — Fedora 41+ ships Ptyxis (formerly called "GNOME Console") as the default terminal, which modernizes the GNOME terminal experience with a simplified UI and better Wayland integration. GNOME Terminal remains available but is no longer the flagship.
// GNOME TERMINAL PROFILES VIA CLI
1# List profiles
2dconf list /org/gnome/terminal/legacy/profiles:/
3
4# Set font for default profile
5dconf write /org/gnome/terminal/legacy/profiles:/:default/font \
6  "'JetBrains Mono 13'"
7
8# Open new window with specific profile
9gnome-terminal --window-with-profile="Development"

> Konsole (KDE)

KDE's default terminal emulator, deeply integrated with the Plasma desktop. One of the most feature-rich "classic" terminals, with capabilities that rival some modern GPU-accelerated options.

  • Split views — Horizontal and vertical splits within a single tab. Each split can run an independent session or mirror another.
  • Bookmarks & SSH manager — Built-in bookmark system for directories and SSH connections. The SSH manager provides a sidebar for quick connections to saved hosts.
  • Profile system — Profiles with independent fonts, colors, key bindings, cursor shapes, scrollback, and encoding settings. Profiles can be assigned to tabs or triggered by shell integration.
  • Kitty graphics protocol — As of KDE 5.25+, Konsole supports the Kitty image protocol, enabling inline image display from compatible tools.
  • Custom key bindings — Flexible keybinding editor allows remapping any action. Supports multi-key sequences and modifier combinations.
  • Tab management — Drag-and-drop tab reordering, tab detaching to new windows, and color-coded tabs for visual organization.
// KONSOLE PROFILE MANAGEMENT
1# Open Konsole with a specific profile
2konsole --profile "Development"
3
4# Run a command in a new tab
5konsole --new-tab -e htop
6
7# Profiles stored at:
8# ~/.local/share/konsole/*.profile

> Terminal.app (macOS)

Apple's built-in terminal, shipped with every Mac since Mac OS X 10.0. No installation required — it is always available as a fallback, even when your preferred terminal is not installed.

  • Zero-install availability — Present on every Mac out of the box. Opens from /Applications/Utilities/Terminal.app or via Spotlight.
  • Profiles & themes — Multiple window profiles with different fonts, colors, and shell settings. Ships with several built-in themes (Basic, Grass, Homebrew, Novel, Pro, etc.).
  • True color support — Added in macOS Catalina (10.15). Earlier versions were limited to 256 colors, which caused rendering issues with modern CLI tools.
  • Shell integration basics — Supports marks for command navigation (Cmd+Up/Down) and working directory tracking. Resume sessions after reboot via window restoration.
  • Limited compared to iTerm2 — No split panes, no inline images, no drop-down hotkey window, no scripting API, no broadcast input. For anything beyond basic usage, iTerm2 or a cross-platform terminal is recommended.
// TERMINAL.APP CONFIGURATION
1# Set default shell (macOS uses zsh by default since Catalina)
2chsh -s /bin/zsh
3
4# Import a .terminal theme file
5open ~/Downloads/Catppuccin-Mocha.terminal
6
7# Set via defaults (programmatic configuration)
8defaults write com.apple.Terminal "Default Window Settings" -string "Pro"
9defaults write com.apple.Terminal "Startup Window Settings" -string "Pro"

> xterm

The original X Window System terminal emulator, first released in 1984. Still actively maintained by Thomas Dickey, xterm serves as the reference implementation for terminal escape sequences and the TERM=xterm-256color identifier that almost every terminal emulates.

  • Reference implementation — Defines the behavior that all other terminals emulate. When a terminal says it is "xterm-compatible," it means it follows xterm's interpretation of escape sequences.
  • .Xresources configuration — Configured via X resource database files (~/.Xresources or ~/.Xdefaults). All settings are key-value pairs prefixed with xterm* or XTerm*.
  • Lightweight — Minimal memory footprint and near-instant startup. No GPU requirements, no external dependencies beyond Xlib.
  • Feature-poor by modern standards — No tabs, no splits, no GPU acceleration, no inline images, no ligatures. Unicode support is functional but quirky. The scrollbar is an X11 widget from the 1980s.
  • Still widely available — Installed by default on many X11 systems as a fallback terminal. Useful in recovery environments and minimal installations.
// ~/.Xresources CONFIGURATION
1! xterm configuration
2xterm*faceName: JetBrains Mono
3xterm*faceSize: 13
4xterm*background: #1a1c1e
5xterm*foreground: #d0d4d8
6xterm*saveLines: 10000
7xterm*selectToClipboard: true
8
9! Apply changes: xrdb -merge ~/.Xresources

> rxvt-unicode (urxvt)

A lightweight, highly customizable X11 terminal popular in the tiling window manager community (i3, bspwm, dwm) throughout the 2010s. Known for its Perl extension system and daemon mode.

  • Perl extensions — Extensible via Perl scripts that hook into terminal events. Popular extensions include URL selection, clipboard management, font resizing, and tab emulation.
  • Daemon mode — Run urxvtd (daemon) and open new terminals with urxvtc (client). Client windows share the daemon's memory footprint, making new terminal windows nearly instant and extremely lightweight.
  • Popular in tiling WM setups — Its minimal resource usage and .Xresources configuration made it the terminal of choice for riced i3/bspwm desktops for years.
  • No true color — Limited to 256 colors. This is the primary reason urxvt has been abandoned by most users in favor of Alacritty, Kitty, or Foot, as modern CLI tools (Neovim, bat, delta) rely heavily on 24-bit color.
  • Being replaced — The tiling WM community has largely migrated to Alacritty, Kitty, or Foot for true color, GPU acceleration, and better Unicode handling.
// URXVT DAEMON MODE
1# Start the daemon (typically in .xinitrc or WM startup)
2urxvtd --quiet --opendisplay --fork
3
4# Open a new terminal via the client (near-instant)
5urxvtc
6
7# Perl extensions in .Xresources:
8URxvt.perl-ext-common: default,matcher,resize-font,clipboard
9URxvt.url-launcher: /usr/bin/xdg-open

> Foot

A fast, lightweight, Wayland-native terminal emulator. Foot does not support X11 — it is built exclusively for the Wayland display protocol, making it the natural choice for Sway, Hyprland, and other Wayland compositors.

  • Wayland-native — Built directly on the Wayland protocol with no X11 fallback or XWayland dependency. First-class support for fractional scaling, per-monitor DPI, and Wayland clipboard integration.
  • PGO builds — Official releases use Profile-Guided Optimization (PGO), where the compiler optimizes hot code paths based on real terminal workload profiling. This makes Foot one of the fastest CPU-rendered terminals available.
  • Sixel image support — Supports Sixel graphics for inline image display. Works with tools like lsix, chafa --format=sixel, and libsixel.
  • Minimal but capable — True color, font ligature support, scrollback search, URL detection, and configurable key bindings. No tabs or splits — uses the Wayland compositor's tiling for that.
  • Default on some distros — Shipped as the default terminal on several Wayland-focused distributions including some Sway-based spins. Also the recommended terminal for Hyprland setups.
  • Server mode — Like urxvt, Foot supports a server/client architecture (foot --server / footclient) for fast startup of additional windows.
// ~/.config/foot/foot.ini
 1[main]
 2font = JetBrains Mono:size=13
 3pad = 8x8
 4
 5[colors]
 6background = 1a1c1e
 7foreground = d0d4d8
 8
 9[cursor]
10style = beam
11blink = yes
ⓘ Wayland Transition Report
As Linux distributions accelerate their migration from X11 to Wayland, terminals like Foot and Ghostty (which uses GTK4 with native Wayland support) are well-positioned to replace X11-only options like urxvt and xterm. If you are setting up a new Wayland-based system, prioritize Wayland-native terminals for the best integration with fractional scaling, touch input, and compositor features.
10

xterm.js & Web Terminals

Browser-based operations center online. This unit is not a standalone terminal — it is an embeddable engine that powers the terminal panels inside VS Code, code-server, JupyterLab, and dozens of cloud IDEs. When you open a terminal in your browser, odds are xterm.js is running beneath the surface. Deploying for web-theater operations.

</>
xterm.js
Browser-Based Terminal Engine // TypeScript // MIT License
Web ✓ Cross-platform ✓
xterm.js is a TypeScript library that provides a full-featured terminal emulator component for web browsers. It is not a standalone terminal application — it is a library that other applications embed. Originally a fork of the Chromium hterm project, xterm.js has evolved into the de facto standard for browser-based terminal rendering. It powers the integrated terminal in Visual Studio Code, code-server, Gitpod, Theia IDE, JupyterLab, Azure Cloud Shell, and many other web-based developer tools. The library handles escape sequence parsing, grid rendering, selection, scrollback, and accessibility, while the host application provides the PTY/shell backend.
Speed
6/10
Features
7/10
Config Ease
8/10
Extensibility
9/10
Cross-Platform
10/10
Community
8/10

> What is xterm.js?

xterm.js is a terminal front-end component, not a terminal emulator in the traditional sense. A traditional terminal (Kitty, WezTerm, Alacritty) runs as a native desktop application and spawns a PTY (pseudo-terminal) connected to your shell. xterm.js, by contrast, is a JavaScript/TypeScript library that renders a terminal UI inside a browser DOM element. It handles:

  • Escape sequence parsing — Interprets ANSI, DEC, and xterm control sequences to render styled text, cursor movement, colors, and special characters.
  • Grid rendering — Manages a character cell grid with support for wide characters, combining marks, and grapheme clusters.
  • Input handling — Captures keyboard events and translates them into the byte sequences a shell expects (including modifier keys, function keys, and bracketed paste).
  • Selection & clipboard — Text selection, copy-paste, and accessibility tree generation for screen readers.
  • Scrollback buffer — Configurable scrollback history with efficient memory management.

The host application is responsible for connecting xterm.js to an actual shell process. In web applications, this is typically done via a WebSocket connection to a server that manages a PTY using node-pty or a similar library.

> Installation

npm
Install the core library and common addons
npm install @xterm/xterm
npm install @xterm/addon-fit @xterm/addon-webgl
yarn
Install via Yarn package manager
yarn add @xterm/xterm
yarn add @xterm/addon-fit @xterm/addon-webgl
CDN (Quick Start)
Load directly from unpkg for prototyping
<link rel="stylesheet"
  href="https://unpkg.com/@xterm/xterm/css/xterm.css" />
<script src="https://unpkg.com/@xterm/xterm"></script>
Backend (node-pty)
Server-side PTY management for shell access
npm install node-pty
npm install ws  # WebSocket server

> Basic Usage

The following example creates a terminal instance with custom theming, loads the fit and WebGL addons, and renders the terminal into a DOM element. In a real application, you would connect the terminal's onData event to a WebSocket that streams data to/from a server-side PTY.

// XTERM.JS INITIALIZATION
 1import { Terminal } from '@xterm/xterm';
 2import { FitAddon } from '@xterm/addon-fit';
 3import { WebglAddon } from '@xterm/addon-webgl';
 4
 5const term = new Terminal({
 6  fontFamily: 'JetBrains Mono',
 7  fontSize: 14,
 8  theme: {
 9    background: '#1a1c1e',
10    foreground: '#d0d4d8',
11    cursor: '#ff8c00'
12  }
13});
14
15// Load addons
16const fitAddon = new FitAddon();
17term.loadAddon(fitAddon);
18
19// Attach to DOM and fit to container
20term.open(document.getElementById('terminal'));
21fitAddon.fit();
22
23// Enable WebGL rendering for better performance
24term.loadAddon(new WebglAddon());
25
26// Handle window resize
27window.addEventListener('resize', () => fitAddon.fit());
28
29// Connect to backend via WebSocket
30const ws = new WebSocket('ws://localhost:3000/terminal');
31term.onData(data => ws.send(data));
32ws.onmessage = (e) => term.write(e.data);

> Addons

xterm.js uses a modular addon architecture. The core library provides basic terminal emulation, while addons extend it with optional capabilities. Each addon is installed as a separate npm package and loaded at runtime.

Addon Package Description Use Case
FitAddon @xterm/addon-fit Automatically sizes the terminal to fit its container element by calculating the optimal rows/cols Essential for responsive layouts; use in virtually every xterm.js integration
WebglAddon @xterm/addon-webgl Replaces the default canvas renderer with a WebGL2-based renderer for significantly faster drawing High-throughput applications, large scrollback, dense output (build logs, CI)
SearchAddon @xterm/addon-search Provides find-in-buffer functionality with regex support and match highlighting Log viewers, debugging sessions, any terminal with significant scrollback
SerializeAddon @xterm/addon-serialize Serializes the terminal buffer state to a string, preserving ANSI formatting and content Session recording, state persistence, terminal snapshots for tests
WebLinksAddon @xterm/addon-web-links Detects URLs in terminal output and makes them clickable hyperlinks Any terminal where users need to follow URLs in command output
Unicode11Addon @xterm/addon-unicode11 Provides Unicode 11+ width calculation for proper rendering of CJK, emoji, and wide characters Internationalized applications, terminals displaying non-Latin scripts

> WebGL Renderer

By default, xterm.js renders to a 2D canvas context. The WebGL addon replaces this with a WebGL2-based renderer that achieves dramatically better performance for text-heavy workloads.

  • Glyph atlas — The WebGL renderer maintains a GPU-side texture atlas of rendered glyphs. Once a character at a given style (font, weight, color) is rasterized, subsequent draws are a simple texture lookup — no CPU-side text shaping on every frame.
  • Batched draw calls — The entire visible terminal grid is rendered in a small number of GPU draw calls rather than per-cell canvas operations. This reduces draw time from milliseconds to microseconds for large terminals.
  • Smooth scrolling — WebGL rendering enables hardware-accelerated smooth scrolling through the scrollback buffer, which is noticeably smoother than canvas-based rendering when scrolling through thousands of lines.
  • Fallback behavior — If WebGL2 is not available (rare in modern browsers), the addon will fail to load and xterm.js will continue using the canvas renderer. Always wrap WebGL addon loading in a try/catch.
// WEBGL ADDON WITH FALLBACK
1try {
2  term.loadAddon(new WebglAddon());
3  console.log('WebGL renderer active');
4} catch (e) {
5  console.warn('WebGL not available, using canvas renderer');
6}

> Integration Map

xterm.js powers the terminal component in a wide range of production applications. These are the most prominent deployments:

VS Code

The integrated terminal in Visual Studio Code uses xterm.js with the WebGL renderer. Microsoft is the primary maintainer of the xterm.js project. VS Code's terminal adds shell integration, command decorations, and link detection on top of the core library.

code-server

Coder's open-source project that runs VS Code in a browser. Since VS Code's terminal is xterm.js, code-server inherits the same terminal experience over a WebSocket connection to the remote host's shell.

Gitpod & Codespaces

Cloud development environments from Gitpod and GitHub Codespaces both use VS Code-based editors in the browser, and therefore use xterm.js for their terminal panels. The shell runs in a cloud container.

JupyterLab

The JupyterLab IDE includes a terminal panel powered by xterm.js. This gives data scientists browser-based shell access alongside their notebooks, running on the same server as the Jupyter kernel.

Eclipse Theia

The Theia IDE framework, used as the basis for several cloud IDEs (including Arduino IDE 2.0 and Google Cloud Shell Editor), uses xterm.js for its integrated terminal component.

Proxmox VE

The Proxmox Virtual Environment web interface uses xterm.js for its browser-based console access to virtual machines and containers, providing noVNC-alternative shell access directly in the management UI.

> Self-Hosting Architecture

To build your own web-based terminal, you need a backend server that spawns a PTY and bridges it to the browser via WebSocket. The standard architecture uses node-pty for PTY management and the ws library for WebSocket transport.

// BACKEND: NODE.JS + NODE-PTY + WS
 1const { WebSocketServer } = require('ws');
 2const pty = require('node-pty');
 3
 4const wss = new WebSocketServer({ port: 3000 });
 5
 6wss.on('connection', (ws) => {
 7  // Spawn a shell process with a pseudo-terminal
 8  const shell = pty.spawn('bash', [], {
 9    name: 'xterm-256color',
10    cols: 80,
11    rows: 24,
12    cwd: process.env.HOME
13  });
14
15  // PTY output → WebSocket → browser (xterm.js)
16  shell.onData(data => ws.send(data));
17
18  // Browser input → WebSocket → PTY
19  ws.on('message', data => shell.write(data));
20
21  // Cleanup on disconnect
22  ws.on('close', () => shell.kill());
23});
ⓘ Architecture Diagram
Browser [xterm.js] ↔ WebSocket ↔ Server [node-pty + shell]

The browser side handles rendering and input capture. The server side manages the PTY lifecycle. The WebSocket acts as a bidirectional byte stream between them. For production deployments, add authentication, TLS (wss://), session management, and resize handling (shell.resize(cols, rows) when the terminal is resized).

> Browser Support

Browser Status WebGL Renderer Notes
Chrome / Chromium ✓ Full Support Primary development target. Best performance.
Microsoft Edge ✓ Full Support Chromium-based; identical to Chrome support.
Firefox ✓ Full Support WebGL2 fully supported. Slightly different text rendering.
Safari ✓ Full Support WebGL2 support since Safari 15. Some minor rendering differences with font ligatures.

xterm.js targets evergreen browsers — the current and previous two major versions of Chrome, Edge, Firefox, and Safari. Internet Explorer is not supported.

> Alternatives

While xterm.js dominates the browser terminal space, a few alternatives exist for specific use cases:

  • hterm — Google's terminal emulator library, used in Chrome's Secure Shell extension (the SSH client built into Chrome OS). hterm predates xterm.js and is tightly coupled to the Chrome platform. It is highly optimized for Chrome but sees less community adoption outside Google's ecosystem.
  • terminal.js — A lightweight alternative for simple terminal rendering needs. Smaller bundle size but fewer features and no addon ecosystem. Suitable for projects that need basic terminal display without the full xterm.js feature set.
⚠ Strategic Assessment
xterm.js has effectively won the browser terminal war. With Microsoft backing (VS Code is the primary consumer), an active addon ecosystem, and adoption by every major cloud IDE, it is the safe default for any project needing browser-based terminal rendering. Choose an alternative only if you have a specific constraint that xterm.js cannot meet (e.g., extreme bundle size limits).
11

Config & Workflows

Establishing standard operating procedures across all units. These terminal-agnostic configurations — fonts, color schemes, multiplexing, and shell integration — apply regardless of which terminal you deploy. Master these systems and every unit in your roster benefits.

> Fonts & Nerd Fonts

Nerd Fonts are patched versions of popular programming fonts that include thousands of additional glyphs: file-type icons, powerline symbols, devicons, Font Awesome icons, Material Design icons, and more. They are essential for modern CLI tools like starship (prompt), lsd/eza (ls replacements), yazi (file manager), and lazygit which use these glyphs for a richer visual interface.

Font Nerd Font Name Ligatures Style Notes
JetBrains Mono JetBrainsMono NF Modern, tall x-height Default in JetBrains IDEs. Excellent readability. The most popular choice for 2024-2026.
Fira Code FiraCode NF Geometric, clean Pioneered coding ligatures. Arrows, comparisons, and operators render as single glyphs.
Hack Hack NF Neutral, utilitarian Optimized for source code. Clear distinction between similar characters (0/O, 1/l/I).
Meslo LG MesloLGS NF Menlo-based, Apple-like Recommended by Powerlevel10k. Based on Apple's Menlo with adjusted line spacing.
Cascadia Code CaskaydiaCove NF Microsoft, friendly Default in Windows Terminal. Includes Cascadia Mono (no ligatures) variant.
Iosevka Iosevka NF Narrow, customizable Extremely narrow by default. Highly customizable via build parameters. Great for splits.
Victor Mono VictorMono NF Cursive italics Distinctive cursive italic style. Popular for themes that style comments in italic.
// NERD FONT INSTALLATION
 1# macOS — Homebrew
 2brew install --cask font-jetbrains-mono-nerd-font
 3brew install --cask font-fira-code-nerd-font
 4brew install --cask font-meslo-lg-nerd-font
 5
 6# Arch Linux
 7sudo pacman -S ttf-jetbrains-mono-nerd
 8
 9# Ubuntu/Debian — download from GitHub releases
10wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.3.0/JetBrainsMono.zip
11unzip JetBrainsMono.zip -d ~/.local/share/fonts/
12fc-cache -fv

Ligature support matrix: Not all terminals render font ligatures. Ligatures combine multiple characters (e.g., != becomes ≠, => becomes ⇒) into single typographic glyphs.

Terminal Ligatures Notes
Kitty Full ligature support via HarfBuzz
WezTerm Full ligature support via HarfBuzz
Ghostty Full ligature support
iTerm2 Enabled via Preferences > Profiles > Text
Windows Terminal Supported since early releases with DirectWrite
Alacritty Intentionally excluded; maintainer considers them incompatible with terminal grid model
Foot Supported via HarfBuzz shaping
GNOME Terminal VTE does not support ligatures

> Color Schemes

A color scheme defines the 16 ANSI colors (8 normal + 8 bright), plus the foreground, background, cursor, and selection colors. Most modern terminals also support 256-color and 24-bit true color, but the 16 ANSI colors remain the foundation of your terminal's visual identity.

Scheme Style Background Vibe Availability
Catppuccin Pastel Mocha: #1E1E2E Soft, warm, easy on the eyes. Four flavors: Latte (light), Frappe, Macchiato, Mocha (dark). All terminals
Dracula Vibrant #282A36 High-contrast with saturated purples, pinks, and greens. Iconic and instantly recognizable. All terminals
Tokyo Night Cool blue #1A1B26 Inspired by Tokyo city lights. Subdued blues and purples. Storm and Day variants available. All terminals
Gruvbox Retro warm #282828 Earthy tones with high contrast. Warm oranges, yellows, and greens. Light variant available. All terminals
Nord Arctic #2E3440 Cool, desaturated blues and teals. Clean, professional, low visual noise. All terminals
Solarized Precise Dark: #002B36 Scientifically designed color relationships. Both dark and light modes. The OG rice theme. All terminals
One Dark Balanced #282C34 Atom editor's default theme. Balanced contrast. One of the most widely ported themes. All terminals

Where to find themes:

  • Terminal-specific repos — Most popular themes maintain official ports for each terminal (e.g., catppuccin/kitty, catppuccin/alacritty, etc.).
  • Gogh (gogh-co.github.io) — One-click theme installer for GNOME Terminal, Tilix, xfce4-terminal, and other VTE-based terminals. 250+ themes.
  • base16 — A framework for building color schemes with consistent structure across 50+ applications. Templates generate configs for every terminal.
  • terminal.sexy — Visual theme designer and converter. Import/export for Alacritty, iTerm2, Kitty, Konsole, mintty, and others.
// APPLYING CATPPUCCIN MOCHA ACROSS TERMINALS
 1# ── Kitty (~/.config/kitty/kitty.conf) ──
 2include themes/catppuccin-mocha.conf
 3
 4# ── WezTerm (~/.wezterm.lua) ──
 5config.color_scheme = 'Catppuccin Mocha'
 6
 7# ── Alacritty (~/.config/alacritty/alacritty.toml) ──
 8[general]
 9import = ["~/.config/alacritty/catppuccin-mocha.toml"]
10
11# ── Ghostty (~/.config/ghostty/config) ──
12theme = catppuccin-mocha
13
14# ── Windows Terminal (settings.json) ──
15"colorScheme": "Catppuccin Mocha"
16# (Install via the built-in theme gallery or add to "schemes" array)

> Terminal Multiplexing

Multiplexing lets you run multiple terminal sessions inside a single window, with the ability to split panes, create tabs, detach sessions, and reattach later. You can use an external multiplexer (tmux, Zellij) or your terminal's built-in multiplexing features.

Feature tmux Zellij WezTerm Built-in Kitty Built-in
Session persistence ✓ Detach/reattach ✓ Detach/reattach ✓ Mux server mode ✗ No detach
Remote persistence ✓ SSH disconnect safe ✓ SSH disconnect safe ✓ Mux over SSH ✗ Local only
Splits/panes
Tabs ✓ Windows ✓ Tabs
Layouts ✓ Custom layouts ✓ KDL layout files ✓ Lua-defined ✓ 6 built-in layouts
Plugin system ✓ TPM ecosystem ✓ WASM plugins ✓ Lua scripting ✓ Python kittens
Config format tmux.conf (custom) KDL Lua kitty.conf (k=v)
Learning curve Steep Gentle (discoverable UI) Moderate (Lua) Low
Scrollback access Copy mode (vi/emacs keys) Scroll mode + search Native scrollback Native scrollback

When do you need an external multiplexer?

  • Remote sessions — If you SSH into servers and need sessions that survive disconnects, you need tmux or Zellij on the remote machine. Built-in terminal multiplexing is local-only (except WezTerm's mux server).
  • Terminal-agnostic workflow — If you switch between terminals or use multiple, tmux gives you the same keybindings and session management everywhere.
  • Pair programming — tmux allows multiple users to attach to the same session for real-time collaborative terminal sharing.
  • Complex persistent layouts — If you need the same multi-pane workspace to survive reboots reliably, tmux with tmux-resurrect / tmux-continuum or Zellij's layout persistence is battle-tested.
ⓘ Tactical Recommendation
If you primarily work locally and your terminal has good built-in splits (Kitty, WezTerm, Ghostty), you may not need tmux at all. If you do significant remote work over SSH, tmux remains the gold standard for session persistence. Zellij is an excellent choice for users who find tmux's keybindings and configuration arcane — it provides a discoverable, user-friendly interface with floating panes and a built-in status bar.

> Shell Integration

Shell integration refers to a set of invisible escape sequences (OSC sequences) that your shell emits to communicate metadata to the terminal emulator. This metadata enables the terminal to understand where commands start and end, whether they succeeded or failed, and what the current working directory is.

Semantic Zones

The shell marks the prompt, the command input, and the command output as distinct "zones." The terminal can then highlight errors (red gutter marks for failed commands), enable click-to-navigate between commands, and allow selecting a command's output independently from surrounding content.

Command Tracking

The terminal knows which text is a command and which is output. This enables features like "scroll to previous command," "copy last command output," and per-command timing/exit-code display in the prompt decorations.

Working Directory

The shell reports its current directory to the terminal via OSC 7. This enables features like "open new tab in the same directory," clickable file paths resolved against the working directory, and window title updates showing the current path.

Completions & Suggestions

Some terminals use shell integration data to offer inline command suggestions, recent command history popups, or enhanced tab completion that goes beyond what the shell provides natively.

Terminal shell integration support:

Terminal Shell Integration Auto-Install Key Features
Kitty ✓ Automatic Command marks, jump between prompts, open output in pager, last command output selection
iTerm2 Manual (source script) Command history, automatic profile switching, recent directories sidebar, upload/download
WezTerm ✓ Automatic Semantic zones, CWD tracking, clickable output, new pane in CWD
Windows Terminal Manual (profile setting) Marks, jump between commands, recent command menu, intelligent copy
Ghostty ✓ Automatic Prompt marks, CWD tracking, jump between prompts, new tab in CWD
VS Code (xterm.js) ✓ Automatic Command decorations, run recent command, go to recent directory, sticky scroll
// ENABLING SHELL INTEGRATION
 1# ── Bash (~/.bashrc) — generic OSC 7 for CWD tracking ──
 2__osc7_cwd() {
 3  printf '\e]7;file://%s%s\e\\' "$HOSTNAME" "$PWD"
 4}
 5PROMPT_COMMAND="__osc7_cwd;${PROMPT_COMMAND}"
 6
 7# ── Zsh (~/.zshrc) — Kitty auto-loads; for others: ──
 8autoload -Uz add-zsh-hook
 9__osc7_chpwd() {
10  printf '\e]7;file://%s%s\e\\' "$HOST" "$PWD"
11}
12add-zsh-hook chpwd __osc7_chpwd
13__osc7_chpwd
14
15# ── Fish (~/.config/fish/config.fish) ──
16# Fish emits OSC 7 by default since v3.0 — no config needed.
17
18# ── iTerm2 (manual install) ──
19curl -L https://iterm2.com/shell_integration/install_shell_integration.sh | bash
⚠ Integration Conflicts
If you use multiple terminals, be careful not to load terminal-specific shell integration scripts unconditionally. Most modern terminals set environment variables you can check: $KITTY_WINDOW_ID for Kitty, $WEZTERM_PANE for WezTerm, $GHOSTTY_RESOURCES_DIR for Ghostty, $TERM_PROGRAM=iTerm.app for iTerm2. Guard your integration scripts with these checks to avoid conflicts.
12

Choosing Your Terminal

Final strategic assessment complete. All units have been scouted, benchmarked, and field-tested. This section provides the decision framework for selecting and deploying the right terminal for your mission parameters. Study the flowchart, consult the recommendation matrix, and commit to your loadout.

> Decision Flowchart

Follow the decision tree below to narrow your search. Each branch leads to the terminal best suited for that combination of requirements.

// STRATEGIC DECISION TREE
 1What is your primary platform?
 2
 3├─► Windows only
 4│   └──► Windows Terminal (native, best WSL integration)
 5
 6├─► macOS
 7│   ├─► Want native look & feel?
 8│   │   ├─► Yes, cutting-edge → Ghostty
 9│   │   └─► Yes, battle-tested → iTerm2
10│   └─► Want cross-platform config?
11│       └──► WezTerm or Kitty
12
13├─► Linux
14│   ├─► Minimalist / tiling WM?
15│   │   ├─► Wayland → Foot or Alacritty
16│   │   └─► X11 → Alacritty + tmux
17│   ├─► Feature-rich with scripting?
18│   │   ├─► Python kittens → Kitty
19│   │   └─► Lua scripting → WezTerm
20│   └─► Fast, simple, native feel?
21│       └──► Ghostty
22
23├─► Cross-platform (same config everywhere)
24│   └──► WezTerm (Linux + macOS + Windows, Lua config)
25
26└─► Building a web application?
27    └──► xterm.js (browser-based terminal component)

> Recommendations by Use Case

The recommendation matrix below maps common developer profiles to the terminals that best serve their workflows. The "Runner-up" column provides an alternative with different trade-offs.

Use Case Recommended Runner-up Why
Speed purist Ghostty Alacritty Ghostty benchmarks at the top for throughput and latency. Alacritty is the proven minimalist alternative with years of stability.
Power user Kitty WezTerm Kitty's kittens framework, graphics protocol, and remote control API provide unmatched extensibility. WezTerm offers similar depth with Lua scripting.
Remote SSH work Kitty WezTerm Kitty's SSH kitten auto-transfers terminfo and shell integration. WezTerm's mux server can persist sessions across SSH disconnects.
macOS native Ghostty iTerm2 Ghostty uses SwiftUI for native macOS look and feel with top-tier performance. iTerm2 is the proven workhorse with the deepest macOS integration.
Windows developer Windows Terminal WezTerm Windows Terminal has first-party WSL/PowerShell/Azure integration. WezTerm offers cross-platform config portability.
Linux ricing Alacritty Foot / Kitty Alacritty's TOML config and minimal footprint pair perfectly with tiling WMs. Foot is ideal for Wayland-only setups. Kitty adds built-in splits.
Web development xterm.js hterm xterm.js is the industry standard for browser-based terminals. Powers VS Code, code-server, and all major cloud IDEs.
Beginner Ghostty Windows Terminal Ghostty's simple config format and sensible defaults require minimal setup. Windows Terminal is the easiest starting point on Windows.

> Migration Tips

ⓘ Field Guide: Switching Terminals

Migrating terminals is less painful than you think. Most of the hard work is in your shell configuration (which travels with you) rather than the terminal itself. Here is what to focus on:

  • Color schemes are portable. Catppuccin, Dracula, Tokyo Night, and other popular schemes maintain official ports for every major terminal. Your visual identity does not have to change.
  • Font choice is universal. Nerd Fonts work in every terminal. Install the font once on your system and point any terminal at it.
  • Key bindings differ. This is the biggest adjustment. Each terminal uses different default shortcuts for splits, tabs, font resize, and scrollback. Budget time to learn or remap them.
  • Config formats vary. Kitty uses key-value pairs, WezTerm uses Lua, Alacritty uses TOML, Ghostty uses key=value, Windows Terminal uses JSON. There is no universal converter — plan to rewrite your config.
  • Shell integration may need updates. If you use terminal-specific shell integration (iTerm2, Kitty, WezTerm), update or guard those scripts when switching.
  • Keep your old terminal installed. Run both terminals side-by-side for a week before fully committing. Muscle memory takes time to retrain.
Config Aspect Kitty WezTerm Alacritty Ghostty Win Terminal
Format key value (.conf) Lua (.lua) TOML (.toml) key = value JSON
Location ~/.config/kitty/ ~/.wezterm.lua ~/.config/alacritty/ ~/.config/ghostty/ settings.json
Live reload ✓ Ctrl+Shift+F5 ✓ Automatic ✓ Automatic ✓ Cmd+Shift+, ✓ Automatic
Conditional logic ✓ Full Lua
Theme includes ✓ include ✓ require() ✓ import ✓ Built-in themes ✓ schemes array

> Performance Comparison Summary

Final benchmarks across all major units. These numbers are approximate and vary by hardware, OS, and configuration. They represent typical values on a modern system (2023-2025 hardware, 16 GB RAM, integrated or discrete GPU).

Terminal Startup Memory (idle) Throughput Input Latency GPU
Ghostty <100ms ~130 MB Excellent ~2-4ms Metal / OpenGL
Alacritty <50ms ~55 MB Excellent ~2-5ms OpenGL
Kitty ~100ms ~110 MB Very Good ~3-5ms OpenGL
WezTerm ~200ms ~170 MB Good ~5-8ms OpenGL
Windows Terminal ~150ms ~80 MB Good ~5-8ms DirectX
iTerm2 ~300ms ~200 MB Moderate ~8-15ms Metal (GPU renderer)
Foot <50ms ~30 MB Good (PGO) ~3-5ms CPU (no GPU)
GNOME Terminal ~200ms ~70 MB Moderate ~10-20ms CPU (Cairo)
xterm.js (browser) N/A (in-page) ~50 MB (tab) Moderate ~10-30ms WebGL2 (addon)
ⓘ Benchmark Methodology
Startup time is measured from process launch to first frame. Memory is the resident set size (RSS) with a single tab and empty scrollback. Throughput is relative performance when streaming large files via cat. Input latency is the measured delay from keypress to character rendering using tools like typometer or is-fast. Real-world perception depends heavily on your workflow — for interactive use, any modern GPU-accelerated terminal feels instantaneous.

> The Verdict

All units have been deployed, benchmarked, and assessed on the battlefield. The recon data is in, the stat bars are filled, and the strategic map is complete. So — which terminal wins?

None of them. All of them.

The "best" terminal is the one that matches your workflow, your platform, and your priorities. A speed purist on a minimal Sway desktop will deploy Alacritty + tmux and never look back. A macOS developer who lives in the GUI will reach for Ghostty or iTerm2. A power user who scripts everything will build their environment in WezTerm's Lua or Kitty's Python kittens. A web developer embedding terminals in their product will integrate xterm.js without question.

The good news: the terminal ecosystem has never been stronger. GPU-accelerated rendering is now standard. True color support is universal across modern terminals. Font ligatures, inline images, and shell integration have moved from novelty features to baseline expectations. Every terminal reviewed in this guide is a capable, well-maintained tool backed by active communities.

Pick one. Configure it. Learn its keybindings. When it stops serving your needs, the migration path is straightforward — your shell config, your color scheme, and your Nerd Fonts travel with you.

⚠ Commander's Final Order
Stop comparing terminals and start shipping code. The best terminal is the one you have already configured and committed to muscle memory. Mission complete. Dismissed.