Best Fish Shell Plugins & Tools (Oh My Fish, Fisher)
A guide to the most useful Fish Shell plugins, plugin managers, and tools including Fisher, Tide, fzf.fish, and other extensions worth installing.
Fish already does a lot without plugins. Autosuggestions, syntax highlighting, and man page completions are all built in. That means the plugin ecosystem is smaller than Zsh’s, but more focused. You’re adding specific tools rather than patching in missing features.
I’ve been using Fish daily and tried quite a few plugins. Here’s what I actually keep installed and recommend.
If you’re new to Fish, start with my installation guide for Ubuntu first.
Plugin managers: Fisher vs Oh My Fish
You need a plugin manager before you can install anything. There are two options, but the choice is straightforward.
Fisher (recommended)
Fisher is a lightweight plugin manager written in pure Fish. It installs plugins by copying functions and completions directly into your Fish config directory. No framework, no startup overhead.
Install it:
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
Basic usage:
fisher install author/plugin # install a plugin
fisher update # update all plugins
fisher remove author/plugin # remove a plugin
fisher list # list installed plugins
Fisher tracks installed plugins in ~/.config/fish/fish_plugins. You can version-control this file and run fisher update on a new machine to recreate your setup.
Oh My Fish
Oh My Fish (OMF) is a framework similar to Oh My Zsh. It has its own package repository with themes and plugins, and it provides a command-line tool (omf) for managing them.
Install it:
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish
Usage:
omf install plugin-name # install a plugin
omf theme theme-name # apply a theme
omf update # update everything
omf list # list installed packages
The honest take: Oh My Fish has been unmaintained for a while. The GitHub repo carries a warning about it. Some packages work fine, others are broken. I wouldn’t start a new Fish setup with OMF today. Fisher is actively maintained, faster, and can even install OMF-compatible plugins. If you still want to try it, I have a complete Oh My Fish guide.
Oh My Fish status
Oh My Fish’s GitHub page states it has been unmaintained for years and some packages are broken. For new setups, go with Fisher.
Prompt plugins
Tide
Tide is the most popular Fish-native prompt. It renders asynchronously (so your prompt never lags), has a configuration wizard, and shows git status, current directory, runtime versions, and command duration.
fisher install IlanCosman/tide@v6
tide configure
The wizard walks you through style options: powerline vs. plain, icons vs. text, one-line vs. two-line. The result looks polished without any manual configuration.
Tide needs a Nerd Font for icons. I recommend MesloLGS NF, which Tide’s documentation suggests. Install the font, set it in your terminal emulator, and you’re good.
If you want a prompt that works across Fish, Zsh, and Bash, check out Starship with Fish Shell instead. Tide is Fish-only but more deeply integrated with Fish’s features.
Hydro
Hydro is a minimal prompt made by Fisher’s author. It shows git branch, command duration, and exit status with almost zero overhead. Good if you prefer something clean and fast over feature-rich.
fisher install jorgebucaran/hydro
No configuration needed. It just works with reasonable defaults.
For a full comparison of Fish prompt options including Tide, Hydro, Starship, and Pure, check my Fish Shell themes and prompts guide.
Search and navigation plugins
fzf.fish
fzf.fish adds fuzzy search to your Fish shell using fzf. You get interactive searching for command history, file paths, git log, git status, and processes.
Install fzf first, then the plugin:
# Install fzf (Ubuntu)
sudo apt install fzf
# Or on macOS
brew install fzf
# Install the Fish plugin
fisher install PatrickF1/fzf.fish
Default keybindings:
Ctrl+R- search command history (replaces Fish’s built-in search with a better one)Ctrl+Alt+F- search file pathsCtrl+Alt+L- search git logCtrl+Alt+S- search git statusCtrl+Alt+P- search running processes
This is probably the single most useful Fish plugin. If you install nothing else, install this one.
zoxide
Zoxide isn’t a Fish plugin, it’s a standalone tool that replaces cd with a smarter alternative. It learns which directories you visit and lets you jump to them with partial names. Type z proj instead of cd ~/Documents/work/projects.
# Install
sudo apt install zoxide # or: brew install zoxide
# Add to your Fish config
# In ~/.config/fish/config.fish:
zoxide init fish | source
I have a full guide on zoxide that covers setup and usage. It works with Fish, Zsh, and Bash.
Git plugins
fish-git-util
If you use Tide or Hydro, git information is already in your prompt. But if you want standalone git abbreviations and helpers, there are a few options.
The simplest approach is to define your own abbreviations:
# Add to ~/.config/fish/conf.d/git.fish
abbr -a gs git status
abbr -a ga git add
abbr -a gc git commit
abbr -a gp git push
abbr -a gl git log --oneline
abbr -a gco git checkout
abbr -a gb git branch
abbr -a gd git diff
Abbreviations expand when you press space or enter, so you see the full command in your history. I explain why this matters in Fish Shell abbreviations vs aliases.
Node and version management
nvm.fish
nvm.fish is a Node.js version manager built for Fish. It’s lighter than the Bash-based nvm and starts faster because it loads lazily. I have a detailed NVM with Fish Shell guide covering setup and usage.
fisher install jorgebucaran/nvm.fish
Usage:
nvm install 22 # install Node 22
nvm use 22 # switch to Node 22
nvm list # list installed versions
nvm current # show active version
It also reads .nvmrc and .node-version files automatically when you enter a directory.
Other useful plugins
autopair.fish
autopair.fish auto-closes brackets, quotes, and parentheses as you type. Press ( and it inserts () with the cursor between them.
fisher install jorgebucaran/autopair.fish
Small quality-of-life improvement.
sponge
sponge automatically removes failed commands from your Fish history. If a command exits with an error, it doesn’t pollute your history and autosuggestions.
fisher install meaningful-ooo/sponge
puffer-fish
puffer-fish expands .. to ../.. and ... to ../../.. as you type. Press . twice and it keeps adding parent directory references.
fisher install nickeb96/puffer-fish
My recommended setup
If I’m setting up Fish on a new machine, here’s what I install:
# Plugin manager
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
# Prompt (pick one)
fisher install IlanCosman/tide@v6
# OR for cross-shell: install Starship separately
# Must-have plugins
fisher install PatrickF1/fzf.fish
fisher install jorgebucaran/autopair.fish
fisher install meaningful-ooo/sponge
fisher install nickeb96/puffer-fish
Plus zoxide installed separately. That gives me a fast, functional shell with fuzzy search, smart directory navigation, and a good prompt. The whole setup takes about five minutes.
Comparison with Zsh plugins
If you’re coming from Zsh and wondering what the equivalents are:
| Zsh plugin/tool | Fish equivalent |
|---|---|
| Oh My Zsh | Fisher (plugin manager) |
| Powerlevel10k | Tide |
| zsh-autosuggestions | Built into Fish |
| zsh-syntax-highlighting | Built into Fish |
| zsh-completions | Built into Fish (man page parsing) |
| fzf (Zsh integration) | fzf.fish |
| zoxide (Zsh) | zoxide (same tool, Fish init) |
| nvm | nvm.fish |
I have a detailed Fish vs Zsh comparison and a broader Fish vs Bash vs Zsh article if you want more context on the differences. For Zsh users, I also have a list of the best Oh My Zsh plugins for comparison.