Starship and Oh My Posh are the two dominant cross-shell prompt engines of 2025–2026, both written in compiled languages (Rust and Go respectively) that render beautifully styled, information-rich prompts across bash, zsh, fish, PowerShell, Nushell, and more from a single configuration file. They solve the problem of maintaining separate prompt setups per shell and per OS — write one config, carry it everywhere. The key insight practitioners need upfront: both tools require a Nerd Font installed in the terminal emulator to render glyphs correctly, and the primary performance lever for both is disabling or limiting modules you don't need rather than changing the renderer.
What This Cheat Sheet Covers
This topic spans 16 focused tables and 189 indexed concepts, 97 flashcards. Below is a complete table-by-table outline of this topic, spanning foundational concepts through advanced details.
A jump-to index of every table row in this cheat sheet.
An interactive map of every table and concept in this topic.
Table 1: Starship Installation by Shell and OS
Installing Starship takes two steps: getting the binary onto the system, then adding a one-line init call to the shell's startup file. The init command differs slightly per shell; getting it into the right file is the most common stumbling block.
| Command | Example | Description | |
|---|---|---|---|
curl -sS | sh | • Universal install script • places the binary in /usr/local/bin. Also available via brew install starship. | ||
winget install --id Starship.Starshipscoop install starshipchoco install starship | • Three package-manager options on Windows • winget is the most widely available | ||
cargo install starship --locked | • Cross-platform installation from source via Rust's package registry • requires Rust toolchain | ||
eval "$(starship init bash)" | • Add to ~/.bashrc (or ~/.bash_profile)• runs the init at each new bash session | ||
eval "$(starship init zsh)" | Add as last line of ~/.zshrc. | ||
starship init fish | source | • Add to ~/.config/fish/config.fish• fish uses pipe-to-source instead of eval | ||
Invoke-Expression (&starship init powershell) | • Add to $PROFILE• run notepad $PROFILE to open the file | ||
mkdir ($nu.data-dir | path join "vendor/autoload")starship init nu | save -f ($nu.data-dir | path join "vendor/autoload/starship.nu") | • Two-line setup • requires Nushell v0.96+. | ||
load(io.popen('starship init cmd'):read("*a"))() | • Place in %LocalAppData%\clink\starship.lua• requires Clink v1.2.30+. | ||
export STARSHIP_CONFIG=~/dotfiles/starship.toml | • Overrides the default config path ~/.config/starship.toml• useful for sharing dotfiles across machines | ||
export STARSHIP_CACHE=~/.starship/cache | • Overrides the log/cache directory • set in $PROFILE on PowerShell as $ENV:STARSHIP_CACHE. |