iTranslated by AI

The content below is an AI-generated translation. This is an experimental feature, and may contain errors. View original article
👻

Replicating Warp's Features in Ghostty

に公開

"Warp, it's convenient, but isn't it heavy?"

Memory usage over 1GB. Laggy tab switching. AI completion latency.

——I know. I know, but I can't let go of that completion experience.

You start typing a command, and candidates appear. It suggests from your history. Press Tab, and a list of options pops up.

Thinking "I can't live without this," I kept using Warp for a long time.

Introduction

The other day, while researching how to make my terminal lighter, I realized something.

Warp's command completion, history suggestions, syntax highlighting—most of those features I thought I "couldn't leave because they're so convenient" can be reproduced with zsh plugins.

Moreover, it's all local, so network latency is zero.

"Wait, then why was I putting up with the weight of Warp...?"

In this article, I'll talk about switching to a lightweight terminal called Ghostty while reproducing the Warp experience using zsh.

Why I couldn't let go of Warp

Don't get me wrong, Warp itself is a great product.

Especially in terms of "terminal beginners being able to use it comfortably right away," it's unparalleled. The GUI-like operation, block-based output management, AI completion—everything is well-made.

But after using it for six months, I started noticing things like this:

  • It takes 2–3 seconds to start. Even longer on a cold MacBook.
  • Memory usage can exceed 1GB. You feel that Electron-based heaviness.
  • Network latency affects the response of AI completions.
  • You get almost no benefit from Warp when using SSH or inside Docker containers.

"I know it's heavy. But the completion is so convenient..."

This "because it's convenient" was the true nature of my dependence on Warp.

Public Reaction—Two Factions

When the topic of terminals comes up, it generally splits into two camps.

The "Warp is the best" faction.

Even if it's a bit heavy, better UX is preferable. It's right to invest in the developer experience. Returning to a bare terminal in the age of AI completion is regression.

I get it. Developer experience is important.

The "Alacritty / kitty Fundamentalist" faction.

Lightness is justice for a terminal. No unnecessary features needed. You can do everything with tmux + vim. Warp is just a browser wearing the mask of a terminal.

I get this too. The minimalist philosophy is beautiful.

But honestly, neither really clicked for me.

I disliked Warp's heaviness, but I wasn't ready to go back to a bare terminal and work without completions. I was stuck in an awkward middle ground between "comfort" and "lightness."

The Third Path—Ghostty + zsh Completion

The turning point was breaking down exactly what made Warp "convenient."

I listed the features I thought I couldn't live without.

Warp Feature Reality
Suggestions appear while typing → zsh-autosuggestions
Tab displays a list of completion candidates → zsh-completions + compinit
Commands are color-coded → zsh-syntax-highlighting
Incremental history search → fzf

...They were all zsh plugins.

Warp had packaged these as "product features." That's why I had always assumed they were "Warp features." But in reality, it was just a UI layered on top of mechanisms that zsh has had for a long time.

In other words, you can get the same experience with a lightweight terminal + zsh plugins.

For the terminal, I chose Ghostty. It's a GPU-accelerated terminal written in Zig by Mitchell Hashimoto (co-founder of HashiCorp).

Setup

# Installing Ghostty
brew install --cask ghostty

# Installing zsh completion plugins
brew install zsh-autosuggestions zsh-completions zsh-syntax-highlighting fzf

Add the following to your ~/.zshrc.

# ===== zsh completion settings =====
if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
  autoload -Uz compinit
  compinit
fi

# Make the completion menu selectable with arrow keys
zstyle ':completion:*' menu select
# Case-insensitive
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# Load plugins
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source <(fzf --zsh)

Apply the settings.

rm -f ~/.zcompdump && source ~/.zshrc

Operations you can now perform

Operation Function Equivalent in Warp
Input → key Accept inline completion from history AI Completion (history-based)
Tab → Arrow keys Select completion candidates from menu Command completion
Ctrl + R Fuzzy search history History search
Ctrl + T Fuzzy search under current directory
Alt + C Fuzzy search directory and cd

Results

Item Warp Ghostty + zsh completion
Startup Speed 2–3 seconds Instant
Memory Consumption Over 1GB Under 100MB
Completion Speed Network dependent Fully local
Behavior via SSH No benefit Same experience
Customizability Restricted Free

Note: Customization

You can add the completion system as well as history to the zsh-autosuggestions source.

ZSH_AUTOSUGGEST_STRATEGY=(history completion)

Ghostty settings are written in ~/.config/ghostty/config.

font-family = "JetBrains Mono"
font-size = 14
theme = "Catppuccin Mocha"
macos-option-as-alt = true

Realization—It Wasn't the Terminal That Was Heavy

It's been a week since I switched. The experience has completely changed.

Startup is fast. Completion is fast. The same operational feel even over SSH. It doesn't hog memory.

But the biggest realization wasn't about speed.

I had been confusing "terminal features" with "shell features" all along.

Warp wasn't convenient just because it was Warp. It was because the zsh ecosystem is excellent. Warp was simply packaging it neatly and presenting it as a GUI.

Once you realize this, your criteria for choosing a terminal change.

What you want from a terminal doesn't have to be "convenience," but rather "speed and stability." Convenience can be built at the shell layer. By separating these layers, you can carry the same experience over to SSH sessions or inside Docker containers.

Conclusion

If Warp feels heavy, you don't necessarily need to discard it. Just break down "what made it convenient."

The answer is mostly found within zsh.

Switch to a lightweight terminal and carry your convenience with your shell. Just by shifting to this mindset, your terminal experience will change significantly.

Give Ghostty + zsh completion a try for your weekend setup.

References

Discussion