Concepts Explanation

The terminal engine

Why Muxie renders terminals with Ghostty's core compiled to WebAssembly off the main thread, and when to switch to the xterm.js engine.

Coding agents, test runners, and build logs produce a lot of fast terminal output. If rendering that output blocks the UI thread, every pane stutters at once. Muxie’s default engine is built to avoid exactly that.

The default: Ghostty in WebAssembly

By default Muxie renders terminals with Ghostty’s terminal core compiled to WebAssembly, running on a worker off the main thread (this engine is labelled worktty internally). Parsing terminal output and painting the grid happen away from the UI thread, so a pane spewing output doesn’t freeze the rest of the workspace.

This engine includes the terminal features you’d expect — copy mode, clickable links and file paths, bell behavior, and OSC 52 clipboard handling — and it’s used consistently across local, SSH, and sprites.dev sessions.

The alternative: xterm.js

Muxie also bundles the mature xterm.js engine. You can switch to it under Settings → Terminal (“Use xterm.js”). It’s a good fallback if you hit a rendering edge case, and it currently owns a couple of features the Ghostty engine is still catching up on (for example, its in-terminal search panel).

The engine choice applies to new tabs, so open a fresh pane after switching.

Terminal features

Regardless of engine, you get:

  • Copy mode (Ctrl+Shift+M) — vi-style keyboard selection (hjkl, word and line motions, / search) with yank to the clipboard.
  • Clickable links and file paths — hover highlights them; Ctrl+click opens a file in a side pane (git-worktree aware). Controlled by openFilesInSplit.
  • OSC 52 clipboard — programs (including remote ones) can copy to your local clipboard.
  • Color schemes — follow the app theme, pick from hundreds of bundled presets, or import your own. See Customize the terminal.
  • Font and ligatures — choose any system font (monospace by default) and toggle programming-font ligatures.
  • Bell — none, a visual flash, or a sound.