Modern Zsh plugin manager with turbo mode and performance optimizations
Zinit replaces Oh My Zsh in our setup for several key advantages:
Located in ~/.zshrc:
# Zinit installation directory
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
# Auto-install if not present
if [[ ! -d "$ZINIT_HOME" ]]; then
print -P "%F{33}▓▒░ Installing zinit...%f"
command mkdir -p "$(dirname $ZINIT_HOME)"
command git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
fi
source "${ZINIT_HOME}/zinit.zsh"
Syntax Highlighting (Turbo Mode):
zinit wait lucid for \
atinit"ZINIT[COMPINIT_OPTS]=-C; zicompinit; zicdreplay" \
zdharma-continuum/fast-syntax-highlighting
Autosuggestions (Lazy Loading):
zinit wait lucid atload"!_zsh_autosuggest_start" for \
zsh-users/zsh-autosuggestions
Directory Jumping:
zinit ice wait"0" lucid
zinit light agkozak/zsh-z
Enhanced Completions:
zinit ice wait"0" lucid blockf
zinit light zsh-users/zsh-completions
Turbo Mode (wait ice)
Lazy Loading (atload ice)
Compilation (compile ice)
# List installed plugins
zinit list
# Update all plugins
zinit update
# Update specific plugin
zinit update zdharma-continuum/fast-syntax-highlighting
# Show plugin status
zinit status
# Load/unload plugin
zinit load agkozak/zsh-z
zinit unload agkozak/zsh-z
# Compile all plugins
zinit compile --all
# Create report of loading times
zinit times
# Stress test installation
zinit stress
# Show plugin information
zinit report zsh-users/zsh-autosuggestions
# Rebuild completion cache
zinit creinstall
# List completions
zinit clist
# Delete completion
zinit cuninstall _command
Simple plugin:
zinit load "user/plugin-name"
With turbo mode:
zinit ice wait"1" lucid
zinit load "user/plugin-name"
With conditions:
zinit ice wait"1" lucid if"command -v git"
zinit load "user/git-plugin"
Local configuration:
zinit ice wait"1" lucid \
atload"export PLUGIN_VAR=value" \
atclone"./configure" \
atpull"./update.sh"
zinit load "user/complex-plugin"
| Ice | Purpose | Example |
|---|---|---|
wait"N" |
Delay loading N seconds | wait"2" |
lucid |
Silent loading | Always use with wait |
atload |
Execute after loading | atload"export VAR=1" |
atinit |
Execute before loading | atinit"setup()" |
if |
Conditional loading | if"command -v node" |
blockf |
Block default completions | For completion plugins |
compile |
Compile plugin | For faster execution |
Starship prompt (already configured):
# Starship is loaded externally
if command -v starship &>/dev/null; then
eval "$(starship init zsh)"
fi
Custom prompt plugin:
zinit ice depth=1
zinit light romkatv/powerlevel10k
| Oh My Zsh | Zinit Equivalent |
|---|---|
git plugin |
zinit snippet OMZ::plugins/git/git.plugin.zsh |
colored-man-pages |
zinit snippet OMZ::plugins/colored-man-pages/colored-man-pages.plugin.zsh |
| Custom theme | zinit load "theme-author/theme-name" |
# Load Oh My Zsh components
zinit snippet OMZ::lib/git.zsh
zinit snippet OMZ::plugins/git/git.plugin.zsh
Old .zshrc (Oh My Zsh):
plugins=(git colored-man-pages z)
ZSH_THEME="spaceship"
New .zshrc (Zinit):
zinit snippet OMZ::plugins/git/git.plugin.zsh
zinit snippet OMZ::plugins/colored-man-pages/colored-man-pages.plugin.zsh
zinit load agkozak/zsh-z
# Starship replaces spaceship theme
| Setup | Cold Start | Warm Start |
|---|---|---|
| Oh My Zsh | 800-1200ms | 400-600ms |
| Zinit (basic) | 200-400ms | 100-200ms |
| Zinit (turbo) | 50-150ms | 30-80ms |
| Setup | Initial RAM | After Loading |
|---|---|---|
| Oh My Zsh | 35MB | 45MB |
| Zinit | 15MB | 25MB |
Check plugin status:
zinit status plugin-name
Manual reload:
zinit reload plugin-name
Verbose loading:
zinit load plugin-name --verbose
Profile loading times:
zinit times
Check problematic plugins:
# Look for plugins without 'wait' ice
zinit list | grep -v "wait"
Rebuild completions:
rm -rf ~/.zcompdump*
zinit creinstall
exec zsh
Check completion sources:
zinit clist
Complete Zinit reset:
rm -rf ~/.local/share/zinit
rm -rf ~/.zcompdump*
exec zsh # Will auto-reinstall
Local plugin structure:
~/.local/share/zinit/custom/
└── my-plugin/
├── my-plugin.plugin.zsh
├── functions/
│ └── _my_completion
└── README.md
Load local plugin:
zinit load ~/.local/share/zinit/custom/my-plugin
Development tools only in dev projects:
zinit ice wait"1" lucid if"[[ -f package.json ]]"
zinit load "lukechilds/zsh-nvm"
Work-specific plugins:
if [[ "$PWD" == *"/work/"* ]]; then
zinit load "work/corporate-plugin"
fi
Install programs via Zinit:
zinit ice from"gh-r" as"program"
zinit load junegunn/fzf
With renaming:
zinit ice from"gh-r" as"program" mv"ripgrep* -> rg"
zinit load BurntSushi/ripgrep
zinit times# Group related plugins
zinit wait lucid for \
zsh-users/zsh-autosuggestions \
zsh-users/zsh-completions \
zdharma-continuum/fast-syntax-highlighting
# Separate complex configurations
zinit ice wait"1" lucid atload"setup_complex_plugin"
zinit load complex/plugin
# Regular maintenance script
#!/bin/bash
zinit update --all
zinit compile --all
zinit creinstall # Rebuild completions
Pro Tip: Start with our default configuration and gradually add plugins. Use
zinit timesto monitor performance impact before making plugins permanent.