What is the advantage over Oh My Fish? #69

beckclib opened this Issue Feb 3, 2016 · 1 comment


None yet

1 participant

beckclib commented Feb 3, 2016

Looks very professional and all, but I have been using Oh my Fish! more or less and now I found this.

Why should I change to Fisherman and what are the advantages over Oh my Fish?

@ghost ghost added QUESTION OMF labels Feb 3, 2016
@ghost ghost changed the title from What is the advantage over Oh MY Fish? to What is the advantage over Oh My Fish? Feb 3, 2016
@beckclib beckclib referenced this issue in oh-my-fish/oh-my-fish Feb 4, 2016

The state of Oh my Fish and other frameworks #255

ghost commented Feb 4, 2016 edited

Fisherman is a plugin manager for fish (and the plugin ecosystem).

See also the FAQ.


  • No configuration (no messing with your config.fish).
  • One file. Literally, put fisher.fish in ~/.config/fish/functions and you're done.
  • No impact on shell startup time.
  • Installs and updates plugins concurrently, and in the same session, so you don't have to open a new window to see the changes and without dangerous exec fish < /dev/tty reload hacks.
  • Backward compatible. Can run plugins and themes from oh-my-fish, wahoo, tackle, etc.
  • Community (slack).
  • Online search



  • fisherman is a regular fish function, "lazily" loaded, e.g, no impact on your shell startup time. oh-my-fish on the other hand, needs to initialize itself on startup and runs heavy computations that slow down your shell. Startup time is almost half a second with ~5 plugins, and can take up to two seconds with more than 10 plugins.

Flat tree

  • oh-my-fish performance decreases as you install plugins because it keeps track of each plugin's path internally, while fisherman merges all the installed paths into a single "flat-tree" that performs equally well, regardless of the number of plugins installed.


  • As you install more plugins, oh-my-fish's internal "path" array (which is traversed several times during the initialization process) gets larger and you pay a small speed penalty per each plugin, and that penalty is always more expensive than the last.

No events

  • oh-my-fish uses events as the initiliazation mechanism for plugins that run code on startup. Events can be cool for some things, but they are slower than just source your_file.fish. Also, it's impossible to determine whether a file declares events or not in advance. For this reason, oh-my-fish must source every .fish file it sees in order to load any event handlers that could be defined in it. This process occurs for every plugin. In addition, this mechanism does not follow the latest conf.d conventions in fish-shell which is how fisherman works.


  • fisherman updates and installs plugins concurrently. Performance varies among systems, but usually this means 5 to 10 times faster than traditional sequential updates.

Key bindings

  • fisherman has true key binding support. Your plugins can distribute key bindings without risk of conflict with other plugin's. The solution does not slow down your shell and respects any previously defined user key bindings as well.


  • fisherman lets you to install plugins that are local directories. Somewhat similar to npm link if you are familiar with that. This is convenient for quick prototyping plugins and prompts.
@ghost ghost closed this Feb 5, 2016
@ghost ghost locked and limited conversation to collaborators Feb 5, 2016
@ghost ghost unlocked this conversation Feb 24, 2016
@ghost ghost reopened this Mar 17, 2016
@ghost ghost locked and limited conversation to collaborators Mar 29, 2016
@ghost ghost unlocked this conversation Apr 6, 2016
@ghost ghost locked and limited conversation to collaborators Apr 7, 2016
@ghost ghost removed the OMF label Apr 21, 2016
@ghost ghost closed this Apr 21, 2016
This issue was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.