Skip to main content
15.03.2026

Tide vs Starship: Choosing the Right Shell Prompt in 2026

Tide vs Starship

Quick Reference:

# Install Starship (any shell)
curl -sS https://starship.rs/install.sh | sh
echo 'eval "$(starship init bash)"' >> ~/.bashrc

# Install Tide (Fish only)
fisher install IlanCosman/tide@v6
tide configure

Your shell prompt is something you see thousands of times a day. The right prompt surfaces useful context without slowing you down. Tide and Starship are two popular options, but they solve the problem differently.

Overview

Starship is a cross-shell prompt written in Rust. It works with Bash, Zsh, Fish, PowerShell, and more. Configuration is done through a single TOML file.

Tide is a prompt specifically built for Fish shell. It leverages Fish's async capabilities and integrates deeply with Fish's features.

Quick Comparison

Feature Starship Tide
Shells supported Bash, Zsh, Fish, PowerShell, Ion, Elvish, Tcsh, Nushell, Xonsh, Cmd Fish only
Language Rust Fish script
Config format TOML Interactive wizard
Async prompt Partial Full
Git performance Good Excellent
Custom modules Yes Limited
Transient prompt Yes Yes
Right prompt Yes Yes

Installation

Starship

Works on any shell:

# Install binary
curl -sS https://starship.rs/install.sh | sh

# Or via package manager
brew install starship          # macOS
pacman -S starship             # Arch
cargo install starship         # Rust

# Add to shell config
# Bash
echo 'eval "$(starship init bash)"' >> ~/.bashrc

# Zsh
echo 'eval "$(starship init zsh)"' >> ~/.zshrc

# Fish
echo 'starship init fish | source' >> ~/.config/fish/config.fish

Tide

Fish shell only:

# Install Fisher (Fish plugin manager)
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

# Install Tide
fisher install IlanCosman/tide@v6

# Run interactive configuration
tide configure

Tide's wizard walks you through style choices interactively.

Performance

This is where the differences matter most for heavy terminal users.

Benchmark: Simple Directory

~/projects/myapp (no git)
Prompt Render Time
Tide 2-4ms
Starship 5-10ms

Benchmark: Large Git Repository

~/linux-kernel (git, 1M+ objects)
Prompt Render Time
Tide 8-15ms
Starship 50-200ms

Tide's Fish-native async handling gives it a significant edge in git repositories. The prompt renders immediately and updates git status in the background.

Why Tide is Faster

  1. Native Fish async - Tide uses Fish's event system to update git status without blocking
  2. No subprocess spawning - Pure Fish functions avoid fork overhead
  3. Lazy evaluation - Only computes what's visible

Starship's Async Limitations

Starship supports async for git status, but it's not as seamless:

# starship.toml
[git_status]
disabled = false

# Still slower than Tide in large repos

Configuration

Starship Configuration

Starship uses a single ~/.config/starship.toml:

# Minimal config
format = "$directory$git_branch$git_status$character"

[directory]
truncation_length = 3
truncate_to_repo = true

[git_branch]
format = "[$branch]($style) "
style = "purple"

[git_status]
format = '([$all_status$ahead_behind]($style) )'
style = "red"

[character]
success_symbol = "[❯](green)"
error_symbol = "[❯](red)"

# Kubernetes context
[kubernetes]
disabled = false
format = '[$context(\($namespace\))]($style) '

# AWS profile
[aws]
format = '[$profile]($style) '

Starship has 100+ built-in modules for languages, tools, and cloud providers.

Tide Configuration

Tide uses an interactive wizard:

tide configure

The wizard asks about:

  • Powerline style vs classic
  • Icons (Nerd Font required)
  • Transient prompt
  • Two-line vs one-line

For manual tweaks, Tide uses Fish universal variables:

# Change git icon
set -U tide_git_icon ''

# Customize colors
set -U tide_git_color_branch green

# Add/remove items
set -U tide_left_prompt_items pwd git newline character
set -U tide_right_prompt_items status cmd_duration context

Feature Comparison

Git Integration

Both show branch, status, and ahead/behind counts.

Starship:

[git_status]
ahead = "⇡${count}"
behind = "⇣${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
staged = "+${count}"
modified = "!${count}"

Tide:

# Shows automatically with icons
# Customizable via tide_git_* variables
set -U tide_git_icon 
set -U tide_git_color_staged yellow

Tide's git status is faster but less configurable. Starship offers granular control over every indicator.

Cloud/Kubernetes Context

Starship has native modules:

[kubernetes]
disabled = false
format = '[$context/$namespace]($style) '
contexts = [
  { context_pattern = "prod-*", style = "red bold" }
]

[aws]
format = '[$profile]($style) '

[gcloud]
format = '[$project]($style) '

Tide requires custom functions:

# Add custom item
function _tide_item_k8s
    set -l ctx (kubectl config current-context 2>/dev/null)
    test -n "$ctx" && echo -n "⎈ $ctx"
end
set -U tide_right_prompt_items status cmd_duration k8s

Language Version Display

Starship auto-detects and shows versions:

~/myproject
❯ node v20.11.0 | python 3.11.7 | go 1.22

Configure in TOML:

[nodejs]
format = "[$symbol$version]($style) "
symbol = " "

[python]
format = '[${symbol}${pyenv_prefix}(${version})]($style) '

Tide doesn't include language detection by default. You'd need custom functions.

Transient Prompt

Both support collapsing old prompts to save space.

Starship:

# Enable in shell config
function set_win_title(){
    echo -ne "\033]0; $(basename "$PWD") \007"
}
starship_precmd_user_func="set_win_title"

Tide:

# Enable during configuration or:
set -U tide_prompt_transient_enabled true

When to Choose Starship

Choose Starship if you:

  • Use multiple shells (Bash on servers, Zsh locally, PowerShell on Windows)
  • Want a single config file across machines
  • Need extensive cloud/language modules
  • Prefer TOML-based declarative config
  • Don't mind slightly slower git status

Example use case: SRE who SSHs into various servers (Bash), uses Zsh locally, and occasionally touches Windows machines.

When to Choose Tide

Choose Tide if you:

  • Use Fish shell exclusively
  • Work in large git repositories frequently
  • Want zero-config good defaults
  • Prefer interactive configuration
  • Value prompt speed over configurability

Example use case: Developer who uses Fish everywhere, works on monorepos, and wants the fastest possible prompt.

Hybrid Approach

Some users run Tide locally and Starship on servers:

# ~/.config/fish/config.fish
if set -q SSH_CONNECTION
    starship init fish | source
else
    # Tide loads automatically via Fisher
end

This gives you Tide's speed locally and Starship's consistency on remote machines.

Migration Tips

From Oh-My-Zsh/Powerlevel10k to Starship

# Backup old config
mv ~/.zshrc ~/.zshrc.bak

# Minimal .zshrc
autoload -Uz compinit && compinit
eval "$(starship init zsh)"

From Starship to Tide

# Remove Starship
rm ~/.config/starship.toml
# Remove from config.fish

# Install Tide
fisher install IlanCosman/tide@v6
tide configure

Performance Optimization

Starship

Disable unused modules:

[aws]
disabled = true

[gcloud]
disabled = true

[docker_context]
disabled = true

Use scan_timeout:

scan_timeout = 10  # ms
command_timeout = 500

Tide

Tide is already optimized, but you can:

# Remove unused items
set -U tide_right_prompt_items status cmd_duration

# Disable git in large repos
set -U tide_git_truncation_length 50

Conclusion

Starship is the Swiss Army knife - works everywhere, configures everything, good enough performance for most users.

Tide is the specialist - Fish-only, but exceptionally fast and polished for that environment.

For most SRE/DevOps workflows involving multiple shells and cloud contexts, Starship's flexibility wins. For Fish devotees who prioritize speed in large repositories, Tide is hard to beat.


Optimizing your terminal workflow? Akmatori AI agents integrate with your shell environment to surface incident context exactly when you need it.

Automate incident response and prevent on-call burnout with AI-driven agents!