Choosing an Oh My Zsh Update Strategy: Auto-Prompt, Silent Auto, or Fully Manual
Oh My Zsh's default update prompt is a real engineering decision. Compare the four supported update modes, configure them in the right order, and verify the choice stuck.
03 Jan 2026, 20:27 UTC

Oh My Zsh updates itself by default, and that default is a real decision: every ~13 days your shell will interrupt startup with an update prompt, and if you accept, plugin and theme behavior can change between one terminal session and the next. For a solo laptop that's usually fine. For shared dotfiles, a team standard, or anyone who has been bitten by a renamed alias, it's worth choosing an update mode deliberately instead of accepting the default.
This guide compares the four supported update modes, shows how to configure each one correctly (ordering matters), and gives you a way to verify the choice actually took effect.
The decision and its constraints
You're deciding who controls when the framework code in $ZSH changes:
- Reproducibility. Do you need two machines, or two teammates, to behave identically until someone explicitly updates?
- Startup latency and interruption. The update check runs during shell startup. The prompt blocks until you answer it.
- Security and bug fixes. Disabling updates means fixes to the framework and bundled plugins only arrive when you remember to pull them.
- Scope. Updates cover the framework and bundled plugins/themes only. Anything you installed into
$ZSH_CUSTOM(custom plugins, external themes) is updated separately or not at all — no mode fixes that.
The four supported modes
Oh My Zsh's updater is controlled with zstyle ':omz:update' ... settings. The supported modes:
| Mode | Configuration | Behavior | Best for |
|---|---|---|---|
| Prompt (default) | zstyle ':omz:update' mode prompt | Asks every N days (default ~13) whether to update | Solo users who want fixes without thinking about it |
| Auto | zstyle ':omz:update' mode auto | Updates silently at the configured frequency, no prompt | Users who want zero interruptions and accept surprise changes |
| Reminder | zstyle ':omz:update' mode reminder | Notifies that an update is available but doesn't change anything | Users who want awareness without forced interaction |
| Disabled | zstyle ':omz:update' mode disabled | Never checks; updates only via manual omz update | Teams, shared dotfiles, reproducibility-first setups |
The frequency is adjustable in any checking mode, e.g. zstyle ':omz:update' frequency 30 to check roughly monthly. Older guides reference the legacy variables DISABLE_AUTO_UPDATE=true and DISABLE_UPDATE_PROMPT=true; these still exist in recent versions, but the zstyle form is the current interface and covers more modes. Check $ZSH/tools/upgrade.sh and the update logic in your installed checkout to confirm what your version supports — this behavior has changed across releases.
Trade-offs that actually matter
Prompt vs. auto is a choice between interruption and surprise. The prompt blocks a new shell until you answer; auto mode never interrupts but can change an alias, a theme's prompt layout, or a bundled plugin's behavior between sessions. If you've ever had gst or a git alias behave differently after a weekend, an auto-update is a plausible cause.
Reminder vs. disabled is about who schedules the work. Reminder still runs the startup check (small latency cost) and nags you; disabled removes the check entirely and makes updates purely your responsibility. Neither updates anything by itself.
The team case. The most reproducible option is disabled mode plus pinning: track Oh My Zsh as a git submodule or fork at a known commit in your dotfiles repo, and update it on a schedule you choose. Auto or prompt mode on a team means every member is effectively running a slightly different framework version depending on when they last answered the prompt.
Implementation: ordering is the common failure
The zstyle lines must appear in ~/.zshrc before the line that sources Oh My Zsh. If they come after, they're silently ignored and you get the default prompt mode. A minimal, correct snippet for fully manual updates:
# ~/.zshrc — set update policy BEFORE sourcing the framework
zstyle ':omz:update' mode disabled
export ZSH="$HOME/.oh-my-zsh"
plugins=(git)
source $ZSH/oh-my-zsh.shFor a quieter-but-still-automatic setup, replace the zstyle line with:
zstyle ':omz:update' mode reminder
zstyle ':omz:update' frequency 30Edit with any text editor; no special permissions needed since it's your own ~/.zshrc. The change takes effect in new shells (or after exec zsh). Risk is low — a misconfigured mode just falls back to default behavior — but a syntax error in .zshrc can break shell startup, so keep a known-good copy or test in a second terminal before closing your current one.
Validating the result
Don't assume the setting stuck. Three checks:
- Ordering: confirm with
grep -n "omz:update\|oh-my-zsh.sh" ~/.zshrcthat everyzstyle ':omz:update'line has a lower line number than thesourceline. - Behavior: in disabled mode, open several new shells over days — you should never see an update prompt. To test faster, temporarily set
frequency 0in a throwaway shell with prompt mode and sourceoh-my-zsh.shto observe the prompt path, then revert. - Manual path works: run
omz update(works in any mode) and confirm the checkout actually moved withgit -C "$ZSH" log --oneline -5. Ifomz updatesucceeds but the log doesn't change, you were already current — that's fine, the path works.
If you pinned via submodule, validation is simpler: git -C "$ZSH" rev-parse HEAD should match the commit recorded in your dotfiles repo.
Limitations
- No mode updates custom plugins or themes in
$ZSH_CUSTOM; manage those separately (many are git clones you pull yourself). - Mode names and the legacy environment variables have shifted across releases. Verify against the
upgrade.shin your installed checkout rather than trusting any guide, including this one, for exact spelling. - Disabled mode means you own the update cadence. A calendar reminder or a dotfiles-repo maintenance task is the practical mitigation; otherwise you can end up years behind on fixes.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.