The default zsh starting point, with history attached

ohmyzsh/ohmyzsh is the long-running community framework for managing zsh configuration. It gives new zsh users a ready-made layout: installer, update tool, default .zshrc template, plugin loader, hundreds of built-in plugins, many bundled themes, and a wiki ecosystem around terminal setup.

That convenience is the reason Oh My Zsh still ranks near the top of GitHub after many years. It is also the source of most tradeoffs. Oh My Zsh touches your login shell, rewrites your startup file, loads plugin code into every interactive terminal, and can affect prompt latency. It is not just eye candy. It becomes part of your daily command environment.

The right question is not “is Oh My Zsh good?” For many developers, it clearly is useful. The better question is “do I want a large community zsh framework, or a smaller prompt and plugin setup I understand line by line?”

What it gives you

The core value is packaging. Oh My Zsh collects zsh conventions that otherwise take time to assemble: aliases, completions, prompt themes, helper functions, update behavior, custom plugin directories, custom theme directories, and readable docs for built-in plugins.

The README says the project supports macOS, Linux, FreeBSD, Android, and WSL2. Prerequisites are plain: zsh, curl or wget, and git. The README prefers zsh 5.0.8 or newer, though zsh 4.3.9 is listed as acceptable. After install, users normally edit ~/.zshrc to choose a theme and list plugins.

Plugins are the main draw. A plugins=(git docker ruby macos ...) block can bring aliases, completions, helper functions, and shell integrations into one file. Themes are the visible layer. Some bundled themes require Powerline fonts or Nerd Fonts, and the README warns that screenshots can look wrong without the right font setup.

There is also a custom override model. Files ending in .zsh can live under custom/, custom plugins can live under custom/plugins/, and a custom plugin with the same name as a built-in plugin can override the bundled one. That is useful, but it also means long-lived setups can grow into private shell frameworks.

Install it, but read the script first

The README gives three primary install paths:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

It also lists the mirror at https://install.ohmyz.sh/ for networks where raw.githubusercontent.com is blocked. The important part is the section after the command table: the README says it is a good idea to inspect install scripts from projects you do not yet know. Its suggested manual inspection path is to download tools/install.sh, read it, then run sh install.sh.

That advice matters because the installer changes your shell setup. The README says any previous .zshrc is renamed to .zshrc.pre-oh-my-zsh. If your old file had PATH exports, proxy settings, language managers, conda blocks, aliases, or shell functions, you need to migrate the parts you still want into the new .zshrc.

Manual install is also documented: clone the repository into ~/.oh-my-zsh, optionally back up ~/.zshrc, copy the template to ~/.zshrc, then change the default shell with chsh -s $(which zsh). That path is better for people who dislike pipe-to-shell installers or manage dotfiles with git.

Where it bites

The biggest day-two issue is startup and prompt performance. Oh My Zsh itself is not always the root cause. Terminal emulator behavior, Apple Git, theme code, shell integration, plugin count, and slow external commands can all appear as “Oh My Zsh is slow.” Still, the project sits in the hot path, so users blame it when every prompt feels delayed.

The issue tracker shows this in practice. A 2026 macOS Tahoe report described multi-second prompt delays after commands such as curl and git. Maintainers asked for debug logs and later trace logs rather than guessing. Another theme issue around the jonathan theme and Ghostty included a proposed patch and a maintainer asking users to test a pull request with omz pr test.

Aliases are another source of tension. The contribution guide says some plugins have more than 100 aliases, while some users want no aliases at all. It now requires new aliases to be broadly useful, common, and generic where possible. The README also documents zstyle settings to skip all aliases, aliases from lib files, or plugin aliases, with more specific scopes taking precedence.

Updates need care too. By default, Oh My Zsh prompts to check for updates every two weeks. Users can set update mode to auto, reminder, or disabled, and adjust frequency. The README states that the old unattended update flag has been removed because it has side effects. For automation, it points users to $ZSH/tools/upgrade.sh instead.

Who should use it

Oh My Zsh is a strong default for developers who want a familiar zsh environment quickly, especially on macOS or WSL2. It is useful when you want common aliases and completions without collecting every plugin by hand. It is also useful in teams where many people already understand the same plugin names and .zshrc structure.

It is less attractive if your shell startup time is already a concern, if you want every line of your shell config to be explicit, or if your terminal setup is managed by a strict dotfiles repo. In those cases, smaller pieces may be better: a prompt such as Starship, a focused theme such as Powerlevel10k, or individual zsh plugins from zsh-users.

There is no shame in starting with Oh My Zsh and later shrinking your setup. Many developers use it as a learning scaffold: install it, learn which plugins they actually use, then move to a smaller config when they know their preferences.

Comparison with nearby shell projects

Repository Stars Language License Best use
ohmyzsh/ohmyzsh 187,925 Shell MIT Full zsh framework with bundled plugins, themes, updater, and conventions
starship/starship 58,257 Rust ISC Fast cross-shell prompt when you do not want a full zsh framework
romkatv/powerlevel10k 54,408 Shell MIT Zsh prompt theme for users who mainly care about prompt UX
fish-shell/fish-shell 33,649 Rust NOASSERTION A different shell with friendly defaults rather than a zsh framework
zsh-users/zsh-autosuggestions 35,673 Shell MIT One focused zsh feature instead of a whole framework

As of 2026-06, Oh My Zsh remains much larger by stars than the focused zsh pieces in this comparison. That does not mean everyone should use the largest option. It means Oh My Zsh is the community default. Defaults are useful because documentation, issues, and examples are plentiful. Defaults also carry more historical decisions.

Star curve and maintenance signal

The sampled star-history data shows early steady growth from 2009 through 2016, then a much later point at the current total. It is not detailed enough to narrate every phase, but it does support the durable claim: Oh My Zsh is a long-running default, not a short-lived terminal trend. The repo started in 2009, still had pushes in June 2026, and has a large active issue and pull request surface.

The open issue count is also a signal. Hundreds of open issues do not automatically mean neglect. For a shell framework with many plugins, themes, operating systems, terminal emulators, and user dotfiles, the issue tracker becomes a support queue, compatibility log, and feature request funnel. Read it that way.

FAQ

Is Oh My Zsh safe to install with curl pipe shell?

The README gives curl, wget, and fetch install commands, but it also recommends manual inspection. Download tools/install.sh, read it, then run it if you are comfortable. This is better than blindly piping any install script into sh.

What happens to my old .zshrc?

The README says a previous .zshrc is renamed to .zshrc.pre-oh-my-zsh. After install, migrate any PATH exports, language-manager blocks, aliases, functions, or proxy settings you still need into the new .zshrc.

Why is Oh My Zsh slow?

It may be Oh My Zsh, a theme, a plugin, git status work, a terminal integration, or an operating system issue. Start by reducing plugins, trying the default theme, checking external commands, and using the project’s troubleshooting logs when filing an issue.

Should I use Oh My Zsh or Starship?

Use Oh My Zsh when you want a zsh framework with plugins, themes, update behavior, and conventions. Use Starship when you mainly want a fast cross-shell prompt and prefer to manage zsh plugins separately.

How do I disable Oh My Zsh aliases?

The README documents zstyle settings that can skip all aliases, only lib aliases, or only plugin aliases. Put those settings in ~/.zshrc before Oh My Zsh is loaded.

How do I update Oh My Zsh?

Interactive users can run omz update. For automation, the README says to call $ZSH/tools/upgrade.sh directly. It also says the old unattended update flag has been removed because it has side effects.