fish (Friendly Interactive Shell)

fish, whose name stands for “friendly interactive shell,” is a Unix command-line shell created by Axel Liljencrantz and first released in 2005. Its official documentation describes it as a program that helps you operate your computer by starting other programs, offering a command-line interface focused on usability and interactive use. Where most shells trace their design back to the Bourne shell of the 1970s, fish was a clean-slate attempt to make the interactive command line pleasant by default.

The documentation highlights three defining qualities. First is an extensive user interface: syntax highlighting that colors commands as you type, autosuggestions that propose completions of whole commands based on your history, and tab completion with navigable, filterable selection lists. Second is that fish needs no configuration to be useful; it is designed to be ready out of the box, so the features that other shells require plugins and dotfiles to assemble are simply present. Third is a scripting language the project considers easy to learn and use, with a syntax for defining functions and writing programs that is more regular than traditional shell grammar.

That regularity comes at a deliberate cost: fish is not POSIX compatible. The project chose to abandon Bourne-shell syntax where it judged that syntax to be confusing or error-prone, replacing it with constructs the maintainers consider clearer. Variables, command substitution, conditionals, and loops in fish do not match the forms used by sh or Bash, so existing sh scripts do not run under fish, and fish scripts do not run under sh. This is a conscious trade of interoperability for consistency, and it is the single most important thing to know about the shell.

In practice, fish users keep this boundary in mind: they enjoy fish as their interactive shell while still writing portable automation in POSIX sh or invoking other interpreters when scripts must run elsewhere. Because fish reads the same environment and launches the same external programs as any other shell, it coexists comfortably with a POSIX-based system; only its own command and script syntax differs.

Developed in the open on GitHub, fish has grown a substantial community and continued to evolve, including a later rewrite of its implementation in the Rust programming language. Its lasting contribution has been to demonstrate that strong interactive ergonomics, such as autosuggestions and zero-configuration completion, could be defaults rather than add-ons, an influence visible in features later adopted or emulated by Zsh frameworks and other modern shells.