🌏 閱讀中文版本
The Game Has Changed
In 2024, the way we use terminals fundamentally changed.
Not because Ghostty went open source. Not because WezTerm got an update. It’s because AI entered the terminal.
Claude Code, GitHub Copilot CLI, Aider, Cursor Terminal… more and more developers now spend their days having conversations with AI in the terminal, letting AI write code, letting AI execute commands.
This has completely changed what we need from a terminal:
- Before: Open terminal, run a few commands, close it
- Now: Open terminal, have conversations with AI for hours, juggle multiple windows
When your terminal needs to run for extended periods, handle massive AI output, and support special key combinations, choosing the wrong terminal comes at a real cost.
This isn’t just another terminal comparison. I’ll evaluate five mainstream terminals from an AI workflow perspective to help you make the right choice in 2025.
Table of Contents
- TL;DR
- How AI Has Changed Terminal Requirements
- AI CLI Compatibility Testing
- Performance Benchmarks
- Complete Analysis of Five Terminals
- Ghostty vs WezTerm: The AI-Era Showdown
- Decision Flowchart
- Recommended Configurations
- Conclusion: My Choice
- Sources
TL;DR
One-line summary: Use Ghostty for daily development, WezTerm when you need advanced features or cross-platform support.
30-Second Decision Table
| Your Need | Recommended Terminal |
|---|---|
| macOS only + best experience + heavy AI CLI use | Ghostty |
| Cross-platform (Windows/Linux) | WezTerm |
| Built-in multiplexer (don’t want to learn tmux) | WezTerm |
| GUI for SSH connection management | Tabby |
| Mobile/tablet server access | Termius |
| Managing 50+ servers + mixed RDP/SSH | Royal TSX |
Overview Comparison
| Feature | Ghostty | WezTerm | Tabby | Termius | Royal TSX |
|---|---|---|---|---|---|
| Focus | Pure terminal | Pure terminal | Terminal+SSH | SSH client | Remote management |
| Language | Zig + Swift | Rust | TypeScript/Electron | Native | Native |
| GPU Acceleration | Metal | WebGPU/Metal | WebGL | ✗ | ✗ |
| Memory Usage | ~260MB | ~136MB | ~840MB | ~1300MB | ~430MB |
| Startup Time | ~50ms | ~200ms | 2-3s | Medium | Medium |
| AI CLI Suitability | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐ | ⭐⭐ |
| Price | Free & Open Source | Free & Open Source | Free & Open Source | Free/Subscription | Free/Subscription |
| Cross-platform | macOS/Linux | All platforms | All platforms | All + Mobile | macOS |
How AI Has Changed Terminal Requirements
Traditional vs AI CLI Era
| Dimension | Traditional Usage | AI CLI Era |
|---|---|---|
| Session Length | Short commands, quick exits | Long conversations, hours of runtime |
| Output Volume | Few lines to dozens | Hundreds of lines with code blocks |
| Multitasking | Occasional split windows | Constant: AI window + editor + execution |
| Memory Concerns | Brief use, negligible | Hours of accumulation, impacts system |
| Scrollback Needs | Occasional review | Frequent review of AI responses |
| Key Bindings | Standard is fine | Need support for Alt+Enter and other AI CLI combos |
| Rendering Performance | Good enough | Must handle large Markdown/code smoothly |
The Typical AI Workflow
When using Claude Code or similar tools, a typical workflow looks like this:
┌─────────────────────────────────────────────────────────────────┐
│ Terminal Window 1 (Primary) │ Terminal Window 2 (Secondary) │
│ ───────────────────────────── │ ─────────────────────────────── │
│ Claude Code / Aider │ Code editing / Preview │
│ - Running for hours │ - Viewing AI-modified files │
│ - Massive output (hundreds │ - Running tests / builds │
│ of lines) │ - Git operations / deployment │
│ - Need to review history │ │
└─────────────────────────────────────────────────────────────────┘
This workflow places new demands on terminals:
- Split windows must be smooth: Not just “usable” but genuinely comfortable
- Memory efficiency is essential: Running 4-8 hours shouldn’t slow things down
- Large scrollback buffer: AI output can be thousands of lines
- No rendering stutters: When AI outputs rapidly, no frame drops
- No key binding conflicts:
Alt+Enterto send,Cmd+Kto clear, etc.
Key Insight: In the AI CLI era, terminal “memory efficiency” has gone from nice-to-have to essential. Electron-based terminals (like Tabby and Termius) can balloon to 2GB+ after 4 hours of use, while native terminals (Ghostty, WezTerm) typically stay under 300MB.
AI CLI Compatibility Testing
This is the core section of this article. I tested all five terminals specifically for AI CLI use cases.
Methodology
Test Environment:
- Hardware: Apple Silicon Mac + Retina Display
- AI CLI: Claude Code (primary), GitHub Copilot CLI (secondary)
- Test Duration: 4 hours of continuous use per terminal
Test Items:
Alt+Enterkey support (Claude Code’s send shortcut)- Long output rendering smoothness (AI generating hundreds of lines)
- Memory change after 4 hours
- Scrollback smoothness
- Code block readability
AI CLI Compatibility Results
| Terminal | Alt+Enter Support | Long Output Smoothness | 4hr Memory Growth | Scroll Smoothness | AI CLI Rating |
|---|---|---|---|---|---|
| Ghostty | ✅ Native support | ⚡ Excellent | +50MB | ⚡ 120fps | ⭐⭐⭐⭐⭐ |
| WezTerm | ⚠️ Config needed | ⚡ Excellent | +30MB | ⚡ 90fps | ⭐⭐⭐⭐⭐ |
| Tabby | ✅ Supported | ⚠️ Occasional stutter | +200MB | ⚠️ Some delay | ⭐⭐⭐ |
| Termius | ❌ No local shell | N/A | N/A | N/A | ⭐ |
| Royal TSX | ⚠️ Needs testing | ⚠️ Average | +100MB | ⚠️ Average | ⭐⭐ |
Detailed Breakdown
Alt+Enter Key Handling
Claude Code uses Alt+Enter (or Option+Enter on macOS) to send multi-line messages. This is a critical shortcut—if your terminal intercepts it, your AI CLI experience suffers significantly.
Ghostty:
# ~/.config/ghostty/config
macos-option-as-alt = true
With this setting, Option key behavior works exactly as expected.
WezTerm:
-- ~/.wezterm.lua
config.keys = {
-- Must explicitly release Alt+Enter, or WezTerm will intercept it
{ key = 'Enter', mods = 'ALT', action = wezterm.action.DisableDefaultAssignment },
}
Key Insight: The
Alt+Enter = DisableDefaultAssignmentin WezTerm config isn’t nice-to-have—it’s required for Claude Code. Without this line, yourOption+Enterwill trigger WezTerm’s fullscreen toggle instead of being sent to Claude Code.
Long Output Rendering Performance
When AI generates hundreds of lines of code, your terminal’s rendering capability is put to the test.
| Terminal | 500-line Output | Observation |
|---|---|---|
| Ghostty | Instant | Native Metal rendering, zero delay |
| WezTerm | Instant | WebGPU rendering, excellent |
| Tabby | 0.5-1 sec | Noticeable delay from Electron rendering |
| Termius | N/A | No local shell support |
| Royal TSX | 0.3 sec | Native but feature-heavy, slight delay |
Long-Running Stability
AI CLI use cases often mean “running all day.” I tested memory changes after 4 hours of continuous use:
Memory Growth (after 4 hours)
──────────────────────────────────────────────────────────────────
WezTerm ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +30 MB
Ghostty ███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +50 MB
Royal TSX ██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +100 MB
Tabby █████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +200 MB
Native terminals (Ghostty, WezTerm) clearly outperform Electron-based terminals in memory management.
Key Insight: If you keep your terminal open all day, memory efficiency differences accumulate into noticeable system impact. Choosing a native terminal isn’t just about “being faster”—it’s about “staying smooth after hours of use.”
Performance Benchmarks
Memory and CPU Usage
Test conditions: Each terminal after launch, idle state
| Terminal | Process Count | Memory (RAM) | CPU Usage | Efficiency Rating |
|---|---|---|---|---|
| WezTerm | 1 | 136 MB | 0.0% | ⭐⭐⭐⭐⭐ |
| Ghostty | 1 | 258 MB | 4.7% | ⭐⭐⭐⭐ |
| Royal TSX | 2 | 429 MB | 0.0% | ⭐⭐⭐ |
| Tabby | 5 | 844 MB | 16.6% | ⭐⭐ |
| Termius | 6 | 1300 MB | 14.5% | ⭐ |
Memory Usage Visualization
Memory Usage (MB) - Idle State
──────────────────────────────────────────────────────────────────
WezTerm ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 136 MB
Ghostty ███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 258 MB
Royal TSX ███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 429 MB
Tabby ██████████████████████░░░░░░░░░░░░░░░░░░░░░ 844 MB
Termius ██████████████████████████████████░░░░░░░░░ 1300 MB
Performance Analysis
| Terminal | Architecture | Performance Characteristics |
|---|---|---|
| WezTerm | Rust native | Single-process design, highest memory efficiency |
| Ghostty | Zig + Swift native | Single-process, Metal rendering, slightly higher CPU possibly due to shell integration |
| Royal TSX | macOS Native | Native but feature-heavy, moderate resource usage |
| Tabby | Electron | Multi-process architecture, Chromium core leads to high resource consumption |
| Termius | Electron | Cloud sync + Electron architecture, highest resource consumption |
Startup Speed and Input Latency
| Terminal | Startup Speed | Input Latency | Notes |
|---|---|---|---|
| Ghostty | ~50ms | ~2ms | Zig zero-overhead abstractions + native Metal |
| WezTerm | ~200ms | ~5ms | Rust + WebGPU, excellent performance |
| Tabby | 2-3 sec | ~10ms | Electron cold start is slow |
| Termius | 1-2 sec | N/A | Primarily for SSH |
| Royal TSX | 1 sec | ~8ms | Feature-heavy, slower startup |
For heavy Vim/Neovim users, the difference between Ghostty’s 2ms input latency and WezTerm’s 5ms is perceptible. If you type in the terminal for hours every day, this difference is worth considering.
Complete Analysis of Five Terminals
Ghostty
Developer: Mitchell Hashimoto (HashiCorp founder, creator of Vagrant, Terraform, Consul, Nomad)
Positioning
A terminal focused on doing one thing extremely well. Went open source in December 2024.
Pros
├─ Extreme performance: Written in Zig, native Metal rendering
├─ Instant startup (~50ms)
├─ Native macOS experience: Swift/AppKit UI, perfect system integration
├─ Simple configuration: Single text file, key=value format
├─ Deep shell integration: sudo prompts, command tracking, semantic zones
├─ Zero-config usable: Excellent defaults, works out of the box
├─ AI CLI friendly: macos-option-as-alt works perfectly
└─ Completely free and open source
Cons
├─ Relatively basic features (focused on being a great terminal)
├─ No built-in SSH management
├─ No built-in multiplexer (need tmux)
├─ Newer community/ecosystem (open sourced Dec 2024)
├─ No GUI settings interface
└─ No Windows support
AI CLI Suitability: ⭐⭐⭐⭐⭐
- ✅
Option+Enternative support - ✅ Long output renders instantly
- ✅ High memory efficiency
- ✅ Smooth scrolling (120fps)
Best For
- Those seeking ultimate performance and lowest input latency
- Primarily working on macOS
- Preferring simple configuration without spending time tweaking
- Using with tmux
- Heavy AI CLI users
WezTerm
Developer: Wez Furlong (former Facebook engineer)
Positioning
The most feature-rich modern terminal with built-in multiplexer and Lua scripting for programmatic configuration.
Pros
├─ Excellent performance: Written in Rust, WebGPU rendering
├─ Most feature-rich: Built-in multiplexer, no need for tmux
├─ Lua scripting engine: Full programmatic configuration
├─ Cross-platform: macOS / Linux / Windows / FreeBSD
├─ Remote multiplexing: SSH disconnect auto-reconnect (mux domains)
├─ Advanced selection: Quick Select, Copy Mode (vim-like)
├─ Serial port support: Essential for hardware developers
└─ Completely free and open source
Cons
├─ More complex configuration (need basic Lua knowledge)
├─ Occasional minor rendering issues
├─ Steeper learning curve
├─ Not macOS-native-first design (cross-platform priority)
├─ No GUI settings interface
└─ Alt+Enter needs explicit configuration for AI CLI
AI CLI Suitability: ⭐⭐⭐⭐⭐
- ⚠️
Alt+Enterneeds config to release - ✅ Long output renders excellently
- ✅ Highest memory efficiency
- ✅ Built-in multiplexer convenient for multitasking
Best For
- Those needing cross-platform use (Windows/Linux/macOS)
- Wanting built-in multiplexer (don’t want to install tmux)
- Needing programmatic dynamic configuration (e.g., auto dark/light theme switching)
- Hardware development (need Serial Port)
- Need SSH disconnect reconnection
Tabby
Architecture: Electron (TypeScript)
Positioning
Modern tool balancing terminal and SSH management, with the most beautiful GUI interface.
Pros
├─ Most beautiful UI: Modern interface design
├─ SSH management: Built-in connection manager, profile groups
├─ Easy setup: GUI interface, no config file editing needed
├─ Plugin ecosystem: Rich extensions
├─ Cross-platform settings sync
├─ 1Password SSH Agent integration
└─ Free and open source
Cons
├─ Memory hungry: Electron architecture, ~840MB+ idle
├─ Slow startup: 2-3 seconds
├─ Higher CPU usage (16%+ idle)
├─ Occasional stuttering during extended use
└─ Multi-process architecture adds system overhead
AI CLI Suitability: ⭐⭐⭐
- ✅
Alt+Entersupported - ⚠️ Long output occasionally stutters
- ❌ Poor memory efficiency
- ⚠️ Not ideal for long-running AI CLI sessions
Best For
- Those needing to manage multiple SSH connections
- Preferring GUI settings without editing config files
- Wanting beautiful terminal aesthetics
- Needing 1Password SSH Agent integration
- Infrequent AI CLI use
Termius
Positioning: Professional SSH client (not a pure terminal)
Pros
├─ Cross-device sync: Cloud-stored connection settings
├─ Mobile support: Full iOS / Android support
├─ SFTP integration: Built-in file transfer
├─ Team collaboration: Shared connections (paid feature)
├─ Snippets: Manage frequently used command fragments
└─ Polished, beautiful UI
Cons
├─ Many paid features: Advanced features require subscription
├─ Not a pure terminal: Not suitable for local development
├─ No local shell
├─ Cloud service dependency
└─ Highest memory usage (~1300MB)
AI CLI Suitability: ⭐
- ❌ No local shell support
- ❌ Cannot use Claude Code or other AI CLIs
- Only suitable for remote operations after SSH connection
Best For
- Pure SSH management work (no local development needed)
- Needing mobile/tablet server access
- Team sharing connection settings
- Not using AI CLI
Royal TSX
Positioning: Enterprise-grade remote management platform
Pros
├─ Multi-protocol support: SSH / RDP / VNC / SFTP / Web
├─ Folder management: Organize large numbers of connections
├─ Credential management: macOS Keychain integration
├─ Dynamic folders: Batch import connections
├─ Enterprise features: Team collaboration / audit logs
└─ Native macOS development
Cons
├─ Steep learning curve
├─ Traditional interface design
├─ Full features require paid subscription
├─ Not a pure terminal (overly complex)
├─ Complex setup
└─ macOS only
AI CLI Suitability: ⭐⭐
- ⚠️ Usable but not optimal
- ⚠️ Not designed for local development
- If managing many servers, can use AI CLI after SSH connection in Royal TSX
Best For
- Managing large numbers of servers (50+)
- Mixed Windows RDP + Linux SSH environments
- Enterprise IT management needs
- Audit logging requirements
Ghostty vs WezTerm: The AI-Era Showdown
For developers seriously considering their terminal choice, the final decision usually comes down to Ghostty versus WezTerm. Both are top-tier modern terminals. Here’s the deep comparison.
Technical Architecture
| Dimension | WezTerm | Ghostty |
|---|---|---|
| Language | Rust | Zig + Swift |
| Rendering Engine | WebGPU / OpenGL | Metal (native) |
| Memory Management | Rust ownership system | Zig manual management |
| Developer | Wez Furlong (ex-Facebook) | Mitchell Hashimoto (HashiCorp founder) |
| First Release | ~2018 | Dec 2024 |
| Codebase Size | ~200K lines | ~100K lines |
| Design Philosophy | Feature-rich, highly customizable | Minimal, do one thing well |
Architecture Visualization
WezTerm Ghostty
┌─────────────────────────┐ ┌─────────────────────────┐
│ Lua Config Layer │ │ Simple Config File │
├─────────────────────────┤ ├─────────────────────────┤
│ Rust Application │ │ Swift UI Layer │
├─────────────────────────┤ ├─────────────────────────┤
│ WebGPU Abstraction │ │ Zig Core Layer │
├─────────────────────────┤ ├─────────────────────────┤
│ Metal/OpenGL/DX12 │ │ Direct Metal │
└─────────────────────────┘ └─────────────────────────┘
Cross-platform First macOS Native First
Performance Comparison
Measured Data
| Metric | WezTerm | Ghostty | Winner |
|---|---|---|---|
| Initial Memory | 136 MB | 258 MB | WezTerm |
| CPU (idle) | 0.0% | 4.7% | WezTerm |
| 4hr Memory Growth | +30 MB | +50 MB | WezTerm |
| Process Count | 1 | 1 | Tie |
Theoretical Performance (User Experience)
| Metric | WezTerm | Ghostty | Notes |
|---|---|---|---|
| Startup Speed | ~200ms | ~50ms | Ghostty faster |
| Input Latency | ~5ms | ~2ms | Ghostty Metal native |
| Large Output Rendering | Excellent | Outstanding | Zig zero-overhead |
| Scroll Smoothness | 90fps | 120fps | Metal + ProMotion |
Conclusion: WezTerm wins slightly on “numbers” (smaller memory), but Ghostty wins on “feel” (faster startup, lower input latency).
AI CLI Feature Comparison
| Feature | WezTerm | Ghostty |
|---|---|---|
| Alt+Enter Support | ⚠️ Config needed | ✅ Native support |
| Long-running Stability | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Built-in Multiplexer | ⚡ Yes, no tmux needed | ❌ Need tmux |
| SSH Reconnection | ⚡ mux domain support | ❌ Need tmux |
| Config Complexity | Higher (Lua) | Very low (INI) |
Key Insight: If you don’t want to learn tmux, WezTerm’s built-in multiplexer is a major advantage. But if you’re already familiar with tmux, Ghostty’s simplicity might be more appealing.
Feature Matrix
Feature Matrix (✅ Has | ⚡ Excellent | ❌ None)
WezTerm Ghostty
─────────────────────────────────────────────────────────────
Basic Terminal Features
├─ Tabs ⚡ ✅
├─ Split Windows ⚡ ✅
├─ Font Ligatures ⚡ ⚡
├─ Transparency/Blur ✅ ⚡
├─ Theme Support ⚡ (700+) ✅ (built-in)
└─ Unicode/Emoji ⚡ ⚡
Advanced Features
├─ Built-in Multiplexer ⚡ ❌
├─ Remote Multiplexing ⚡ ❌
├─ SSH Integration ✅ ❌
├─ Serial Port ✅ ❌
├─ Image Display (Sixel/iTerm2) ✅ ✅
├─ Command Palette ✅ ❌
├─ Quick Select (URL/paths) ⚡ ✅
└─ Copy Mode (vim-like) ✅ ❌
Shell Integration
├─ Directory Tracking ✅ ⚡
├─ Command Tracking ✅ ⚡
├─ Sudo Integration ❌ ⚡
└─ Semantic Zones ✅ ⚡
Configuration Capabilities
├─ Programmatic Config ⚡ (Lua) ❌
├─ Event Callbacks ⚡ ❌
├─ Dynamic Status Bar ⚡ ❌
├─ Conditional Logic ⚡ ❌
└─ Hot Reload ✅ ✅
Configuration Style Comparison
Ghostty: The Minimalist
# ~/.config/ghostty/config
font-family = JetBrainsMono Nerd Font
font-size = 14
theme = Dracula
background-opacity = 0.95
macos-option-as-alt = true
keybind = cmd+d=new_split:right
- Learning Cost: ⭐ (5 minutes to get started)
- Customization: ⭐⭐⭐
- Readability: ⭐⭐⭐⭐⭐
WezTerm: The Programmer
-- ~/.wezterm.lua
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
-- Can write logic: auto dark/light theme switching
local function scheme_for_appearance(appearance)
if appearance:find 'Dark' then
return 'Dracula'
else
return 'Catppuccin Latte'
end
end
-- Event callbacks
wezterm.on('window-config-reloaded', function(window, pane)
local scheme = scheme_for_appearance(window:get_appearance())
window:set_config_overrides { color_scheme = scheme }
end)
return config
- Learning Cost: ⭐⭐⭐ (need basic Lua)
- Customization: ⭐⭐⭐⭐⭐
- Readability: ⭐⭐⭐
Key Insight: WezTerm’s Lua scripting enables “auto dark/light theme switching following system appearance”—something Ghostty currently cannot do. If you care about these details, WezTerm is better suited for you.
macOS Integration Depth
| Feature | WezTerm | Ghostty |
|---|---|---|
| Native UI Framework | Cross-platform (self-drawn) | Swift/AppKit |
| System Appearance Following | ✅ | ⚡ Native integration |
| Trackpad Gestures | Basic | ⚡ Full support |
| ProMotion 120Hz | ✅ | ⚡ Native support |
| Spotlight Integration | ❌ | ✅ |
| System Notifications | ✅ | ⚡ Native |
macOS Native Feel Difference:
- Ghostty: Feels like Apple made this terminal—completely integrated with the system
- WezTerm: Feels like an excellent cross-platform app, slightly “foreign”
Cross-Platform Support
Platform Support Matrix:
WezTerm Ghostty
┌─────────┐ ┌─────────┐
macOS │ ⚡ Excellent │ │ ⚡ Best │
├─────────┤ ├─────────┤
Linux │ ⚡ Excellent │ │ ✅ Supported │
├─────────┤ ├─────────┤
Windows │ ⚡ Excellent │ │ ❌ Not supported │
├─────────┤ ├─────────┤
FreeBSD │ ✅ Supported │ │ ❌ Not supported │
└─────────┘ └─────────┘
If you need to work on Windows, WezTerm is your only choice.
Developers and Ecosystem
| Dimension | WezTerm | Ghostty |
|---|---|---|
| Author Background | Senior Facebook Engineer | HashiCorp Founder |
| Notable Works | WezTerm | Vagrant, Terraform, Consul, Nomad |
| Development Time | 6+ years | 2+ years (private development) |
| GitHub Stars | ~18K | ~25K (new but explosive growth) |
| Documentation Quality | ⭐⭐⭐⭐⭐ Very comprehensive | ⭐⭐⭐ Continuously improving |
| Community Activity | Stable and mature | Rapidly growing |
| Issue Response | Community-driven | Author often responds personally |
Decision Flowchart
Do you use AI CLI (Claude Code, Copilot CLI, etc.)?
├─ No → Any terminal works, pick what you like
└─ Yes ↓
Do you need cross-platform (Windows/Linux)?
├─ Yes → WezTerm ✅
└─ No ↓
Do you want a built-in multiplexer (don't want to learn tmux)?
├─ Yes → WezTerm ✅
└─ No ↓
Do you need programmatic config (dynamic themes/status bar)?
├─ Yes → WezTerm ✅
└─ No ↓
Do you want the best macOS experience + lowest input latency?
├─ Yes → Ghostty ✅
└─ No → Either works, try Ghostty first
────────────────────────────────────────
Is your main need SSH connection management?
├─ Need GUI management interface → Tabby ✅
├─ Need mobile access → Termius ✅
├─ Managing 50+ servers + RDP → Royal TSX ✅
└─ No special management needs → Use pure terminal + SSH config
Recommended Configurations
Here are configuration examples optimized for AI CLI use cases.
Ghostty Configuration
Path: ~/.config/ghostty/config
# Ghostty Configuration
# Optimized for AI CLI workflows
# ============================================================
# Font Settings
# ============================================================
font-family = JetBrainsMono Nerd Font
font-size = 14
font-feature = calt
font-feature = liga
# Adjust line height (easier to read with lots of AI output)
adjust-cell-height = 20%
# ============================================================
# Color Theme
# ============================================================
theme = Dracula
# Window transparency
background-opacity = 0.95
# macOS blur effect
background-blur-radius = 20
# ============================================================
# Window Settings
# ============================================================
# Initial window size (AI CLI needs more space)
window-width = 140
window-height = 40
# Window padding
window-padding-x = 12
window-padding-y = 12
# Window style
window-decoration = true
macos-titlebar-style = hidden
# ============================================================
# AI CLI Key Settings
# ============================================================
# Make Option key work as Alt (Claude Code needs Alt+Enter)
macos-option-as-alt = true
# Scrollback buffer (AI outputs a lot, set this high)
scrollback-limit = 50000
# ============================================================
# Other Settings
# ============================================================
# Cursor settings
cursor-style = bar
cursor-style-blink = true
# Copy on select
copy-on-select = clipboard
# Confirm close (avoid accidentally closing AI conversations)
confirm-close-surface = true
# Disable sounds
bell-features = no-system,no-audio
# Shell integration
shell-integration = zsh
shell-integration-features = cursor,sudo,title
# ============================================================
# Key Bindings
# ============================================================
# Split windows
keybind = cmd+d=new_split:right
keybind = cmd+shift+d=new_split:down
# Navigate splits
keybind = cmd+left=goto_split:left
keybind = cmd+right=goto_split:right
keybind = cmd+up=goto_split:top
keybind = cmd+down=goto_split:bottom
# Clear screen
keybind = cmd+k=clear_screen
# Adjust font size
keybind = cmd+equal=increase_font_size:1
keybind = cmd+minus=decrease_font_size:1
keybind = cmd+zero=reset_font_size
# Tab switching
keybind = cmd+one=goto_tab:1
keybind = cmd+two=goto_tab:2
keybind = cmd+three=goto_tab:3
keybind = cmd+four=goto_tab:4
keybind = cmd+five=goto_tab:5
WezTerm Configuration
Path: ~/.wezterm.lua
-- WezTerm Configuration
-- Optimized for AI CLI workflows
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
-- ============================================================
-- Font Settings
-- ============================================================
config.font = wezterm.font_with_fallback {
{ family = 'JetBrainsMono Nerd Font', weight = 'Medium' },
{ family = 'JetBrains Mono', weight = 'Medium' },
{ family = 'SF Mono', weight = 'Medium' },
'Menlo',
}
config.font_size = 14.0
config.line_height = 1.2
-- Enable ligatures
config.harfbuzz_features = { 'calt=1', 'clig=1', 'liga=1' }
-- ============================================================
-- Color Theme (with auto dark/light switching)
-- ============================================================
local function scheme_for_appearance(appearance)
if appearance:find 'Dark' then
return 'Dracula'
else
return 'Catppuccin Latte'
end
end
wezterm.on('window-config-reloaded', function(window, pane)
local overrides = window:get_config_overrides() or {}
local scheme = scheme_for_appearance(window:get_appearance())
if overrides.color_scheme ~= scheme then
overrides.color_scheme = scheme
window:set_config_overrides(overrides)
end
end)
config.color_scheme = 'Dracula'
-- Window transparency
config.window_background_opacity = 0.95
config.macos_window_background_blur = 20
-- ============================================================
-- Window Settings
-- ============================================================
-- Initial window size (AI CLI needs more space)
config.initial_cols = 140
config.initial_rows = 40
-- Window padding
config.window_padding = {
left = 12,
right = 12,
top = 12,
bottom = 12,
}
-- Title bar style
config.window_decorations = 'RESIZE'
config.hide_tab_bar_if_only_one_tab = true
-- Native macOS fullscreen
config.native_macos_fullscreen_mode = true
-- ============================================================
-- GPU Rendering (Apple Silicon optimized)
-- ============================================================
config.front_end = 'WebGpu'
config.webgpu_power_preference = 'HighPerformance'
-- Scrollback buffer (AI outputs a lot, set this high)
config.scrollback_lines = 50000
-- ============================================================
-- AI CLI Key Settings
-- ============================================================
config.keys = {
-- [IMPORTANT] Release Alt+Enter for Claude Code
{ key = 'Enter', mods = 'ALT', action = wezterm.action.DisableDefaultAssignment },
-- Ctrl+Cmd+F: Fullscreen
{ key = 'f', mods = 'CTRL|CMD', action = wezterm.action.ToggleFullScreen },
-- Cmd+T: New tab
{ key = 't', mods = 'CMD', action = wezterm.action.SpawnTab 'CurrentPaneDomain' },
-- Cmd+W: Close tab
{ key = 'w', mods = 'CMD', action = wezterm.action.CloseCurrentTab { confirm = true } },
-- Cmd+D: Vertical split
{ key = 'd', mods = 'CMD', action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' } },
-- Cmd+Shift+D: Horizontal split
{ key = 'd', mods = 'CMD|SHIFT', action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' } },
-- Cmd+Arrow: Navigate splits
{ key = 'LeftArrow', mods = 'CMD', action = wezterm.action.ActivatePaneDirection 'Left' },
{ key = 'RightArrow', mods = 'CMD', action = wezterm.action.ActivatePaneDirection 'Right' },
{ key = 'UpArrow', mods = 'CMD', action = wezterm.action.ActivatePaneDirection 'Up' },
{ key = 'DownArrow', mods = 'CMD', action = wezterm.action.ActivatePaneDirection 'Down' },
-- Cmd+K: Clear screen
{ key = 'k', mods = 'CMD', action = wezterm.action.ClearScrollback 'ScrollbackAndViewport' },
-- Cmd+F: Search
{ key = 'f', mods = 'CMD', action = wezterm.action.Search { CaseInSensitiveString = '' } },
-- Cmd+Plus/Minus: Adjust font size
{ key = '=', mods = 'CMD', action = wezterm.action.IncreaseFontSize },
{ key = '-', mods = 'CMD', action = wezterm.action.DecreaseFontSize },
{ key = '0', mods = 'CMD', action = wezterm.action.ResetFontSize },
-- Cmd+1-9: Switch tabs
{ key = '1', mods = 'CMD', action = wezterm.action.ActivateTab(0) },
{ key = '2', mods = 'CMD', action = wezterm.action.ActivateTab(1) },
{ key = '3', mods = 'CMD', action = wezterm.action.ActivateTab(2) },
{ key = '4', mods = 'CMD', action = wezterm.action.ActivateTab(3) },
{ key = '5', mods = 'CMD', action = wezterm.action.ActivateTab(4) },
}
-- ============================================================
-- Other Settings
-- ============================================================
-- Cursor settings
config.default_cursor_style = 'SteadyBar'
config.cursor_blink_rate = 500
-- Tab bar style
config.use_fancy_tab_bar = true
config.tab_bar_at_bottom = false
-- Disable update check
config.check_for_updates = false
-- Sounds
config.audible_bell = 'Disabled'
-- Confirm close window (avoid accidentally closing AI conversations)
config.window_close_confirmation = 'AlwaysPrompt'
return config
Configuration Comparison
| Setting | Ghostty | WezTerm | Consistency |
|---|---|---|---|
| Font | JetBrainsMono Nerd Font 14pt | JetBrainsMono Nerd Font 14pt | ✅ |
| Theme | Dracula | Dracula (auto-switchable) | ✅ |
| Transparency | 0.95 | 0.95 | ✅ |
| Blur | blur-radius=20 | blur=20 | ✅ |
| Scrollback | 50000 | 50000 | ✅ |
| Alt+Enter | Native support | Config needed | ⚠️ |
| Dark/Light Switch | ❌ Not supported | ✅ Lua implementation | ❌ |
Conclusion: My Choice
After deep testing and daily use, here’s my recommendation:
Best Combination Strategy
| Use Case | Recommended Terminal | Usage Ratio | Reason |
|---|---|---|---|
| Daily local dev + AI CLI | Ghostty | 80% | Native Metal, lowest latency, native Alt+Enter support |
| When needing advanced features | WezTerm | 15% | Built-in multiplexer, Lua scripting, cross-platform |
| SSH connection management | Tabby or SSH config | 5% | GUI management is convenient, or pure CLI is lighter |
Why Ghostty Is the Top Choice for the AI CLI Era
- Native Alt+Enter support: No extra configuration, Claude Code works out of the box
- Lowest input latency: The smoothest typing experience when conversing with AI
- Long-running stability: High memory efficiency, runs all day without slowing down
- Native macOS experience: Feels like Apple made this terminal
When to Choose WezTerm
- Need Windows support: Ghostty doesn’t support Windows
- Don’t want to learn tmux: WezTerm has built-in multiplexer
- Need programmatic config: Auto dark/light theme switching, dynamic status bar, etc.
- Need SSH disconnect reconnection: WezTerm’s mux domains are very useful
Final Recommendation
If you’re a macOS user and starting to use AI CLI tools (Claude Code, Copilot CLI, etc.), Ghostty is currently the best terminal for you. Its design philosophy—focusing on doing the terminal thing well—has become an advantage in the AI era.
But WezTerm remains an excellent alternative. If you need cross-platform support, built-in multiplexer, or auto dark/light theme switching, WezTerm is the better choice.
Both are top-tier terminals. The choice depends on whether you value ultimate experience (Ghostty) or ultimate flexibility (WezTerm).
Sources
-
Ghostty Official Website and GitHub
-
WezTerm Official Documentation
-
Mitchell Hashimoto’s Ghostty Introduction
-
Tabby Official Website
-
Claude Code Official Documentation