Oh My Fish: the Fish shell framework that ships packages and themes, with a maintainer warning attached
The Fish Shell Framework
At a glance
- What is it?
- Oh My Fish (OMF) adds a package manager, theme switcher and startup hooks to the Fish shell, but its own README says it has been unmaintained for years. Here is what still works, how to install it, and when Fisher is the better call.
- Who is it for?
- Adopt Oh My Fish if you already run Fish 3.0 or later, want the omf package and theme commands, and accept that the maintainers describe the project as unmaintained with some broken themes and packages. Do not adopt it if you need a framework whose authors stand behind every package, or if you want a prompt that is maintained independently of the shell framework; Fisher and Starship are the alternatives to compare.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 20 days ago.
- What is it written in?
- Mainly Shell, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Oh My Fish actually adds to a plain Fish install
Fish on its own gives you a shell with completions, syntax highlighting and a prompt. What it does not give you is a distribution channel for other people's prompt configurations, key bindings and helper functions. Oh My Fish fills that gap. The README describes it as providing "core infrastructure to allow you to install packages which extend or modify the look of your shell." Concretely, that means a command called omf that fetches packages from a package repository, a theme system that swaps your prompt, and an init file that runs before your interactive session. The intended user is someone who wants a Fish setup closer to what Oh My Zsh users get on Zsh: a curated set of plugins and a prompt gallery, installed by name rather than by cloning repositories by hand. If you are happy writing your own config.fish and pulling in one or two plugins manually, the framework is overhead you do not need.
How the omf command, package repositories and startup hooks fit together
The architecture is a package manager wrapped around shell sourcing. The omf command manages a set of package repositories; the README states that the official repository at github.com/oh-my-fish/packages-main is always installed and available, and that omf repositories list, add and remove manage the rest. When you run omf install with a name, a URL or a user/repo pair, OMF resolves it against those repositories and places it in your OMF path. Installation is not the interesting part; startup is. The installer writes a snippet into fish's user config directory at ~/.config/fish/conf.d/, and that snippet calls OMF's startup code. The README is explicit that files in that directory are sourced in the order the filesystem returns them, so ordering is not guaranteed by intent, only by filename. A script named a_script.fish will be sourced before omf.fish, which means a script that depends on an OMF-managed plugin can run before that plugin exists. The documented workaround is to rename the file with a numeric prefix such as xx_ or 00_, or to put the code in ~/.config/omf/before.init.fish. That is a real design constraint, not a footnote: it means plugin load order is something you manage by renaming files.
Installing Oh My Fish and applying your first theme
The README gives a one-line install that downloads the installer script and pipes it into fish. The requirements listed are fish version 3.0 or later and git version 1.9.5 or later.
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fishIf you would rather read the script before running it, the README shows downloading it first and passing explicit paths for the install location and config directory.
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install > install
fish install --path=~/.local/share/omf --config=~/.config/omfThe same section offers a checksum check against bin/install.sha256, which is worth doing if you take the pipe-to-shell route.
curl -sL https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install.sha256 | shasum -a 256 --checkFor machines with no network, the README documents --offline, which behaves like --local-source but skips fetching plugins; you run omf install later when a network is available. The repository's own Dockerfile shows the non-interactive path used in CI: it copies the source to /src/oh-my-fish and runs bin/install --local-source --noninteractive --yes. After installation, omf theme with no argument lists available themes, and omf theme <theme> applies one. The README points to a themes document for previews. Two commands are worth running before you file anything: omf list to see what is installed, and omf doctor, which the README describes as the tool to use for troubleshooting before opening an issue.
The maintainer warning is the headline limitation
The first line of the README is a warning that Oh My Fish has been unmaintained for years, that certain parts may not work, that a few themes and packages are currently broken, and that the code is due a significant overhaul. It ends by inviting anyone interested in becoming a maintainer to email a Google Group address. This is unusual candour and it should drive your decision more than any feature list. The release history supports the warning: v6 was tagged in October 2017, v7 in April 2020, and v8 in April 2026, so the gap between v7 and v8 was roughly six years. The repository itself has been pushed to recently, but a push is not the same as a maintained package ecosystem, and the README says the current maintainers have run out of steam. Practically, that means a theme that worked on an older Fish release may not work on yours, and there is no guarantee that a bug you hit in a third-party package will be fixed. The README also records a known issue from the Fish 2.6 era: a regression with some terminal emulators made right prompts render the shell unusable, and because OMF's default theme has a right prompt, the advice was to switch themes until a fix landed. That issue is historical, but it illustrates the failure mode: a prompt is not cosmetic when it can make the shell unusable.
Fisher and Starship: what changes when you drop the framework
Fisher is the closest alternative and the comparison people actually search for. The difference is scope. Oh My Fish is a framework with its own package repository, its own theme catalogue and its own startup snippet in conf.d; Fisher is a plugin manager that installs plugins without owning your prompt or your startup sequence. If you want a curated theme gallery and a single omf theme command, OMF gives you that. If you want to choose your own prompt separately from your plugin manager, Fisher does not couple the two. Starship sits at a different layer entirely: it is a prompt, not a shell framework, so it does not install Fish plugins at all. Choosing Starship means you keep Fish plus a prompt binary and manage plugins some other way. The trade-off is real in both directions. OMF gives you more out of the box and takes on more maintenance risk, which the README itself acknowledges. Fisher and Starship give you less integration and fewer moving parts that can break together.
Licence, upgrade cost and what v8 changed
Oh My Fish is MIT licensed. In practice that means you can read, modify, redistribute and fork the code, including for commercial use, provided the licence and copyright notice are preserved. It does not give you any warranty, and it does not oblige the maintainers to fix a broken package or theme. If the project stalls again, forking is legally straightforward, which matters given the README's own framing. Upgrade cost is the part to think about before installing. The omf channel command switches between the stable channel, which the README says provides the latest tagged version, and dev, which tracks changes under development; omf update then upgrades to whatever the current channel points at. Because v7 to v8 was a multi-year gap, a user who installed on the stable channel spent years on an old tag. The release notes for v8 are the place to look for what changed, and the CHANGELOG.md in the repository root is the file to read before upgrading a working setup. There is no documented rollback command in the README, so if an upgrade breaks your prompt, plan on restoring from a backup of ~/.config/omf rather than running an omf command to revert.
Editorial conclusion
Adopt Oh My Fish if you already run Fish 3.0 or later, want the omf package and theme commands, and accept that the maintainers describe the project as unmaintained with some broken themes and packages. Do not adopt it if you need a framework whose authors stand behind every package, or if you want a prompt that is maintained independently of the shell framework; Fisher and Starship are the alternatives to compare. Before committing, run omf doctor on a fresh install, check whether the theme you want is listed as working, and read the release notes for v8 (tagged 2026-04-07) to see what changed since v7 in 2020. The project is MIT licensed, so the code is free to fork, but nothing in the repository obliges anyone to keep the package repository healthy.
Frequently asked questions
How do I install Oh My Fish?
The README gives a one-line install that pipes the installer script into fish: curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish. You can also download the script first and run fish install with --path and --config to choose where it goes. Requirements are fish 3.0 or later and git 1.9.5 or later.
What is Oh My Fish?
It is a framework for the Fish shell that provides core infrastructure for installing packages that extend or modify how your shell looks. It ships an omf command for installing packages and themes, and the installer adds a startup snippet under ~/.config/fish/conf.d/.
How does Oh My Fish compare with Fisher?
Oh My Fish is a framework with its own package repository, theme catalogue and startup snippet, while Fisher is a plugin manager that does not own your prompt or startup sequence. The practical difference is that OMF gives you a curated theme gallery and a single omf theme command, and couples plugin management to prompt selection.
How does Oh My Fish compare with Starship?
Starship is a prompt, not a shell framework, so it does not install Fish plugins. Choosing it means running Fish plus a prompt binary and managing plugins another way, whereas Oh My Fish installs plugins and themes through the omf command.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/oh-my-fish-oh-my-fish)