Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How does Fisher compare to Oh My Fish and Fundle? #481

jorgebucaran opened this issue Oct 23, 2018 · 4 comments

How does Fisher compare to Oh My Fish and Fundle? #481

jorgebucaran opened this issue Oct 23, 2018 · 4 comments


Copy link

@jorgebucaran jorgebucaran commented Oct 23, 2018

⚠️ Disclaimer: I'm the author of Fisher. I may skip something important. This information may be outdated by the time you read it. You should try them all and see which one works best for you.


Fisher is a package manager. Like npm, gem, brew. Its function is to fetch fish scripts from an URL (with a bias toward GitHub) and put them in place so that your shell can find them.

Fundle is also a package manager. It can add, update and remove packages. Like Fisher, it promotes a clean package structure. Its design is inspired by Vundle.vim, but it has an interactive interface too.

Oh My Fish is more than a package manager. It's a framework, package database, community-driven organization, and ecosystem. It started as an Oh My Zsh clone, making it appealing to newcomers and shell neophytes alike.

Oh My Fish and Fundle run code on startup to install (or enable) packages. This can potentially slow down your shell startup. YMMV. You may not care. Be your own judge. (See: danhper/fundle#38)

My only criticism to Oh My Fish is following non-standard conventions that bypass the shell's canonical autorun mechanism and create framework lock-in, e.g. *.load,,, files, vendor-specific environment variables, hooks, and events.

Technical Comparison

  • Fisher is a package manager
    • Requires fish >=2.1
    • Installs everything concurrently to maximize resource utilization
    • Takes advantage of GitHub, GitLab, and BitBucket raw tarball downloads to avoid using git if possible
    • Can install self-hosted packages over SSH using a URL like owner@host.xz:path/to/repo
    • Does not extend your configuration, modify your environment or run code on shell startup
    • Does not include additional tools to assist scaffolding or publishing packages by default
    • Uses a flat directory structure, avoiding the need to modify the path on shell startup
      • Installation prefix can be configured if needed
    • Supports Oh My Fish packages, but 100% compatibility is not a goal
      • Packages using Oh My Fish non-standard extensions like,, or recursive directories are supported (but strongly frowned upon as fish-shell has canonical alternatives and using Oh My Fish specific extensions create framework lock-in)
      • Packages using other Oh My Fish extensions such as init_ events, hooks, Oh My Fish core library functions, and Oh My Fish environment variables such as $OMF_PATH, $package, $path and $dependencies are not fully supported
    • Caches everything—if you've installed a package before, you can install it again offline
    • Uses a lockfile (fishfile) to guarantee repeatable installations across systems
    • Resolves dependencies deterministically by diffing your fishfile to find out what needs to be added, updated, or removed
      • Package dependencies will be installed in the same way on any system, regardless of installation order
    • Uses the shell's canonical autorun mechanism (configuration snippets) to support packages with key bindings
  • Oh My Fish is a framework
    • Requires fish >=2.2
    • It is usually installed through a curlpipe (manual installation is also available)
    • Installs packages sequentially (single-threaded)
    • Includes a package manager, startup configuration, core functions, and a package scaffolding tool
    • Modifies your fish function path on startup to force autoloading installed packages and add key bindings
      • Installing many packages slows down shell startup
    • Can search and install packages from the Oh My Fish package registry or by a URL
    • Uses non-standard file conventions, e.g.,,
  • Fundle is a package manager
    • Requires fish >=2.3
    • It is usually installed through a curlpipe (manual installation is also available)
    • Installs packages sequentially (single-threaded)
    • Does not support package dependencies (fishfile)
    • Requires modifying your fish configuration file (XDG_CONFIG_HOME/fish/ to add or remove packages
      • Installing many packages slows down shell startup
Copy link

@PatrickF1 PatrickF1 commented Oct 23, 2018

@jorgebucaran, Great write up! Why don't you make this a Wiki page for more visibility/permanence as we discussed in another issue?

Also, I think it's worth making it explicitly clear that for fisher, more packages != slower startup, to parallel what you wrote for OMF and Fundle (when you write More packages equal slower startup)

EDIT by owner: Join double post.

Repository owner deleted a comment from PatrickF1 Oct 23, 2018
Copy link
Owner Author

@jorgebucaran jorgebucaran commented Oct 23, 2018

@patrickf3139 Good suggestion. I'll add this information shortly. There's also a few more positive things I could say about Fundle and Oh My Fish. I'll try to add that as well. Thanks! 👋

Copy link

@lee2sman lee2sman commented Oct 31, 2018

Sorry if this isnt' appropriate place to post, but would be helpful (if you make a wiki / README) to write WHERE you can find these packages on the internet that you might want to install! If it exists somewhere in this documentation/repo, I haven't quite found it.

Copy link

@BarbzYHOOL BarbzYHOOL commented Nov 2, 2018

Great description

@jorgebucaran jorgebucaran pinned this issue Dec 16, 2018
Repository owner locked as resolved and limited conversation to collaborators Dec 29, 2018
@jorgebucaran jorgebucaran changed the title How does Fisher compare to Oh My fish and Fundle? How does Fisher compare to Oh My Fish and Fundle? Jan 25, 2019
@jorgebucaran jorgebucaran unpinned this issue Dec 5, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
4 participants