Open-source project
pure-fish/pure avatar
pure-fish/pure

pure-fish/pure: Installation and Prompt Features for Fish

Pretty, minimal, and fast prompt for Fish shell inspired by sindresorhus/pure

1,601 stars149 forksShellMIT

At a glance

What is it?
pure-fish/pure is a customizable Fish shell prompt inspired by sindresorhus/pure. It suits Fish users who want a compact prompt with Git, environment, session, and container context, but it depends on Fish and Fisher.
Who is it for?
Adopt pure-fish/pure if you use Fish 3 or newer, prefer the Pure prompt style, and want repository and environment status beside the command line. Do not choose it if Fish is unavailable or you need a shell prompt that works across Bash, Zsh, PowerShell, and other shells.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why pure-fish/pure targets Fish users

pure-fish/pure replaces the default Fish prompt with a minimal interface modeled after the Zsh prompt in sindresorhus/pure. Its intended users are developers who spend most of their interactive time in Fish and want prompt context without displaying every available detail by default. The repository presents the prompt as "Pretty, minimal and fast," but the feature list makes that minimal presentation configurable rather than rigid.

The central problem is visibility without permanent clutter. Pure can indicate a failed previous command with a red prompt symbol, list exit statuses after failure, show command duration after five seconds, identify running jobs, and mark the root account. It can also place the working directory at the start of the prompt, shorten individual directory components, or use a compact single-line presentation. These controls let users decide how much information deserves space.

The project is specifically tied to Fish shell version 3 or newer. It is not a shell-agnostic prompt manager, and the documented installation path depends on Fisher. That focus also changes how alternatives should be assessed: a prompt written for another shell may support a similar visual style without supporting Fish initialization, Fish events, or Pure's documented configuration model.

How pure-fish/pure builds prompt context

Based on the repository layout, Pure is a Fish plugin rather than a separate prompt application. Its `conf.d/` directory holds startup configuration, while `functions/` contains the functions responsible for rendering prompt elements and interactive behavior. Installation through Fisher allows that Fish plugin structure to participate in the normal shell configuration.

The prompt assembles context from several categories. Git indicators can include the branch, a dirty marker, stash information, and ahead or behind counts. Supported display examples include `*` for a dirty repository, `≡` for stashed work, `⇡` for local commits ahead of the tracked branch, and `⇣` for commits to pull. Pure can also render combined counts such as `≡3 ⇡5 ⇣2`.

Environment and session information comes from Python virtual environments, AWS profiles, Kubernetes contexts and namespaces, Nix development shells, SSH sessions, root sessions, and Fish private mode. Container detection covers environments such as Docker, Podman, LXC, and LXD. Optional behavior includes command timing, system time, terminal title updates, Fish vi mode, transient prompts, and release checks at shell startup.

Configuration is described as a first-class part of the project. The README marks symbols, colors, and many context indicators as configurable, and it says that some behavior is controlled by feature flags. The documentation does not claim that every element is enabled by default. This distinction matters because the feature list is a capability inventory, not a specification of the default prompt.

Installing pure-fish/pure through Fisher

The README requires Fish shell `≥3.x` and Fisher. A new user should install Fish and Fisher through their respective project instructions before invoking the plugin command documented by pure-fish/pure. The repository does not provide a combined Fish plus Fisher installation command, so adding one here would imply a setup path that the project has not documented.

After Fisher is available, run the documented installation command:

shell
fisher install pure-fish/pure

The command tells Fisher to install the `pure-fish/pure` plugin from its repository name. Fish configuration then needs to be loaded for the prompt to appear. The README does not document an explicit reload command or describe the exact first rendered line, so those details should be checked in the installation output and the linked configuration guide.

The badges in the README identify Fish 3 and Fish 4 support, which is consistent with the stated `≥3.x` requirement. Before upgrading Fish, a user can use this installation path without choosing a version-specific package. After installation, the practical first check is whether the prompt symbol and expected context appear in an interactive Fish session. If they do not, the next useful source is the project's feature and configuration documentation, not an invented reload command.

Git and environment indicators to verify first

Git is Pure's most detailed documented integration. A user working across repositories should verify branch rendering, dirty state, stash count, and upstream divergence in the environments where these states actually occur. The listed symbols provide a compact vocabulary, while optional counts add detail. Pure also documents asynchronous Git updates when configured with `fish-async-prompt`, but that is an additional setup rather than part of the basic Fisher installation shown in the README.

The Kubernetes indicator deserves an explicit check if the prompt will run inside a cluster workflow. Pure can display both context and namespace, which can help prevent commands from being issued against an unintended context. AWS profiles, Python virtual environments, and Nix develop shells are similarly relevant, but the README does not state their defaults or exact variable mappings. Those details should be read in the linked documentation before assuming an indicator is active.

Container detection has broader appeal because the README names Docker, Podman, LXC, and LXD. It does not explain detection latency or the full implementation in the README. The repository contains tests and function files, but the excerpt does not provide enough code to claim how detection is scheduled or whether every named platform follows an identical path.

A sensible first-use review is therefore practical: open a Git repository, create a local modification, switch to a branch with stash or upstream information, activate a supported environment, and enter an SSH or container session. The expected output should be compared with the feature documentation rather than inferred from the README screenshots.

Prompt flexibility and operational trade-offs

Pure offers more control than a fixed prompt, but each added signal competes for horizontal space. Git counts, directory shortening, Kubernetes context, AWS profile, virtual environment, system time, and command duration can all compete for the same line. Compact mode, transient prompts, and disabled feature flags are relevant because the feature inventory includes many optional indicators. The README does not document a layout algorithm or rule for automatically hiding conflicting elements, so users should not assume that enabling everything will remain readable.

Release checking at startup introduces a separate consideration. Pure documents this as a feature, while recent release notes include "More resilient release checks." The notes confirm that release-check behavior receives maintenance attention, but they do not specify network behavior, timeouts, or offline failure handling in the README. Users on restricted or metered networks should inspect the relevant documentation before enabling it.

Command duration is shown only when execution exceeds five seconds, according to the README. That threshold limits long-running-command noise, although the prompt still incurs whatever Fish and plugin work is needed to render other elements. Pure's description includes "fast," but no benchmark or performance measurements are provided, so speed should not be treated as a quantified guarantee.

Prompt customization also introduces maintenance work when a user selects nondefault symbols, colors, directory transformations, or feature combinations. The MIT license permits use and modification under its terms, but the README does not discuss configuration compatibility across upgrades. Changes to feature flags or rendering functions could affect a customized setup.

pure-fish/pure versus cross-shell prompt alternatives

The closest documented alternative is sindresorhus/pure, the original Zsh implementation from which pure-fish/pure is ported. The distinction is the shell integration. pure-fish/pure targets Fish 3 and newer and uses the Fisher plugin ecosystem, while sindresorhus/pure targets Zsh. Their shared visual lineage does not make their configuration files or plugin loading mechanisms interchangeable.

The README also lists ports for other environments: pure.py provides a partial Python implementation, pure.go provides a partial Go implementation, and purs provides a Rust implementation. It links to Bash and PowerShell ports as well. These projects may serve users tied to a different shell, but the README explicitly describes some of them as partial implementations. A user requiring the full Fish feature set should compare shell support and documented integrations rather than selecting solely by language.

Another practical distinction is optionality. A cross-shell prompt may fit a machine used with several shells, while pure-fish/pure concentrates on Fish behavior such as Fish private mode and optional asynchronous updates through `fish-async-prompt`. This makes pure-fish/pure the more specific choice for a Fish-centered workstation, but it is the wrong tool when one configuration must serve multiple shell families.

Release activity and upgrade responsibility in pure-fish/pure

The repository is not archived, and its last push was on 2026-10-15. Recent releases include v4.19.0 on 2026-09-08, v4.19.1 on 2026-10-06, and v4.19.2 on 2026-10-15. The release notes identify Fish private-mode prefixes, more resilient release checks, and padding for command duration measured in milliseconds. These are specific signs of current work in prompt behavior and shell startup features.

Upgrade cost is not zero for users who customize the prompt. The project is MIT licensed, so its permissive licensing supports reuse and modification, subject to the license text. Configuration work still belongs to each user. The README does not document rollback procedures, migration notes, or a formal compatibility policy for renamed flags. Users maintaining local prompt customizations should compare release notes and relevant files before applying an update.

The repository contains `tests/`, `makefile`, `docs/`, and Fish source directories, but the README does not document a supported end-user upgrade command beyond plugin management through Fisher. The concrete maintenance judgement is therefore narrow: current releases are addressing recent Fish prompt details, while users with custom symbols, colors, or feature combinations still need to check what changed before moving to a new version.

Editorial conclusion

Adopt pure-fish/pure if you use Fish 3 or newer, prefer the Pure prompt style, and want repository and environment status beside the command line. Do not choose it if Fish is unavailable or you need a shell prompt that works across Bash, Zsh, PowerShell, and other shells. Before adoption, verify the feature flags and configuration defaults in the project documentation, confirm that Fisher is already installed, and inspect how release checks, Git rendering, and optional integrations affect your prompt.

Frequently asked questions

How do I install pure-fish/pure for Fish?

Install Fish shell `≥3.x` and Fisher first, then run `fisher install pure-fish/pure`. The README does not document a separate reload command or a combined prerequisite installation command.

What context can the pure-fish/pure prompt display?

Pure can display Git branch and repository state, Python virtual environments, AWS profiles, Kubernetes context and namespace, SSH details, root sessions, Fish private mode, running jobs, containers, and Nix development shells. Many of these elements are controlled by feature flags or configuration.

Does pure-fish/pure support the same features as the Zsh original?

pure-fish/pure is a Fish port inspired by sindresorhus/pure and has its own Fish-oriented feature set. The README does not claim feature parity or compatibility with the original Zsh prompt configuration.

Official sources

  1. License: MIT
  2. Project website
  3. pure-fish/pure on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/pure-fish-pure.svg)](https://hysenlabs.com/projects/pure-fish-pure)

Was this useful?