Terminal GPU battery cost on macOS
- title
- Terminal GPU battery cost on macOS
- type
- summary
- summary
- Why GPU-accelerated terminals (Ghostty, Alacritty, Kitty) drain MacBook battery, and what to do about it
- parent
- gpu-accelerated-terminal
- tags
- macos, terminal, battery, claude-code
- created
- 2026-04-29
- updated
- 2026-04-29
Fernando, working at a Zaragoza cafรฉ with a MacBook Air M3, opened Activity Monitor after his battery dropped to 15% in two hours of Claude Code use. The Energy tab showed Ghostty at 3,600 accumulated units over the previous 12 hours. Brave was at 125. Zoom with video, 99. The Claude desktop app, 46. A terminal โ an application whose only job is showing letters โ had burned 30ร more energy than a web browser.
Why GPU terminals are expensive
GPU-accelerated terminals like Ghostty, Alacritty, and Kitty advertise smoother rendering and sharper fonts. The cost is that every character that appears on screen runs through Metal, shaders, and frame composition. With Claude Code constantly streaming output โ spinners, log lines, tool results โ the GPU pipeline never stops working. The render cost per git status exceeds the cost of a video call.
The second hit is App Nap. macOS pauses background processes that look idle, but a window with a moving spinner doesn't look idle. The terminal stays awake even when the user isn't looking at it.
Three options, in order of effort
Terminal.app. macOS's stock terminal does CPU rendering, naps correctly, and runs Claude Code with no observable difference. Plain and old, no ligatures, no animations. It works.
iTerm2 with a "Battery" profile. iTerm2 still exposes a GPU rendering toggle. Duplicate the existing profile, name it Battery, and uncheck Terminal โ GPU Rendering. Switch manually via Profiles โ Battery, or auto-switch on battery via shell init:
# ~/.zshrc
if [[ $(pmset -g batt | grep -c "Battery Power") -gt 0 ]]; then
echo -e "\033]50;SetProfile=Battery\a"
fi
The escape sequence \033]50;SetProfile=Battery\a is iTerm2's profile-switch protocol โ every new shell evaluates it.
Ghostty. No GPU toggle exists. The only mitigations are reducing what the GPU has to redraw: cursor-style-blink = false, mouse-hide-while-typing = true, minimizing unused windows. Fernando's verdict: Ghostty is built for performance, not efficiency, and isn't the right tool if you regularly work on battery.
The 1978 framing
A VT100 with its CRT pulled 30W. A 2026 MacBook Air, designed around energy efficiency, exceeds that to display the same text. The point isn't nostalgia โ it's that "modern" and "optimized" can mean optimized for a metric (input-to-pixel latency in milliseconds) that costs a lot more on the metrics that matter on battery.
Relevance to Claude Code
This is a Claude Code workflow problem more than a generic terminal problem. Editor sessions don't trigger the issue because output is bounded. Agent sessions stream characters indefinitely, so the GPU pipeline runs indefinitely. Picking a CPU-rendered terminal for agent work is the cheap fix.
Cited from your-terminal-is-burning-battery-like-it-s-mining-bitcoin.