A Migration Guide from Powerlevel10k to Starship (2025 Edition)
Introduction
I migrated from Powerlevel10k, which I had used for years, to Starship.
In this article I summarize the differences between the two, recent developments, the migration procedure, and how to customize it.
Powerlevel10k vs Starship
Powerlevel10k
Features:
- A prompt theme for Zsh only
- Extremely fast startup time (under 10ms)
- Beginner-friendly setup through a configuration wizard (
p10k configure) - More than 10 built-in themes
- Advanced customization is possible
Drawbacks:
- Limited to Zsh
- High memory usage
- The configuration file is complex (
.p10k.zsh)
Starship
Features:
- Cross-platform support (Bash, Zsh, Fish, PowerShell, Cmd, and so on)
- Written in Rust and fast (about 20ms, which is no problem in practice)
- A simple configuration file in TOML format
- Memory efficient
- A modular design with high extensibility
Drawbacks:
- Startup time is slightly slower than Powerlevel10k (though the difference is negligible in practice)
Recent Developments (2025)
The current state of Powerlevel10k
An important fact: Powerlevel10k is currently on life support.
The developer announced in 2025 that maintenance of the project would stop. It still works today, but you cannot expect new features or bug fixes from here on. Adopting it for new projects is not recommended.
The current state of Starship
- Under active development (GitHub 53.6k+ stars)
- The community is large and improvements are made continuously
- As of 2025, it is the most recommended prompt customizer
- Thanks to cross-platform support, it provides a consistent experience across multiple shell environments
Best practice
As of 2025, migrating to Starship is recommended.
Reasons:
- Continuous maintenance is guaranteed
- Cross-shell support makes it flexible
- The configuration is simple and easy to maintain
- Support from an active community
Powerlevel10k’s advantage in startup speed is practically negligible, and Starship’s benefits outweigh it.
Migration Procedure
1. Installing Starship
# Install with Homebrew (macOS)
brew install starship
# Other installation methods
# curl -sS https://starship.rs/install.sh | sh2. Editing .zshrc
Settings to remove
Remove the settings related to Powerlevel10k:
# Remove: Powerlevel10k instant prompt (near the top of the file)
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Remove: sourcing and configuration of Powerlevel10k
source ~/powerlevel10k/powerlevel10k.zsh-theme
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zshSettings to add
Add the initialization code for Starship:
## starship prompt
if _has starship; then
eval "$(starship init zsh)"
fiBy using the _has function, it does not raise an error even in an environment where Starship is not installed.
3. Checking after the migration
Open a new terminal session and check that Starship is working correctly:
# Check the Starship version
starship --version
# Explain the prompt (for debugging)
starship explain4. Compatibility with existing settings
Good news: existing Zsh settings (Zinit plugins, completion settings, aliases, and so on) keep working as they are.
Starship is only responsible for displaying the prompt, so there are no conflicts with other settings.
Customization
Where the configuration file lives
The Starship configuration file goes at ~/.config/starship.toml:
mkdir -p ~/.config
touch ~/.config/starship.tomlUsing presets
Starship comes with several presets:
# A preset that uses Nerd Font symbols
starship preset nerd-font-symbols -o ~/.config/starship.toml
# Other presets
starship preset no-nerd-font -o ~/.config/starship.toml
starship preset pastel-powerline -o ~/.config/starship.toml
starship preset pure-preset -o ~/.config/starship.tomlA basic customization example
# ~/.config/starship.toml
# Add a blank line before the prompt
add_newline = true
# Command execution timeout (milliseconds)
command_timeout = 500
# The prompt format definition
format = """
$username\
$hostname\
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$character
"""
# Customizing the directory module
[directory]
truncation_length = 3
truncate_to_repo = true
format = "at [$path]($style) "
# Customizing the Git branch module
[git_branch]
symbol = "🌱 "
format = "on [$symbol$branch(:$remote_branch)]($style) "
# Customizing the character (the prompt symbol)
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"Disabling modules
You can disable modules you do not need:
# Hide package information
[package]
disabled = true
# Hide the Docker context
[docker_context]
disabled = trueAdvanced customization
Conditional display
# Show Git information only inside a Git repository
[git_branch]
only_attached = trueA custom command module
# Show the result of running a custom command
[custom.git_email]
command = "git config user.email"
when = "git rev-parse --git-dir 2> /dev/null"
format = "via [$output]($style)"Debugging
When there is a problem with the configuration:
# Show an explanation of each element of the prompt
starship explain
# Enable verbose logging
STARSHIP_LOG=trace starship explain
# Measure performance
starship timingsSummary
Migrating from Powerlevel10k to Starship is recommended for the following reasons:
- Continuous maintenance is guaranteed
- Cross-platform support makes it flexible
- The configuration is simple and easy to maintain
- Support from an active community
The migration work is comparatively easy and compatibility with existing settings is high, so it goes smoothly. Starship’s TOML-based configuration is easier to understand than Powerlevel10k’s complex configuration file, and it is easy to customize.