The Modern Terminal Stack — 2026 Edition

Ghostty + Fresh Shell Setup

Drop Oh My Zsh. Keep every feature. Start in 120ms instead of 1.2s.
Shell Startup Time
Old Stack
1.2s
iTerm2 + Oh My Zsh
~400ms terminal launch + ~800ms shell init
Eager plugin loading, Python-based tools
New Stack
120ms
Ghostty + Zinit + Starship
~50ms terminal launch + ~70ms shell init
Deferred plugins, Rust-based tools, GPU rendering
Stack Architecture
Terminal
Ghostty
Shell Integration
|
Prompt
Starship
|
Plugins
Zinit
autosuggestions
syntax-highlight
fzf-tab
|
CLI Tools
zoxide
Atuin
fzf
eza
bat
|
Shell
Zsh
macOS built-in
The Core Stack — Every Tool and What It Replaces
Terminal
Ghostty
GPU-accelerated, native macOS feel, ~4GB scrollback, shell integration built-in
Zig
Replaces iTerm2
Prompt
Starship
Cross-shell prompt. Evaluates git status, node version, etc. in parallel. Config-driven TOML.
Rust
Replaces Powerlevel10k
Plugin Mgr
Zinit
Turbo mode defers plugin loading until after first prompt. 80% faster shell startup.
Zsh
Replaces Oh My Zsh
Navigation
zoxide
Frecency-based directory jumper. Learns your habits. Just type z project and go.
Rust
Replaces z / autojump
History
Atuin
SQLite-backed shell history. Full-text search, per-directory context, duration tracking. Optional encrypted sync.
Rust
Replaces Ctrl+R / history
Fuzzy Finder
fzf + fzf-tab
Fuzzy finder for everything. fzf-tab replaces Zsh's default tab completion with interactive fuzzy matching.
Go
Replaces Zsh default completion
ls
eza
Modern ls replacement with git integration, tree view, icons, and color-coded output.
Rust
Replaces ls / exa
cat
bat
Cat with syntax highlighting, line numbers, git diff integration, and pager support.
Rust
Replaces cat / less
Optional Power Tools
ripgrep
Blazing fast recursive regex search. Respects .gitignore, supports PCRE2. The grep replacement everyone uses.
61.7K
Updated Feb 2026
Rust
fd
Fast, user-friendly alternative to find. Regex by default, respects .gitignore, colorized output, smart case.
42.3K
Updated Mar 2026
Rust
LazyGit
Full-featured terminal UI for git. Staging hunks, interactive rebase, cherry-pick, merge conflict resolution — all keyboard-driven.
75.3K
Updated Mar 2026
Go
Neovim
Hyperextensible Vim-based text editor. Lua scripting, LSP built-in, tree-sitter, async plugins. The modern terminal editor.
97.8K
Updated Mar 2026
Vim Script / Lua
Glow
Render Markdown beautifully in the terminal. Supports themes, paging, and stash for offline reading. By Charm.
24.1K
Updated Mar 2026
Go
btop
Beautiful TUI resource monitor. CPU, memory, disks, network with graphs. Replaces htop/top with a polished interface.
31.3K
Updated Mar 2026
C++
Yazi
Blazing fast terminal file manager. Async I/O, image preview (Kitty/Sixel), bulk rename, plugin system.
35.7K
Updated Mar 2026
Rust
tldr
Simplified, practical man pages with real-world examples. Community-driven. No more parsing 500-line man entries.
61.9K
Updated Mar 2026
Markdown
Taproom
Interactive TUI for Homebrew. Browse, search, install/remove formulae and casks with real-time results and dependency visualization.
562
Updated Jan 2026
Go
GitHub stars & activity as of March 2026
1 — Ghostty
Ghostty
Zig
GPU-accelerated terminal by Mitchell Hashimoto
Adds
  • GPU rendering via Metal on macOS
  • Quick Terminal — global drop-down hotkey
  • Shell integration — prompt jump, smart close, cwd tracking
  • Kitty image protocol — inline images in terminal
  • Native macOS tabs — real OS-level tab bar
Improves
  • Startup: <50ms vs ~400ms
  • Memory: ~8 MB/tab vs ~45 MB
  • Rendering: 2-3x throughput
  • Config: plain text, git-friendly
  • Font rendering: native macOS text engine
Retires
  • iTerm2 — slow, memory-heavy, Obj-C legacy
  • GUI preferences — text config only (a feature, not a loss)
  • Native broadcast — use tmux instead (more powerful)

Install & Configure

Terminal
brew install --cask ghostty # Install Nerd Font for icons across all tools brew install --cask font-jetbrains-mono-nerd-font
~/.config/ghostty/config
# ── Shell (login shell ensures macOS PATH is set) ── command = /bin/zsh --login # ── Font ── font-family = JetBrainsMono Nerd Font font-size = 14 font-thicken = true # ── Window ── window-padding-x = 12 window-padding-y = 8 macos-titlebar-style = tabs # ── Theme ── theme = dark:Catppuccin Mocha,light:Catppuccin Latte background-opacity = 0.95 # ── Scrollback (max: ~4GB = ~40M lines) ── scrollback-limit = 4294967295 # ── Shell integration ── shell-integration = zsh shell-integration-features = cursor,sudo,title # ── Cursor ── cursor-style = block cursor-style-blink = false # ── Quick Terminal ── keybind = global:ctrl+grave_accent=toggle_quick_terminal quick-terminal-position = top quick-terminal-screen = main quick-terminal-animation-duration = 0.15

Browse themes: ghostty +list-themes  |  Browse fonts: ghostty +list-fonts

2 — Zinit
Zinit
Zsh
Lightweight plugin manager with turbo deferred loading
Adds
  • Turbo mode — plugins load after first prompt, not before
  • Cherry-pick — load individual OMZ plugins without the framework
  • Parallel installs — plugins download concurrently
Improves
  • Shell startup: 80% faster than Oh My Zsh
  • Plugin control: load, unload, update individually
  • Reproducibility: declarative plugin list in .zshrc
Retires
  • Oh My Zsh — monolithic framework, eager loading, ~800ms overhead
  • ~/.oh-my-zsh/ directory — no longer needed

Install

Terminal
bash -c "$(curl --fail --show-error --silent --location \ https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"

Creates ~/.local/share/zinit/. Configuration goes directly in your .zshrc (see step 8 below).

3 — Starship
Starship
Rust
Cross-shell prompt with parallel module evaluation
Adds
  • Parallel eval — git status, node version, python env all resolve concurrently
  • Cross-shell — same config works in Zsh, Bash, Fish, Nushell
  • 200+ built-in presets — including Nerd Font symbols
Improves
  • Speed: ~5ms vs P10k's ~50ms prompt render
  • Config: single TOML file vs P10k's wizard + zshrc bloat
  • Portability: works across any shell, not Zsh-only
Retires
  • Powerlevel10k — Zsh-only, complex wizard config
  • OMZ themes — robbyrussell, agnoster, etc.

Install & Configure

Terminal
brew install starship # Start from the Nerd Font preset starship preset nerd-font-symbols -o ~/.config/starship.toml

The preset generates a full config with all Nerd Font symbols. Don't append sections that already exist — TOML doesn't allow duplicate keys. Instead, find and edit the existing sections in the generated file:

~/.config/starship.toml — merge these into existing sections
# Add this at the TOP of the file (before any [section]) format = """ $directory\ $git_branch\ $git_status\ $nodejs\ $python\ $docker_context\ $cmd_duration\ $line_break\ $character""" # Find the existing [character] section and edit it: [character] success_symbol = "[>](bold green)" error_symbol = "[>](bold red)" # Find the existing [directory] section and add/change these keys: [directory] truncation_length = 3 style = "bold cyan" # keep the existing read_only = " 󰌾" from the preset # Find [git_branch] and edit: [git_branch] format = "[$symbol$branch]($style) " style = "bold purple" # Find [git_status] and edit: [git_status] format = "[$all_status$ahead_behind]($style) " # Find [cmd_duration] and edit (or add if not present): [cmd_duration] min_time = 2_000 format = "took [$duration](bold yellow) " # Find [nodejs] and edit: [nodejs] format = "[$symbol($version)]($style) "

⚠ TOML does not allow duplicate section headers. Always edit existing [section] blocks in place — never append a second copy.

4 — zoxide
zoxide
Rust
Frecency-based directory jumper
Adds
  • Smart cd — type z proj to jump to ~/Projects
  • Frecency scoring — ranks dirs by frequency + recency
  • Interactive pickerzi opens fzf for directory search
Improves
  • Speed: ~5ms init vs autojump's 370ms-2s
  • Cross-shell: works in Zsh, Bash, Fish, Nushell, PowerShell
  • Can replace cd entirely with --cmd cd
Retires
  • autojump — Python-based, slow init, unmaintained
  • z.sh / z.lua — slower, fewer features
  • OMZ jump plugin

Install

Terminal
brew install zoxide

Initialized in .zshrc with eval "$(zoxide init zsh --cmd cd)" — this replaces cd entirely so your muscle memory doesn't change.

5 — Atuin
Atuin
Rust
SQLite-backed shell history with full-text search
Adds
  • Full-text search through every command ever run
  • Context tracking — directory, duration, exit code per command
  • Multi-line support — search for long piped commands
  • Stats & analytics on your shell usage
Improves
  • Ctrl+R: interactive TUI vs bare reverse search
  • Persistence: SQLite vs flat .zsh_history file
  • Dedup: intelligent, context-aware deduplication
Retires
  • Zsh history search — basic, line-based, no context
  • McFly — no multiline support
  • OMZ history plugin

Install & Configure

Terminal
brew install atuin # Import your existing shell history atuin import auto
~/.config/atuin/config.toml
# Keep everything local (no cloud sync) sync_address = "" auto_sync = false # Search settings search_mode = "fuzzy" filter_mode = "global" style = "compact" show_preview = true show_help = false
6 — fzf + fzf-tab
fzf + fzf-tab
Go
Fuzzy finder for files, history, and tab completion
Adds
  • Fuzzy tab completion — type git checkout + Tab for interactive branch picker
  • Ctrl+T — fuzzy file search from anywhere
  • Alt+C — fuzzy cd into any subdirectory
Improves
  • Tab completion: interactive fuzzy vs static list
  • File search: instant fuzzy vs exact glob patterns
  • Discoverability: see options as you type
Retires
  • Zsh default completion — flat list, no fuzzy matching
  • OMZ completion plugins

Install

Terminal
brew install fzf

fzf-tab is loaded as a Zinit plugin in your .zshrc (no separate install). It must load after compinit but before autosuggestions.

7 — eza + bat
eza + bat
Rust
Modern replacements for ls and cat
Adds
  • eza: git status per file, Nerd Font icons, tree view, color-coded types
  • bat: syntax highlighting, line numbers, git diff markers, built-in pager
Improves
  • Readability: instantly parse directory contents and file content visually
  • Git awareness: see modified/staged/untracked at a glance
Retires
  • ls — no icons, no git, no color coding
  • cat — no syntax highlighting, no line numbers
  • exa — unmaintained predecessor of eza

Install

Terminal
brew install eza bat

Aliased in .zshrc: alias ls="eza --icons --group-directories-first"

8 — Tie It All Together

Back up your old config, then replace .zshrc

Terminal
cp ~/.zshrc ~/.zshrc.bak.omz
~/.zshrc
# ╔══════════════════════════════════════════════╗ # ║ Modern Zsh Config — No Oh My Zsh ║ # ║ Ghostty + Zinit + Starship + Atuin ║ # ╚══════════════════════════════════════════════╝ # ── PATH (add tools not in macOS default PATH) ── export PATH="$HOME/.local/bin:$PATH" # ── Zinit ── ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git" source "${ZINIT_HOME}/zinit.zsh" # ── Core plugins (loaded immediately) ── zinit light zsh-users/zsh-completions # ── Turbo-loaded plugins (deferred — after prompt) ── zinit wait lucid for \ atinit"zicompinit; zicdreplay" \ zdharma-continuum/fast-syntax-highlighting \ atload"_zsh_autosuggest_start" \ zsh-users/zsh-autosuggestions \ Aloxaf/fzf-tab # ── Completion system ── autoload -Uz compinit compinit -C # ── History ── HISTFILE="$HOME/.zsh_history" HISTSIZE=50000 SAVEHIST=50000 setopt HIST_IGNORE_ALL_DUPS SHARE_HISTORY HIST_REDUCE_BLANKS # ── Key bindings ── bindkey '^[[A' history-search-backward bindkey '^[[B' history-search-forward # ── Aliases ── alias ls="eza --icons --group-directories-first" alias ll="eza -la --icons --group-directories-first --git" alias lt="eza --tree --level=2 --icons" alias cat="bat --style=auto" # ── Tool init ── eval "$(starship init zsh)" eval "$(zoxide init zsh --cmd cd)" eval "$(atuin init zsh)" eval "$(fzf --zsh)"
9 — Verify Everything Works

Open a New Ghostty Window and Check

  • Prompt renders with git branch, directory, icons — Starship is working
  • Type a command slowly — grey autosuggestion appears (zsh-autosuggestions)
  • Type an invalid command — turns red (fast-syntax-highlighting)
  • Press Ctrl+R — Atuin search UI appears with full history
  • Type cd ~/Projects then later z proj — zoxide jumps back
  • Type ls — shows icons and git status (eza)
  • Type cat ~/.zshrc — syntax highlighted output (bat)
  • Tab-complete git checkout — interactive fuzzy branch picker (fzf-tab)
  • Press Ctrl+` — Quick Terminal drops down from top
  • Measure startup: time zsh -i -c exit — should be under 150ms
Optional — ripgrep (rg)
ripgrep
Rust
61.7K stars — the fastest recursive code search
Adds
  • .gitignore awareness — skips ignored files automatically
  • PCRE2 lookahead — complex regex patterns
  • Compressed file search — search inside .gz, .xz, .lz4
Improves
  • Speed: 5-10x faster than grep on large repos
  • Output: colorized, grouped by file, line numbers
  • Unicode: full support by default
Retires
  • grep -r — slow, no .gitignore, no color
  • ack — Perl-based, slower
  • ag (Silver Searcher) — slower, less maintained

Install

Terminal
brew install ripgrep # Usage: search for "TODO" in current dir rg "TODO" # Search only TypeScript files rg "TODO" -t ts # Search with context lines rg "TODO" -C 3
Optional — fd
fd
Rust
42.3K stars — a sane, fast find replacement
Adds
  • Regex by default — no flags needed for pattern matching
  • Smart case — case-insensitive unless you use uppercase
  • Parallel executionfd -x runs commands in parallel
Improves
  • Speed: 5x faster than find on large trees
  • UX: colorized output, intuitive syntax
  • .gitignore: respected automatically
Retires
  • find — cryptic flags, slow, no .gitignore

Install

Terminal
brew install fd # Find all .ts files fd -e ts # Find files matching pattern fd "controller" src/ # Find and delete all node_modules fd -t d "node_modules" -x rm -rf
Optional — LazyGit
LazyGit
Go
75.3K stars — the most popular git TUI
Adds
  • Visual staging — stage individual hunks/lines with keyboard
  • Interactive rebase — reorder, squash, edit commits visually
  • Merge conflict UI — side-by-side diff resolution
  • Stash management — browse, apply, drop with preview
Improves
  • Speed: faster than any GUI git client
  • Discoverability: see all branches, remotes, stashes at once
  • Workflow: complex git ops become 2-3 keystrokes
Retires
  • git CLI for complex ops — rebase, cherry-pick, conflict resolution
  • GitKraken / Fork / Tower — for terminal-first workflows

Install

Terminal
brew install lazygit # Launch in any git repo lazygit # Recommended: add alias alias lg="lazygit"
Optional — Glow + Neovim
Glow + Neovim
Go + Lua
97.8K + 24.1K stars — Markdown rendering & terminal editor
Adds
  • Glow: render Markdown with themes, paging, and stash right in the terminal
  • Neovim: Lua plugin system, built-in LSP, tree-sitter syntax, async architecture
  • Kickstart.nvim — sane starting config for new users
Improves
  • Markdown: beautiful rendering vs raw text
  • Editor speed: native async vs Vim's single-threaded model
  • Extensibility: Lua is far more ergonomic than VimScript
Retires
  • cat README.md — unformatted raw Markdown
  • Vim — if you want modern LSP and plugins

Install

Terminal
brew install glow neovim # Render a README glow README.md # Browse all markdown files in a directory glow docs/ # Kickstart Neovim (recommended starting config) git clone https://github.com/nvim-lua/kickstart.nvim.git \ "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
Optional — btop
btop
C++
31.3K stars — beautiful system resource monitor
Adds
  • Rich graphs — CPU, memory, disk I/O, network with live charts
  • Per-core CPU view with temperature sensors
  • Process tree with filtering, sorting, and kill support
Improves
  • Visual clarity: graphs vs raw numbers
  • Themes: 20+ built-in color schemes
  • Mouse support: click to sort, select processes
Retires
  • htop — functional but visually dated
  • top — bare-bones, hard to read
  • Activity Monitor — for terminal-first workflows

Install

Terminal
brew install btop # Launch btop
Optional — Yazi
Yazi
Rust
35.7K stars — async terminal file manager with image previews
Adds
  • Image previews in Ghostty via Kitty protocol
  • Async I/O — never blocks on large dirs
  • Bulk rename with your editor
  • Plugin system — Lua-based extensions
Improves
  • Speed: async rendering, instant navigation
  • File preview: syntax-highlighted code, images, PDFs
  • Vi-style keys: hjkl navigation, familiar motions
Retires
  • ranger — Python, slow on large dirs, no image in modern terms
  • nnn — fast but minimal UX
  • Finder — for terminal-first file ops

Install

Terminal
brew install yazi ffmpegthumbnailer poppler # Launch (press q to quit, ? for help) yazi

Install ffmpegthumbnailer and poppler for video thumbnails and PDF previews.

Optional — tldr
tldr
Community
61.9K stars — practical examples instead of man pages
Adds
  • Real examples — actual commands you'd copy-paste
  • Community-maintained — 50K+ pages covering most CLI tools
  • Offline cache — works without internet
Improves
  • Readability: 5 examples vs 500-line man page
  • Discovery: learn new flags you didn't know existed
Retires
  • man pages — for quick reference (keep man for deep dives)
  • Googling "how to tar" every time

Install

Terminal
brew install tldr # Update the page cache tldr --update # Usage examples tldr tar tldr docker compose tldr git rebase
Optional — Taproom
Taproom
Go
562 stars — interactive Homebrew TUI with dependency diagrams
Adds
  • Real-time search — browse formulae and casks interactively
  • Dependency visualization — see package dependency chains as diagrams
  • Inline details — version, size, popularity without separate commands
Improves
  • Discoverability: browse vs memorize brew commands
  • Speed: one UI vs brew search + brew info + brew deps
Retires
  • brew search + brew info — multi-step CLI workflow
  • formulae.brew.sh — for quick package lookups

Install

Terminal
brew install taproom # Launch taproom
Bonus — Alt+Space Global Hotkey to Focus Ghostty
Alt+Space Focus
macOS
One hotkey to bring Ghostty to front from anywhere — no new windows
Adds
  • Global hotkey — Alt+Space focuses your existing Ghostty window from any app
  • No duplicates — brings to front, doesn't open a new window
  • Auto-launch — opens Ghostty if it's not running
Improves
  • Workflow: instant terminal access from any context
  • Muscle memory: same shortcut as your old iTerm2 hotkey
Retires
  • iTerm2 Hotkey Window — no longer needed
  • Cmd+Tab cycling — for reaching your terminal

Setup — macOS Automator + Keyboard Shortcut (free, no extra tools)

Step 1: Open Automator.app (search in Spotlight)

Step 2: Click New Document → choose Quick Action

Step 3: At the top, set "Workflow receives" to no input in any application

Step 4: From the left sidebar, drag Run Shell Script into the workflow area. Set the script to:

Automator
open -a "Ghostty"

Step 5: Save as "Toggle Ghostty" (Cmd+S)

Step 6: Open System Settings → Keyboard → Keyboard Shortcuts → Services. Expand the General subsection — find "Toggle Ghostty" there. Double-click the shortcut area and press Alt+Space.

⚠ If it doesn't fire immediately, try toggling the checkbox off and on, or log out and back in. macOS sometimes needs a moment to register new Services shortcuts.

Rollback Plan
!

If Anything Goes Wrong

Terminal
cp ~/.zshrc.bak.omz ~/.zshrc # Relaunch iTerm2 — everything is back instantly

Nothing was uninstalled. Oh My Zsh is still at ~/.oh-my-zsh/, iTerm2 is still in Applications. Run both setups in parallel while you decide.

Research — tradeit.gg — March 2026