Skip to content

Terminal

The terminal is a core part of the local development environment for running Git commands, package managers, local servers, build tools, and AI coding tools such as Codex CLI. On macOS, the team recommends using a dedicated terminal emulator with strong tab, pane, and profile support rather than relying only on the default Terminal app.

For most engineers, either Ghostty or iTerm2 is a good choice, paired with zsh and Oh My Zsh for shell configuration and quality-of-life improvements.

Homebrew is a popular package manager for macOS. To install Homebrew, run the following command:

Terminal window
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

After installation, add Homebrew to your shell environment in ~/.zprofile. This keeps shell bootstrap in your login shell config and leaves ~/.zshrc for interactive shell customization.

Terminal window
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

To verify that Homebrew is available, run:

Terminal window
brew --version
ApplicationRecommended WhenNotes
GhosttyYou want a modern macOS-native terminal with fast rendering and clean defaultsGood default choice for most developers
iTerm2You want a mature feature set with extensive customization and session managementGood choice for power users and long-established workflows

Ghostty is a strong default option for day-to-day macOS development. It has a native macOS interface, GPU-accelerated rendering, and sensible defaults without requiring much setup.

Install with Homebrew:

Terminal window
brew install --cask ghostty

You can also install Ghostty by downloading the macOS binary from the official Ghostty download page if you prefer not to use Homebrew.

Choose Ghostty if you want:

  • A fast, minimal terminal experience
  • Native macOS look and feel
  • Simple configuration with modern defaults

iTerm2 remains a strong option for engineers who want deep configurability, advanced window and profile behavior, or existing workflows built around it.

Install with Homebrew:

Terminal window
brew install --cask iterm2

You can also install iTerm2 by downloading the macOS binary from the official iTerm2 downloads page if you prefer not to use Homebrew.

Choose iTerm2 if you want:

  • Extensive profile customization
  • Advanced pane, tab, and session workflows
  • A widely adopted terminal with a long feature history

After installing your preferred terminal, use the following baseline setup:

  1. Install Homebrew if it is not already available.
  2. Use zsh, which is the default shell on modern macOS versions.
  3. Keep your interactive shell customization in ~/.zshrc.
  4. Install Oh My Zsh to manage shell plugins, themes, and defaults more easily.
  5. Install language runtimes and CLIs with Homebrew or the tool’s official installer as needed.

Oh My Zsh is the recommended framework for managing your zsh configuration on macOS. It provides a cleaner starting point for prompt customization, Git integration, plugins, and general shell usability.

Install with official installer:

Terminal window
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

After installation, use ~/.zshrc as the primary place for shell customization.

Keep your plugin list minimal at first, and only add plugins for tools you actually use.

A good way to structure your .zshrc file is in this order:

  1. Core shell and framework settings
  2. Plugin and theme declarations
  3. typeset -U path PATH fpath to keep PATH-related arrays unique
  4. Completion search paths and shell options that must be defined before Oh My Zsh loads
  5. source "$ZSH/oh-my-zsh.sh"
  6. Optional tool-specific PATH additions and runtime hooks

A practical starting point is:

.zshrc
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="gnzh"
plugins=(git)
# Keep PATH entries unique
typeset -U path PATH fpath
source "$ZSH/oh-my-zsh.sh"

Two plugins are especially useful for day-to-day terminal work:

Install both into your Oh My Zsh custom plugins directory:

Terminal window
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Then, update ~/.zshrc:

Terminal window
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Keep zsh-syntax-highlighting at the end of the plugin list so it loads last.

If you want a more informative prompt, Spaceship Prompt is a good optional theme for Oh My Zsh. It adds contextual prompt segments for Git status, Node.js versions, package managers, containers, and other common development tools.

Install Spaceship into your Oh My Zsh custom themes directory:

Terminal window
git clone https://github.com/spaceship-prompt/spaceship-prompt.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/spaceship-prompt" --depth=1
ln -s "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/spaceship-prompt/spaceship.zsh-theme" "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/spaceship.zsh-theme"

Then, set the theme in ~/.zshrc:

Terminal window
ZSH_THEME="spaceship"

Spaceship works best with a Nerd Font-compatible terminal font.

Use these settings as a practical starting point:

  • Choose a readable monospace font such as JetBrains Mono or Monaspace
  • Use a font size that stays readable during pairing, demos, and screen sharing
  • Enable tabs and split panes so you can keep servers, shells, and editors separated
  • Keep scrollback large enough for build logs and test output
  • Prefer a consistent theme and prompt setup across projects

If your prompt or tooling depends on glyphs or icons, use a Nerd Font-compatible font.

A practical local setup for most engineers is:

  • Terminal app: Ghostty or iTerm2
  • Shell: zsh
  • Shell framework: Oh My Zsh
  • Optional theme: Spaceship
  • Shell plugins: git, zsh-autosuggestions, and zsh-syntax-highlighting
  • Editor: VS Code
  • Source control: GitHub

This gives you a consistent environment for local development, Git workflows, and command-line tools across team projects.

  • Apple’s built-in Terminal app is acceptable for light use, but it is not the recommended default for daily engineering workflows.
  • Keep terminal-specific settings in the terminal application and shell-specific behavior in ~/.zshrc.
  • If you manage dotfiles in a repository, keep terminal and shell configuration there so new machines are easier to bootstrap.