Best Terminal Emulators for macOS
Ranked terminal emulators for macOS: Ghostty, iTerm2, kitty, WezTerm, Alacritty, Warp and more, compared on features, config and trade-offs.
Updated
short verdict
Ghostty is the best default on a Mac: native tabs and splits, Metal rendering and a working setup with no config. Pick iTerm2 for the largest built-in feature set and Python scripting, WezTerm if you want Lua config and built-in multiplexing, and Alacritty if you pair a minimal terminal with a separate multiplexer.
A terminal emulator on macOS has to cover tabs, splits, fonts, shell integration and how you configure it. The options differ mainly in where they put features: iTerm2 and Warp build in a lot, Alacritty builds in almost nothing, and Ghostty, kitty and WezTerm sit between with GPU rendering and different configuration models (plain key-value, a single conf file, or Lua). Terminal.app and cmux cover the two ends of the spectrum: the bundled app, and a Ghostty-based app for running agent sessions.
this page is for
- Mac developers picking a daily terminal to replace Terminal.app
- Users who want GPU rendering and low-config defaults
- People who script their terminal with Python, Lua or AppleScript
- Developers running several AI coding agents side by side
A GPU-rendered terminal with a SwiftUI macOS app, native tabs and splits, and defaults that work without a config file.
best for
- Daily driver on macOS
- Users who want native windows and little setup
strengths
- Metal rendering with native macOS tabs, splits, menu bars and a drop-down Quick Terminal
- Embeds JetBrains Mono and Nerd Font symbols, and ships themes that follow system light/dark mode
- Shell integration is injected for bash, elvish, fish, nushell and zsh, with prompt jumping
- Supports the Kitty graphics and keyboard protocols, and has an AppleScript dictionary
weaknesses
- Remote hosts without Ghostty's terminfo can break; the ssh and sudo wrappers are off by default
- Only left-to-right text is supported
The most feature-dense macOS-only terminal, with triggers, profile switching, shell integration and a Python scripting API.
best for
- Heavy shell users who want built-in automation
- Remote work over SSH with a separate multiplexer
strengths
- Running a multiplexer in control mode maps its windows to native tabs and windows that survive disconnects
- Triggers fire regex-matched actions; profiles switch automatically by hostname, user, directory or command
- Python API adds status bar components, triggers and menu items
- Dynamic Profiles in JSON or plist reload on change, which suits version-controlled setups
weaknesses
- Most settings live in the Settings window rather than a text config file
- Ligatures render through CoreText, which the docs call significantly slower
- No Linux or Windows build, so your setup does not carry over
A keyboard-driven, OpenGL terminal with seven split layouts, session files, remote control and scriptable kittens.
best for
- Keyboard-centric users
- People who script terminal layouts and windows
strengths
- Layouts include Fat, Grid, Horizontal, Splits, Stack, Tall and Vertical, restorable via kitty --session
- Remote control opens windows, changes colors and sends text between windows, even over SSH
- kitten icat shows images over SSH, and kitten ssh copies terminfo to the remote host
- Single kitty.conf; supports ligatures, variable fonts and per-range font substitution
weaknesses
- The custom xterm-kitty terminfo breaks programs on hosts without it, and under sudo or su
- Config is a single conf file with no GUI settings editor
A Rust terminal and multiplexer configured entirely in Lua, with remote domains over SSH, TLS or Unix sockets.
best for
- Users who want config as code
- Terminal-native tabs, splits and remote sessions
strengths
- Lua config in ~/.wezterm.lua reloads on save and can register event handlers with wezterm.on
- wezterm cli scripts a running instance with split-pane, spawn, send-text and get-text
- Multiplexer domains attach remote tabs to the native UI; wezterm ssh reuses one connection
- Supports the iTerm2 image protocol with imgcat, kitty graphics and experimental Sixel
weaknesses
- SSH domains need a compatible WezTerm installed on the remote host
- The docs call multiplexing a young, evolving feature, and the README calls it a spare-time project
An OpenGL terminal that leaves tabs and splits to a window manager or multiplexer and focuses on speed.
best for
- Users who already run a multiplexer
- Minimal setups configured in a TOML file
strengths
- alacritty.toml reloads live and supports an import option for extra config files
- Vi mode (Ctrl+Shift+Space) moves through scrollback with selections and / and ? search
- Regex hints open matched text with an external program, by keyboard or mouse
- alacritty msg create-window opens another window from the same process
weaknesses
- No tabs, splits or settings GUI, so you need a separate multiplexer
- No font ligatures; the request is still an open issue
- Does not create the config file; you write alacritty.toml yourself
A Rust terminal with an editor-style input, command output grouped into Blocks, and built-in AI agents.
best for
- Developers who want AI agents next to the shell
- Users who prefer structured command output
strengths
- Blocks make each command and its output copyable, searchable, filterable and bookmarkable
- Editor-style input with syntax highlighting, autosuggestions, completions and YAML workflows
- settings.toml syncs with the Settings panel and can be kept in version control
- Split panes (Cmd+D, Cmd+Shift+D), synchronized input, hotkey window and session restore
weaknesses
- Needs an internet connection on first launch; telemetry and crash reporting are on by default
- Its own comparison table lists no Sixel, italic, dim or curly-underline support
- Supports bash, zsh, fish and PowerShell as login shells, not others
A macOS-only Swift app built on libghostty, with a vertical-tab sidebar and notifications for parallel AI coding agent sessions.
best for
- Running many agent sessions at once on macOS 14 or later
strengths
- Sidebar tabs show git branch, linked PR, working directory, listening ports and latest notification
- Notifications from OSC 9, 99, 777 or cmux notify; Cmd+Shift+U jumps to the latest unread
- Reads your Ghostty config, so fonts, themes, ligatures and kitty graphics carry over
- CLI and socket API create workspaces and send keystrokes; built-in scriptable browser pane
weaknesses
- Session restore does not bring back running processes unless you opt into a multiplexer integration
- Its terminal core is a Ghostty fork with local patches, and some server components use the Business Source License
The terminal bundled with macOS, with tabs, profiles, window groups and AppleScript, and nothing to install.
best for
- Light use where nothing extra is needed
- Locked-down Macs where you cannot install apps
strengths
- Profiles and window groups export as .terminal property list files
- Settings are scriptable with defaults and AppleScript
- Ligatures render, and macOS 26 added 24-bit color and Powerline font support
weaknesses
- Command-D splits show the same session in both panes, so you cannot run two shells side by side
- No inline image protocol such as Sixel, kitty graphics or iTerm2 images
- True color only arrived with macOS 26, and there is no text config file
How to choose
The right pick depends mostly on how much you want built in versus configured.
- Native feel with little setup: Ghostty, with native tabs, Metal rendering and embedded fonts.
- Built-in automation and profiles: iTerm2, with triggers, automatic profile switching and a Python API.
- Configuration as code and remote multiplexing: WezTerm, using a Lua config and SSH or TLS domains.
- Smallest terminal under a separate multiplexer: Alacritty, which omits tabs and splits on purpose.
- Parallel AI coding agents: cmux for its notification sidebar, or Warp for built-in agents.
- Nothing to install: Terminal.app, as long as you can live without real split panes.
When not to use these
- You work mostly inside a browser-based or remote IDE terminal; a local emulator adds nothing.
- You need the same terminal on a Windows machine and want only one macOS-exclusive app such as iTerm2 or cmux.
Also worth a look
- WaveElectron app that puts shells, file previews, an editor, web pages and AI chat in one window; heavier than a plain emulator.
FAQ
- What is the best terminal emulator for macOS?
- Ghostty is the best default: it has a native SwiftUI macOS app, Metal rendering, native tabs and splits, and works without configuration. iTerm2 is the better choice if you want triggers, automatic profile switching and a Python scripting API.
- Is iTerm2 still worth using over Terminal.app?
- Yes, if you need real split panes, triggers, shell integration, a hotkey window or tmux-style control mode. Terminal.app splits show the same session in both panes and it has no inline image protocol.
- Which macOS terminals support ligatures?
- Ghostty, kitty, WezTerm, iTerm2 and Terminal.app render ligatures, though iTerm2 renders them through CoreText, which its docs call significantly slower. Warp has a ligature setting. Alacritty does not support them.
- Do I need a multiplexer with these terminals?
- Only with Alacritty, which has no tabs or splits. Ghostty, kitty, WezTerm, iTerm2 and Warp include tabs and splits, and WezTerm also has a built-in multiplexer.