DEV Community

Yuuichi Eguchi
Yuuichi Eguchi

Posted on • Edited on

Calyx vs cmux: Choosing the Right Ghostty-Based Terminal for macOS 26

The Ghostty Terminal Race

With the rise of AI coding agents in 2026, terminals are no longer just text windows -- they're command centers. Two Ghostty-based macOS terminals have emerged as frontrunners: cmux and Calyx.

Both leverage Ghostty's GPU-accelerated rendering, but they take very different approaches to what a modern terminal should be. Let's break down why Calyx might be the better choice for your daily workflow.

What is cmux?

cmux by manaflow-ai is a terminal built for AI coding agents. It features vertical tabs, notification rings, split panes, a socket API, and deep integration with tools like Claude Code, Codex, and Aider.

What is Calyx?

Calyx is a macOS 26+ native terminal that prioritizes daily-driver polish: a beautiful Liquid Glass UI, robust session management, intuitive tab organization, and security-conscious browser integration.

Head-to-Head Comparison

1. Native macOS 26 Design

Calyx is built from the ground up for macOS 26's Liquid Glass design language. Glass Material is applied to the sidebar, tab bar, command palette, and browser toolbar, making Calyx feel like a first-class citizen on your Mac. It also respects the "Reduce Transparency" accessibility setting, automatically falling back to a solid UI for users who need it.

cmux uses a functional UI but doesn't adopt macOS 26's design system. If you care about visual consistency with the rest of your OS, Calyx wins here.

2. Tab Groups vs Vertical Tabs

cmux offers vertical tabs with useful metadata like git branch, PR status, and listening ports in the sidebar.

Calyx takes tab management further with tab groups. Organize tabs by project or context with 10 color presets. Groups are collapsible in the sidebar, support tab reordering within groups, and show tab counts per group. Double-click a group header to rename it, close individual tabs or an entire group directly from the sidebar. Working on a full-stack app? Group your frontend, backend, and infrastructure tabs separately. With dozens of tabs open, you'll always know where you are.

3. Split Panes: Stability Matters

Both terminals support split panes, but stability differs significantly.

cmux has known rendering issues where terminal panes fail to render after closing splits. Keyboard shortcuts also reportedly break after opening browser tabs.

Calyx's splits are backed by an immutable binary tree data structure (SplitTree) with horizontal/vertical splitting, drag-to-resize with a 50px minimum pane guarantee, equalize operation, and spatial focus navigation (left/right/up/down). Tab switching uses only setFocus + refresh, keeping the render loop stable by design. No phantom blank panes, no lost keyboard input.

4. Command Palette

Hit Cmd+Shift+P in Calyx and you get a VS Code-style command palette with fuzzy search across 15 built-in commands. The scoring system combines word-start bonus, consecutive match bonus, exact match bonus, and prefix match bonus for accurate results. Command usage frequency is tracked, so your most-used commands rise to the top over time.

The shortcut system is built on a low-level NSEvent monitor that detects IME compose state. CJK input never triggers shortcuts accidentally. Text fields and text views are also properly excluded.

cmux doesn't have a command palette.

5. Session Persistence

Quit Calyx and reopen it. Your tabs, tab groups, split layouts, browser URLs, and window positions are fully restored.

Under the hood, Calyx implements atomic file writes (temp file + rename), automatic backup rotation, 2-second debounced auto-save, schema versioning (currently v3) with migration support, crash loop detection (max 3 recovery attempts), and window frame clamping to screen bounds. If the primary session file is corrupted, it automatically recovers from the backup.

6. Notification System

Both terminals support notifications, but Calyx emphasizes security and reliability.

Calyx relays OSC notifications to UNUserNotificationCenter with per-tab unread badges (circle in sidebar, capsule in tab bar, capped at 99+). It implements rate limiting (max 5 per second per tab), Dock icon bounce on first unread, and automatic badge clearing on window focus.

Notification text is sanitized with bidi override removal, control character filtering, zero-width character removal, newline normalization, NFC normalization, and truncation at 256 grapheme clusters, preventing malicious terminal sequences from becoming attack vectors.

7. Browser Integration That Works

Both terminals include a built-in browser. However, cmux has reported issues with HTTP connections being blocked and forced dark mode on all pages.

Calyx's browser uses a non-persistent WebKit data store for privacy, with back/forward/reload navigation, a loading indicator, error banners, and JavaScript dialog support (alert, confirm, prompt).

Security is comprehensive:

  • URL scheme validation (only http/https/about at top-level)
  • Subresource scheme blocking (javascript, data)
  • Redirect depth limiting (max 10)
  • Download filename sanitization (null byte stripping, dangerous character replacement, dangerous extension blocking, 255-char limit)
  • MIME type blocking for dangerous executables
  • Symlink traversal prevention on download paths
  • Automatic macOS Quarantine attribute on downloaded files

8. Licensing

Calyx's MIT license places no restrictions on commercial use or modification. cmux's AGPL requires source code disclosure if you provide the software as a network service, a potential blocker for enterprise adoption.

9. Git Source Control

Calyx includes a built-in Git source control view directly in the sidebar. Switch to the "Changes" mode and you get a complete overview of your repository's state without leaving the terminal.

  • Working Changes: Files grouped into Staged / Unstaged / Untracked sections with status badges (M/A/D/R/C/?/U/T)
  • Commit Graph: Color-coded branch lane visualization with commit history. Click to expand and see changed files per commit. Infinite scroll pagination for large repositories
  • Inline Diff Viewer: Click any file to open a diff tab with color-coded additions (green), deletions (red), and hunk headers (cyan). Dual old/new line number gutter. Binary file detection and automatic truncation for diffs over 1MB or 50,000 lines
  • Diff Review Comments: Click the + button next to any line number to add an inline comment. Submit Review sends the formatted review directly to a Claude Code or Codex terminal tab

No more switching to VS Code just to review what Claude Code changed. It's all inside Calyx.

cmux doesn't have this feature.

10. AI Agent IPC (Inter-Process Communication)

Calyx includes a built-in MCP server that enables AI agent instances (Claude Code, Codex CLI) to communicate with each other across tabs and panes.

Just run "Enable AI Agent IPC" from the command palette, and every agent instance in Calyx can discover peers, send messages, broadcast announcements, and check for incoming messages via 7 MCP tools. Config is auto-written to ~/.claude.json and ~/.codex/config.toml when the respective tool is installed. Thanks to the MCP spec instructions field, agents automatically register as peers upon connecting.

Calyx's MCP-based IPC is purpose-built for multi-agent collaboration across Claude Code and Codex.

11. Scriptable Browser

cmux pioneered browser automation with 80+ CLI commands for controlling WKWebView. Calyx now matches this with 25 CLI commands for browser scripting: snapshot accessibility trees, click elements, fill forms, evaluate JavaScript, take screenshots, wait for conditions, inspect DOM attributes, list links and inputs, check visibility, hover, and scroll.

The calyx CLI binary is bundled inside the app. Run Install CLI to PATH from the command palette to make it available system-wide.

calyx browser list
calyx browser snapshot --tab-id <id>
calyx browser get-text h1 --tab-id <id>
calyx browser click a --tab-id <id>
calyx browser eval 'document.title' --tab-id <id>
calyx browser get-attribute a href         # Get element attribute
calyx browser get-links                    # List all links (JSON)
calyx browser get-inputs                   # List form inputs (JSON)
calyx browser is-visible '#el'             # Check visibility
calyx browser hover '#menu'                # Hover element
calyx browser scroll down --amount 500     # Scroll page/element
Enter fullscreen mode Exit fullscreen mode

Element refs (@e1, @e2) from snapshots can be used as selectors in subsequent commands, enabling reliable DOM automation even on dynamic pages.

Feature Matrix

Feature Calyx cmux
Liquid Glass UI Yes No
Tab Groups (color-coded) Yes No (vertical tabs only)
Split Panes Yes, stable Rendering bugs
Command Palette Yes (fuzzy search + frequency) No
Session Persistence Yes (schema v3 + crash recovery) No
Browser Integration Yes (security validation + downloads) No HTTP, forced dark mode
Notifications Yes (rate-limited + sanitized) Yes
CJK Input Handling Yes (IME-aware shortcuts) Unknown
Multi-Window Yes Yes
Git Source Control Yes (commit graph + diff viewer) No
AI Agent IPC (MCP) Yes (7 tools, auto-register, Claude Code + Codex) No
Scriptable Browser Yes (25 CLI commands) Yes (80+ CLI commands)
License MIT AGPL

The Bottom Line

cmux is a solid terminal with a sharp focus on AI agent workflows.

But as a daily-driver terminal, Calyx offers a more polished and reliable experience: a beautiful native Liquid Glass UI, intuitive color-coded tab groups, stable split panes backed by immutable data structures, a fuzzy-search command palette with frequency learning, crash-resilient session persistence, a scriptable browser with 25 CLI commands, rate-limited and sanitized notifications, proper CJK input handling, and a permissive MIT license.

If you're on macOS 26, give Calyx a try.


Links

Top comments (0)