The user-friendly command line shell. https://fishshell.com
  • Shell 57.9%
  • Rust 37.9%
  • Python 3%
  • HTML 0.3%
  • JavaScript 0.3%
  • Othr 0.3%
Find a fil
2026-10-14 23:08:24 +08:00
.builds Update BSD sourcehut images 2025-11-09 13:08:47 +01:00
.cargo xtask: add initial setup 2026-01-21 17:43:26 +01:00
.github build_tools/update-dependencies.sh 2026-10-05 22:55:40 +02:00
benchmarks Clean up shell scripts 2025-04-29 10:14:06 +02:00
build_tools release-notes.sh: recognize "Helped-by:" 2026-09-24 15:42:32 +00:00
cmake CMake: stop installing embedded files 2026-05-10 02:06:04 +08:00
contrib Release 4.9.3 2026-09-08 20:53:36 +02:00
crates Replace "let _ =" with "_ =" 2026-09-24 15:42:32 +00:00
doc_internal rename: crate::wchar::prelude -> crate::prelude 2025-12-19 19:37:11 +01:00
doc_src Document fish_hybrid_key_bindings 2026-10-12 18:59:49 +02:00
docker Update dependencies 2026-09-09 10:55:24 +02:00
etc Update /etc/config.fish to use current syntax 2020-05-08 15:20:36 +08:00
localization Typo fixed in completion 2026-10-05 22:56:07 +02:00
osx format: use 4-space indents in more files 2026-03-09 16:52:07 +11:00
share completions/brew: use upstream completions as a fallback 2026-10-14 23:08:24 +08:00
src Enable kitty keyboard protocol for Konsole > v26.08 2026-10-14 10:05:07 +02:00
tests completions/git: offer ".." when completing range-diff refs 2026-10-05 22:56:07 +02:00
updatecli.d updatecli: fix Rust MSRV updater source ID 2026-09-02 13:06:11 +02:00
vagrants/bsds lint: fix ShellCheck warnings 2026-04-22 14:23:25 +08:00
.clang-format .clang-format: match fish_test_helper style 2026-06-23 09:28:01 +02:00
.editorconfig format: use 2-space indents in toml files 2026-05-03 20:04:21 +08:00
.gitattributes tarball: include .cargo/config.toml again 2026-01-14 18:28:04 +01:00
.gitignore Prune stale gitignore rules 2026-04-22 00:09:57 +08:00
.rustfmt.toml build_tools/style.fish: check that {rustfmt,Cargo}.toml edition specs are in sync 2025-11-01 12:42:55 +01:00
BSDmakefile BSD/GNUmakefile: update to use new fish_run_tests target 2025-02-12 08:56:38 +08:00
build.rs Use getexecpath() to find the executable path on OpenBSD 2026-09-14 16:45:34 +02:00
Cargo.lock deps: synchronise fluent version with fluent-ftl-tools 2026-10-13 14:23:50 +08:00
Cargo.toml deps: synchronise fluent version with fluent-ftl-tools 2026-10-13 14:23:50 +08:00
CHANGELOG.rst completions/git: offer ".." when completing range-diff refs 2026-10-05 22:56:07 +02:00
clippy.toml Add disallowed-methods to clippy.toml 2026-06-08 12:28:48 -05:00
CMakeLists.txt format: use 4-space indents in more files 2026-03-09 16:52:07 +11:00
CODE_OF_CONDUCT.md Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
CONTRIBUTING.rst contributing: move mailing list down 2026-09-23 19:40:11 +02:00
COPYING update copyright years to be unbounded 2025-01-08 20:38:43 +08:00
deny.toml format: reformat TOML files 2026-05-23 01:00:27 +08:00
fish.pc.in Use pkg-config variables 2020-04-04 13:07:54 +02:00
fish.png fish.png: use the same thing we ship with the docs 2021-10-16 14:12:44 -07:00
fish.spec.in fish.spec: use %cmake_build to run tests 2026-09-14 23:22:51 +08:00
GNUmakefile editorconfig: set indent_style=tab for makefiles 2026-02-03 11:26:59 +11:00
pyproject.toml Don't try to download vermin during test execution 2026-06-18 14:09:43 +08:00
README.rst README: use vetted Cargo.lock in suggested cargo install command 2026-09-04 13:36:35 +02:00
SECURITY.md Add myself as SECURITY contact and reformat 2025-05-11 11:48:03 -07:00
uv.lock build_tools/update-dependencies.sh 2026-10-05 22:55:40 +02:00

`fish <https://fishshell.com/>`__ - the friendly interactive shell |Build Status|
=================================================================================

fish is a smart and user-friendly command line shell for macOS, Linux,
and the rest of the family. fish includes features like syntax
highlighting, autosuggest-as-you-type, and fancy tab completions that
just work, with no configuration required.

For downloads, screenshots and more, go to https://fishshell.com/.

Quick Start
-----------

fish generally works like other shells, like bash or zsh. A few
important differences can be found at
https://fishshell.com/docs/current/tutorial.html by searching for the
magic phrase “unlike other shells”.

Detailed user documentation is available by running ``help`` within
fish, and also at https://fishshell.com/docs/current/index.html

Getting fish
------------

macOS
~~~~~

fish can be installed:

-  using `Homebrew <https://brew.sh/>`__: ``brew install fish``
-  using `MacPorts <https://www.macports.org/>`__:
   ``sudo port install fish``
-  using the `installer from fishshell.com <https://fishshell.com/>`__
-  as a `standalone app from fishshell.com <https://fishshell.com/>`__

Note: The minimum supported macOS version is 10.12.

Packages for Linux
~~~~~~~~~~~~~~~~~~

Packages for Debian, Fedora, openSUSE, and Red Hat Enterprise
Linux/CentOS are available from the `openSUSE Build
Service <https://software.opensuse.org/download.html?project=shells%3Afish&package=fish>`__.

Packages for Ubuntu are available from the `fish
PPA <https://launchpad.net/~fish-shell/+archive/ubuntu/release-4>`__,
and can be installed using the following commands:

::

   sudo apt-add-repository ppa:fish-shell/release-4
   sudo apt update
   sudo apt install fish

Instructions for other distributions may be found at
`fishshell.com <https://fishshell.com>`__.

Windows
~~~~~~~

-  On Windows 10/11, fish can be installed under the WSL Windows Subsystem
   for Linux with the instructions for the appropriate distribution
   listed above under “Packages for Linux”, or from source with the
   instructions below.
-  fish can also be installed on all versions of Windows using
   `Cygwin <https://cygwin.com/>`__ or `MSYS2 <https://github.com/Berrysoft/fish-msys2>`__.

Building from source
~~~~~~~~~~~~~~~~~~~~

If packages are not available for your platform, GPG-signed tarballs are
available from `fishshell.com <https://fishshell.com/>`__ and
`fish-shell on
GitHub <https://github.com/fish-shell/fish-shell/releases>`__. See the
`Building <#building>`_ section for instructions.

Running fish
------------

Once installed, run ``fish`` from your current shell to try fish out!

Dependencies
~~~~~~~~~~~~

Running fish requires:

-  some common \*nix system utilities (currently ``mktemp``), in
   addition to the basic POSIX utilities (``cat``, ``cut``, ``dirname``,
   ``ls``, ``mkdir``, ``mkfifo``, ``rm``, ``sh``, ``sort``, ``tee``, ``tr``,
   ``uname`` and ``sed`` at least, but the full coreutils plus ``find`` and
   ``awk`` is preferred)

The following optional features also have specific requirements:

-  builtin commands that have the ``--help`` option or print usage
   messages require ``man`` for display
-  automated completion generation from manual pages requires Python 3.5+
-  the ``fish_config`` web configuration tool requires Python 3.5+ and a web browser
-  the :ref:`alt-o <shared-binds-alt-o>` binding requires the ``file`` program.
-  system clipboard integration (with the default Ctrl-V and Ctrl-X
   bindings) require either the ``xsel``, ``xclip``,
   ``wl-copy``/``wl-paste`` or ``pbcopy``/``pbpaste`` utilities
-  full completions for ``yarn`` and ``npm`` require the
   ``all-the-package-names`` NPM module
-  ``colorls`` is used, if installed, to add color when running ``ls`` on platforms
   that do not have color support (such as OpenBSD)

Building
--------

Dependencies
~~~~~~~~~~~~

Compiling fish requires:

-  Rust (version 1.85 or later), including cargo
-  CMake (version 3.15 or later)
-  a C compiler (for system feature detection and the test helper binary)
-  PCRE2 (headers and libraries) - optional, this will be downloaded if missing
-  gettext (only the msgfmt tool) - optional, for translation support
-  an Internet connection, as other dependencies will be downloaded automatically

Sphinx is also optionally required to build the documentation from a
cloned git repository.

Additionally, running the full test suite requires diff, git, Python 3.5+, pexpect, less, tmux and wget.

Building from source with CMake
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Rather than building from source, consider using a packaged build for your platform. Using the
steps below makes fish difficult to uninstall or upgrade. Release packages are available from the
links above, and up-to-date `development builds of fish are available for many platforms
<https://github.com/fish-shell/fish-shell/wiki/Development-builds>`__

To install into ``/usr/local``, run:

.. code:: shell

   mkdir build; cd build
   cmake ..
   cmake --build .
   sudo cmake --install .

The install directory can be changed using the
``-DCMAKE_INSTALL_PREFIX`` parameter for ``cmake``.

CMake Build options
~~~~~~~~~~~~~~~~~~~

In addition to the normal CMake build options (like ``CMAKE_INSTALL_PREFIX``), fish's CMake build has some other options available to customize it.

- Rust_COMPILER=path - the path to rustc. If not set, cmake will check $PATH and ~/.cargo/bin
- Rust_CARGO=path - the path to cargo. If not set, cmake will check $PATH and ~/.cargo/bin
- Rust_CARGO_TARGET=target - the target to pass to cargo. Set this for cross-compilation.
- WITH_DOCS=ON|OFF - whether to build the documentation. By default, this is ON when Sphinx is installed.
- FISH_INDENT_FOR_BUILDING_DOCS - useful for cross-compilation.
  Set this to the path to the ``fish_indent`` executable to use for building HTML docs.
  By default, ``${CMAKE_BINARY_DIR}/fish_indent`` will be used.
  If that's not runnable on the compile host,
  you can build a native one with ``cargo build --bin fish_indent`` and set this to ``$PWD/target/debug/fish_indent``.
- FISH_USE_SYSTEM_PCRE2=ON|OFF - whether to use an installed pcre2. This is normally autodetected.
- WITH_MESSAGE_LOCALIZATION=ON|OFF - whether to include translations.
- extra_functionsdir, extra_completionsdir and extra_confdir - to compile in an additional directory to be searched for functions, completions and configuration snippets

Building fish with Cargo
~~~~~~~~~~~~~~~~~~~~~~~~

You can also build fish with Cargo.
This example uses `uv <https://github.com/astral-sh/uv>`__ to install Sphinx (which is used for man-pages and ``--help`` options).
You can also install Sphinx another way and drop the ``uv run --no-managed-python`` prefix.

.. code:: shell

    git clone https://github.com/fish-shell/fish-shell
    cd fish-shell

    # Optional: check out a specific version rather than building the latest
    # development version.
    git checkout "$(git for-each-ref refs/tags/ | awk '$2 == "tag" { print $3 }' | tail -1)"

    uv run --no-managed-python \
        cargo install --locked --path .

This will place standalone binaries in ``~/.cargo/bin/``, but you can move them wherever you want.

To disable translations, disable the ``localize-messages`` feature by passing ``--no-default-features --features=embed-manpages`` to cargo.

You can also link this build statically (but not against glibc) and move it to other computers.

Here are the remaining advantages of a full installation, as currently done by CMake:

- Man pages like ``fish(1)`` installed in standard locations, easily accessible from outside fish.
- Separate files for builtins (e.g. ``$PREFIX/share/fish/man/man1/abbr.1``).
- A local copy of the HTML documentation, typically accessed via the ``help`` fish function.
  In Cargo builds, ``help`` will redirect to `<https://fishshell.com/docs/current/>`__
- Ability to use our CMake options extra_functionsdir, extra_completionsdir and extra_confdir,
  (also recorded in ``$PREFIX/share/pkgconfig/fish.pc``)
  which are used by some package managers to house third-party completions.
  Regardless of build system, fish uses ``$XDG_DATA_DIRS/{vendor_completion.d,vendor_conf.d,vendor_functions.d}``.

Contributing Changes to the Code
--------------------------------

See the `Guide for Developers <CONTRIBUTING.rst>`__.

Contact Us
----------

Questions, comments, rants and raves can be posted to the official fish
mailing list at https://lists.sourceforge.net/lists/listinfo/fish-users
or join us on our `matrix
channel <https://matrix.to/#/#fish-shell:matrix.org>`__. Or use the `fish tag
on Unix & Linux Stackexchange <https://unix.stackexchange.com/questions/tagged/fish>`__.
There is also a fish tag on Stackoverflow, but it is typically a poor fit.

Found a bug? Have an awesome idea? Please `open an
issue <https://github.com/fish-shell/fish-shell/issues/new>`__.

.. |Build Status| image:: https://github.com/fish-shell/fish-shell/actions/workflows/test.yml/badge.svg
   :target: https://github.com/fish-shell/fish-shell/actions/workflows/test.yml