DEV Community

Tony Miller
Tony Miller

Posted on • Edited on

Achieving 30ms Zsh Startup

Me and Claude went on a dotfiles journey the other day...

The Flex πŸ’ͺ

🍎  time zsh -i -c exit
zsh -i -c exit  0.02s user 0.01s system 87% cpu 0.033 total
Enter fullscreen mode Exit fullscreen mode

33 milliseconds. That's faster than most people can blink. While others wait half a second
for their shell to load, we're already productive.

The Challenge

Most zsh configurations suffer from slow startup times ranging from 200ms to 500ms or more. Heavy frameworks like Oh-My-Zsh can push startup times beyond 1 second. Our goal was to achieve blazingly
fast shell initialization while maintaining full functionality for a modern development environment.

The Result

Final startup time: 33ms - putting us in the top 0.1% of shell performance.

Core Optimization Strategy

1. KISS Philosophy: Single-File Architecture

Instead of fragmenting configuration across multiple files, we organized everything within .zshrc using clear section headers:

### BREW
### FZF  
### COMPLETIONS
### NVM
### DOCKER
### KUBE
### PYTHON
### RUBY
Enter fullscreen mode Exit fullscreen mode

This eliminates the overhead of sourcing multiple files while keeping code organized and maintainable.

2. Aggressive Lazy Loading

The biggest performance wins came from deferring expensive operations until actually needed:

NVM (Node Version Manager)

load_nvm() {
  unset -f npm npx yarn nvm load_nvm 2>/dev/null || true
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
  [ -s "$NVM_DIR/bash_completion" ] && \."$NVM_DIR/bash_completion"
}
npm() { load_nvm; npm "$@"; }
npx() { load_nvm; npx "$@"; }
yarn() { load_nvm; yarn "$@"; }
nvm() { load_nvm; nvm "$@"; }
Enter fullscreen mode Exit fullscreen mode

Python Environment (pyenv)

function load_pyenv() {
  if command -v pyenv &> /dev/null; then
    eval "$(pyenv init --path)"
    eval "$(pyenv init - --no-rehash)"
    if which pyenv-virtualenv-init > /dev/null; then
      eval "$(pyenv virtualenv-init -)"
    fi
    pyenv virtualenvwrapper
    unset -f load_pyenv
  fi
}
alias pyenv='load_pyenv && pyenv'
Enter fullscreen mode Exit fullscreen mode

The Fuck (command correction)

function init_thefuck() {
  unalias fuck
  unset -f init_thefuck
  eval $(thefuck --alias)
  fuck
}
alias fuck="init_thefuck"
Enter fullscreen mode Exit fullscreen mode

3. Strategic Performance Settings

Completion Optimization

# Fast completion initialization
compinit -C  # Skip security checks for speed

# Completion caching
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zsh/cache
zstyle ':completion:*' accept-exact '*(N)'
Enter fullscreen mode Exit fullscreen mode

Disable Expensive Features

# Turn off features that slow startup
unsetopt AUTO_CD
unsetopt AUTO_PUSHD
unsetopt PUSHD_IGNORE_DUPS
unsetopt FLOW_CONTROL
Enter fullscreen mode Exit fullscreen mode

4. Smart Git Branch Caching

Instead of running git commands on every prompt render, we cache branch information:

function git_ps1 {
    if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
        return
    fi

    # Use cached branch info
    if [[ -n $GIT_BRANCH_CACHE ]]; then
        echo -n "($GIT_BRANCH_CACHE)"
    else
        local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
        if [[ -n $branch && $branch != "HEAD" ]]; then
            export GIT_BRANCH_CACHE="$branch"
            echo -n "($branch)"
        fi
    fi
}

# Clear cache when changing directories
function git_branch_cache_clear() {
    unset GIT_BRANCH_CACHE
}
add-zsh-hook chpwd git_branch_cache_clear
Enter fullscreen mode Exit fullscreen mode

5. Conditional Loading

Only load completions and tools that are actually installed:

### KUBE
if command -v kubectl &> /dev/null; then
    source <(kubectl completion zsh)
fi

### DOCKER
if command -v docker &> /dev/null; then
    fpath=("$HOME/.docker/completions" $fpath)
fi
Enter fullscreen mode Exit fullscreen mode

6. Smart Hooks

Use hooks sparingly and efficiently:

# Auto-load NVM when entering projects with .nvmrc
maybe_nvm_after_cd() {
  local dir
  dir=$(pwd)
  while [ "$dir" != "/" ]; do
    if [ -f "$dir/.nvmrc" ]; then
      load_nvm
      nvm use 2>/dev/null || true
      return
    fi
    dir=$(dirname "$dir")
  done
}
add-zsh-hook chpwd maybe_nvm_after_cd
Enter fullscreen mode Exit fullscreen mode

Key Principles Applied

  1. Lazy Everything: Defer expensive operations until needed
  2. Cache Aggressively: Store computation results and reuse them
  3. Conditional Loading: Only load what's installed and needed
  4. Single File: Avoid sourcing overhead by keeping everything in one organized file
  5. Profile and Measure: Use time zsh -i -c exit to validate improvements

What We Avoided

  • Oh-My-Zsh: Adds 200-400ms overhead
  • Multiple sourced files: Each source adds ~5-10ms
  • Synchronous tool initialization: NVM, pyenv, etc. add 50-200ms each
  • Complex prompt calculations: Git status checks on every render
  • Unnecessary zsh options: Many defaults are performance killers

The Outcome

With these optimizations, we achieved:

  • 33ms startup time (top 0.1% performance)
  • Full development environment (Node, Python, Docker, Kubernetes)
  • Rich completions for all tools
  • Maintainable single-file configuration
  • Zero functionality compromised

The key insight: aggressive lazy loading combined with smart caching and conditional execution can
deliver both speed and functionality without compromise.

Full config

Top comments (0)