WezTerm vs Kitty
Two GPU-accelerated terminals for power users. Lua scripting vs the Kitty graphics protocol. Both fast, both extensible, different ecosystems.
WezTerm
WezTerm's Lua configuration system is more flexible than Kitty's config format, the built-in multiplexer eliminates the need for tmux, and cross-platform support is better. Kitty's graphics protocol is excellent for image-heavy workflows, but WezTerm is the more complete package.
GPU Terminals for Power Users
Both WezTerm and Kitty are GPU-accelerated terminals aimed at developers who care about performance and customization. Neither is a casual choice. If you're considering these, you've outgrown your default terminal.
The key difference: WezTerm leans into programmable configuration (Lua), while Kitty leans into protocol innovation (graphics, keyboard).
WezTerm: The Programmable Terminal
WezTerm's Lua config means your terminal setup is a program, not a config file. Dynamic behavior, custom key handlers with logic, event-driven actions, and a built-in multiplexer that makes tmux optional.
The multiplexer is the standout feature. Native splits, tabs, and workspaces without the overhead of tmux. SSH multiplexing lets you manage remote sessions natively.
Cross-platform support is genuine. macOS, Linux, and Windows all work well.
Kitty: Protocol Innovator
Kitty's graphics protocol is a real standard that other terminals are adopting. Display images, plots, and rich content inline in your terminal. Tools like ranger, neovim plugins, and plotting libraries use it.
The keyboard protocol is another innovation: proper key reporting that distinguishes Ctrl+I from Tab, something most terminals get wrong. Kitty's kittens (extensions) provide useful utilities: SSH with automatic shell integration, file transfer, Unicode input.
Performance is excellent. Written in C and Python, with OpenGL rendering.
The Configuration Trade-off
Kitty uses a traditional config file format. Clean, readable, well-documented, but static. You can't have conditional logic, dynamic values, or programmatic behavior.
WezTerm's Lua config is more powerful but also more complex. If you just want to set colors and key bindings, Kitty's config is simpler. If you want your terminal to adapt dynamically, WezTerm wins.
Quick Comparison
| Factor | WezTerm | Kitty |
|---|---|---|
| Configuration | Lua scripting | Config file |
| Graphics Protocol | Supports Kitty protocol | Created the protocol |
| Built-in Multiplexer | Yes (native) | Basic (layouts) |
| Extensions | Lua scripts | Kittens (Python) |
| Performance | Fast (Rust) | Fast (C + Python) |
| Windows Support | Yes | No |
| Keyboard Protocol | Standard | Enhanced (Kitty protocol) |
| SSH Integration | Multiplexed SSH | Kitty SSH kitten |
The Verdict
Use WezTerm if: You want Lua-powered dynamic configuration, a built-in multiplexer to replace tmux, or need Windows support.
Use Kitty if: You want inline image display via the Kitty graphics protocol, prefer a simpler config format, or use tools that leverage Kitty's keyboard protocol.
Consider: Both support the Kitty graphics protocol now. The choice often comes down to multiplexer (WezTerm) vs ecosystem/protocol innovation (Kitty).
WezTerm's Lua configuration system is more flexible than Kitty's config format, the built-in multiplexer eliminates the need for tmux, and cross-platform support is better. Kitty's graphics protocol is excellent for image-heavy workflows, but WezTerm is the more complete package.
Related Comparisons
Disagree? nice@nicepick.dev