A small Unix shell written in Rust.
Bash style scripting, job control, and pipelines that can carry typed tables. Autosuggestions, highlighting and themed prompts work out of the box, and an agent mode makes it a good shell for coding agents too.
curl -fsSL https://grf.sh | shLinux and macOS. Also through Homebrew, apt, dnf, Nix and cargo: all install options.
Features
Familiar syntax, with a few extras built in
grfsh runs the bash constructs you use every day. The interactive features and table commands ship with the shell, so there is nothing to install or configure.
>Scripting
Pipes, redirections on any file descriptor, loops, functions, arrays and parameter operators, checked against bash 5.3.
ifwhileforcase[[ =~ ]]${x#pat}${x/a/b}${!ref}{1..10}declare -Aheredocstrapset -euo pipefailprintf -v>Interactive
Suggestions from history as you type, highlighting, themed prompts and completion that knows the context.
autosuggestionshighlightingconfigure-prompttransient promptgit branchesssh hostsdid you meanzabbrvi mode>Jobs and processes
Each pipeline runs in its own process group, so stopping and resuming jobs works as in bash.
cmd &jobsfgbgCtrl-Zwaitkill %1timeout2>&1&>>Typed tables
Sizes compare as sizes and dates as dates. Piped into grep or wc, a table prints as plain text.
filesprocssearchgit-statusportsloadwhere size -gt 10mbsort-bygroup-bymath sumto json|csv|mdFor agents
A shell that coding agents can drive safely
Agents and CI jobs need a shell that never stops to ask, keeps output short, and says exactly what happened. grfsh has that built in.
>Agent mode
Pagers become cat, colors and git prompts are off, and nothing can wait on the terminal for input.
grfsh --agent -c ...>JSON results
Status, stdout, stderr, duration, final directory and changed environment in one object.
grfsh --json -c ...>Output budget
Long output keeps its first and last lines, and the full text is saved to a file you can search.
GRFSH_OUTPUT_LINES=400>Persistent sessions
A shell behind a Unix socket that keeps directory, variables and functions between requests.
grfsh --serve sock>Look before running
See every command after expansion, with globs resolved and risky deletes flagged, without running anything.
explain 'rm -rf $dir/*'>Exact edits
Replace text that must appear once, or pipe search results into replace. Atomic writes on every platform.
search x | replace x yRead the agent guide, or point your agent at grf.sh/llms.txt.
Performance
Measured against dash, bash and zsh
Mean wall time from hyperfine. Shorter bars are faster. Each panel has its own scale.
| Benchmark | grfsh | dash | bash | zsh |
|---|
Apple M2, macOS 26.6, system bash 3.2.57, dash, and zsh 5.9. Reproduce with scripts/bench.sh. The bash shipped with macOS is old, and a current bash does better on the string benchmark.
Why grfsh
How it compares on the features it focuses on
Default installs with no plugins or extra configuration, as of October 2026.
| grfsh | bash | zsh | fish | nushell |
|---|
Corrections are welcome in an issue. grfsh does not cover all of bash: see what is supported.
Get started
Pick up where you are
Guides for installing, moving over from another shell, and making grfsh your own.
Install
The install script, Homebrew, apt, dnf, Arch, Nix or cargo.
Read moreComing from bash
What carries over, what changes, and how to check your scripts.
Read moreComing from zsh
Built in replacements for oh-my-zsh, powerlevel10k and the usual plugins.
Read morePrompt themes
Five presets, a wizard with live previews, and a plain text theme file.
Read moreAgents and scripts
Everything a coding agent or CI job needs from a shell.
Read moreStability promise
What 1.x keeps stable, and how features are deprecated.
Read more