Extremely slow Terminal startup on macOS Sequoia (M3 Mac Pro)


Problem

On my new M3 Mac Pro (36 GB RAM) running macOS Sequoia 15.3.2, launching a new interactive shell in both the built‑in Terminal.app and the GPU‑accelerated Ghostty takes orders of magnitude longer than on my Linux/Windows boxes. I frequently use tmux, and spawning new panes can take > 1 second, whereas on Linux/Windows it’s < 0.03 s.

What I’ve Tried

  1. Stripped-down ~/.zshrc

    • Disabled ALL plugins; still see initial startup ~1.2 s and subsequent ~0.1–0.2 s.
  2. Custom timing function:

timezsh () {
  shell=${1-$SHELL}
  for i in $(seq 1 10); do
    /usr/bin/time $shell -i -c exit
  done
}

Results (no plugins):

real 1.24; user 0.10; sys 0.05
real 0.15; user 0.04; sys 0.03
real 0.13; user 0.03; sys 0.03
real 0.14; user 0.03; sys 0.03

With plugins enabled:

Extremely slow Terminal startup on macOS Sequoia (M3 Mac Pro)

  1. compinit tweaks & zprof analysis

    • Precompiled cache, removed old dump files, no significant improvement.
  2. Homebrew & some cli tools also feel sluggish, suggesting a deeper system issue.

Environment

  • macOS: Sequoia 15.3.2
  • Hardware: Apple M3 Pro, 36 GB RAM
  • Shells tested:
    • /bin/zsh (default)
    • /bin/bash
  • Measurement tool: /usr/bin/time and zprof

Questions

Has anyone observed 1-2 second cold startup on an M3 Mac for Zsh, even with minimal config?
Are there known system-wide factors (e.g. Rosetta layers, filesystem checks, notarization delays) that could slow down every new shell instance?
How can I diagnose what’s happening during that 1 second (e.g. tracing dynamic libraries, file-system stalls)?
Any tweaks or workarounds to get terminal/spawn times closer to < 0.1 s?

Thanks in advance for any insights!

EDIT:

After using zcomet instead of zinit and p10k instead of starship. I think the issue is mostly connected to cold start vs. warm start of the terminal. If everything is cached, the startup time is in the ball park of 5ms which is fine. But the cold start of the terminal after the recent os update is 2-6 seconds and really annoying. I also thought about a stupid way of just opening a terminal in the background with a cron job, but the terminal isn’t a tty and therefore not useful. Any ideas how I can reduce the cold start time or keep the terminal also "warm"?

Leave a Reply

Your email address will not be published. Required fields are marked *