reubeno/brush

🐚bash/POSIX-compatible shell implemented in Rust 🦀

2,210

stars

1,105

commits

Rust

primary language

Sep 10, 2026

updated

brush.sh
bash
posix-shell
rust
script
shell

README



1389 compatibility tests Packaging status Discord invite


brush (Bo(u)rn(e) RUsty SHell) is a modern bash- and POSIX- compatible shell written in Rust. Run your existing scripts and .bashrc unchanged -- with syntax highlighting and auto-suggestions built in.

At a glance

✅ Your existing .bashrc just works—aliases, functions, completions, all of it.
✨ Syntax highlighting and auto-suggestions built in.
🧪 Validated against bash with ~1700 compatibility tests.
🧩 Easily embeddable in your Rust apps using brush_core::Shell.

⚠️ Not everything works yet: select and some edge cases aren't supported. See the Compatibility Reference for details.

Quick start:

$ cargo binstall brush-shell         # using cargo-binstall
$ brew install brush                 # using Homebrew
$ pacman -S brush                    # Arch Linux
$ cargo install --locked brush-shell # Build from sources

brush is ready for use as a daily driver. We test every change against bash to keep it that way.

More detailed installation instructions are available below.

✨ Features

🐚 bash Compatibility

FeatureDescription
50+ builtinsecho, declare, read, complete, trap, ulimit, ...
Full expansionsbrace, parameter, arithmetic, command/process substitution, globs, extglob, globstar
Control flowif/for/while/until/case, &&/||, subshells, pipelines, etc.
Redirectionhere docs, here strings, fd duplication, process substitution redirects
Arrays & variablesindexed/associative arrays, dynamic variables, standard well-known variables, etc.
Programmable completionWorks with bash-completion out of the box
Job controlbackground jobs, suspend/resume, fg/bg/jobs
🔷Traps & optionsDEBUG/ERR/EXIT traps work; signal traps and options in progress

⌨️ User Experience

FeatureDescription
Syntax highlightingReal-time as you type (reedline)
Auto-suggestionsHistory-based hints as you type (reedline)
Rich promptsPS1/PROMPT_COMMAND, right prompts, starship compatible
TOML config~/.config/brush/config.toml for persistent settings
🧪Extrasfzf/atuin support, zsh-style precmd/preexec hooks (experimental), VS Code terminal integration

Installation

When you run brush, it should look exactly as bash does on your system: it processes your .bashrc and other standard configuration. If you'd like to distinguish the look of brush from the other shells on your system, you may author a ~/.brushrc file.

🍺 Installing using Homebrew (macOS/Linux)

Homebrew users can install using the brush formula:

brew install brush
Installing on Arch Linux

Arch Linux users can install brush from the official extra repository:

pacman -S brush
icon Installing on MSYS2

MSYS2 users can install brush from the repository:

pacman -S mingw-w64-ucrt-x86_64-brush # or mingw-w64-clang-x86_64-brush or mingw-w64-clang-aarch64-brush
🚀 Installing prebuilt binaries via `cargo binstall`

You may use cargo binstall to install pre-built brush binaries. Once you've installed cargo-binstall you can run:

cargo binstall brush-shell
🚀 Installing prebuilt binaries from GitHub

We publish prebuilt binaries of brush for Linux (x86_64, aarch64) and macOS (aarch64) to GitHub for official releases. You can manually download and extract the brush binary from one of the archives published there, or otherwise use the GitHub CLI to download it, e.g.:

gh release download --repo reubeno/brush --pattern "brush-x86_64-unknown-linux-gnu.*"

After downloading the archive for your platform, you may verify its authenticity using the GitHub CLI, e.g.:

gh attestation verify brush-x86_64-unknown-linux-gnu.tar.gz --repo reubeno/brush
🐧 Installing using Nix

If you are a Nix user, you can use the registered version:

nix run 'github:NixOS/nixpkgs/nixpkgs-unstable#brush' -- --version
📦 Installing on Fedora (community package)

brush isn't packaged in Fedora's official repositories, but a community-maintained brush-shell package is available from Terra, a separately maintained, third-party repository for Fedora and its derivatives.

Once you've enabled the Terra repository:

dnf install brush-shell
🔨 Building from sources

To build from sources, first install a working (and recent) rust toolchain; we recommend installing it via rustup. Then run:

cargo install --locked brush-shell

Community & Contributing

This project started out of curiosity and a desire to learn—we're keeping that attitude. If something doesn't work the way you'd expect, let us know!

Other POSIX-ish shells implemented in non-C/C++ languages:

🙏 Credits

This project relies on many excellent OSS crates:


Licensed under the MIT license.

Contributors

(top 30 of 37)

reubeno

800 commits

dependabot[bot]

166 commits

Elsie19

54 commits

lu-zero

28 commits

reubeno/brush

🐚bash/POSIX-compatible shell implemented in Rust 🦀

2,210

stars

1,105

commits

Rust

primary language

Sep 10, 2026

updated

brush.sh
bash
posix-shell
rust
script
shell

README



1389 compatibility tests Packaging status Discord invite


brush (Bo(u)rn(e) RUsty SHell) is a modern bash- and POSIX- compatible shell written in Rust. Run your existing scripts and .bashrc unchanged -- with syntax highlighting and auto-suggestions built in.

At a glance

✅ Your existing .bashrc just works—aliases, functions, completions, all of it.
✨ Syntax highlighting and auto-suggestions built in.
🧪 Validated against bash with ~1700 compatibility tests.
🧩 Easily embeddable in your Rust apps using brush_core::Shell.

⚠️ Not everything works yet: select and some edge cases aren't supported. See the Compatibility Reference for details.

Quick start:

$ cargo binstall brush-shell         # using cargo-binstall
$ brew install brush                 # using Homebrew
$ pacman -S brush                    # Arch Linux
$ cargo install --locked brush-shell # Build from sources

brush is ready for use as a daily driver. We test every change against bash to keep it that way.

More detailed installation instructions are available below.

✨ Features

🐚 bash Compatibility

FeatureDescription
50+ builtinsecho, declare, read, complete, trap, ulimit, ...
Full expansionsbrace, parameter, arithmetic, command/process substitution, globs, extglob, globstar
Control flowif/for/while/until/case, &&/||, subshells, pipelines, etc.
Redirectionhere docs, here strings, fd duplication, process substitution redirects
Arrays & variablesindexed/associative arrays, dynamic variables, standard well-known variables, etc.
Programmable completionWorks with bash-completion out of the box
Job controlbackground jobs, suspend/resume, fg/bg/jobs
🔷Traps & optionsDEBUG/ERR/EXIT traps work; signal traps and options in progress

⌨️ User Experience

FeatureDescription
Syntax highlightingReal-time as you type (reedline)
Auto-suggestionsHistory-based hints as you type (reedline)
Rich promptsPS1/PROMPT_COMMAND, right prompts, starship compatible
TOML config~/.config/brush/config.toml for persistent settings
🧪Extrasfzf/atuin support, zsh-style precmd/preexec hooks (experimental), VS Code terminal integration

Installation

When you run brush, it should look exactly as bash does on your system: it processes your .bashrc and other standard configuration. If you'd like to distinguish the look of brush from the other shells on your system, you may author a ~/.brushrc file.

🍺 Installing using Homebrew (macOS/Linux)

Homebrew users can install using the brush formula:

brew install brush
Installing on Arch Linux

Arch Linux users can install brush from the official extra repository:

pacman -S brush
icon Installing on MSYS2

MSYS2 users can install brush from the repository:

pacman -S mingw-w64-ucrt-x86_64-brush # or mingw-w64-clang-x86_64-brush or mingw-w64-clang-aarch64-brush
🚀 Installing prebuilt binaries via `cargo binstall`

You may use cargo binstall to install pre-built brush binaries. Once you've installed cargo-binstall you can run:

cargo binstall brush-shell
🚀 Installing prebuilt binaries from GitHub

We publish prebuilt binaries of brush for Linux (x86_64, aarch64) and macOS (aarch64) to GitHub for official releases. You can manually download and extract the brush binary from one of the archives published there, or otherwise use the GitHub CLI to download it, e.g.:

gh release download --repo reubeno/brush --pattern "brush-x86_64-unknown-linux-gnu.*"

After downloading the archive for your platform, you may verify its authenticity using the GitHub CLI, e.g.:

gh attestation verify brush-x86_64-unknown-linux-gnu.tar.gz --repo reubeno/brush
🐧 Installing using Nix

If you are a Nix user, you can use the registered version:

nix run 'github:NixOS/nixpkgs/nixpkgs-unstable#brush' -- --version
📦 Installing on Fedora (community package)

brush isn't packaged in Fedora's official repositories, but a community-maintained brush-shell package is available from Terra, a separately maintained, third-party repository for Fedora and its derivatives.

Once you've enabled the Terra repository:

dnf install brush-shell
🔨 Building from sources

To build from sources, first install a working (and recent) rust toolchain; we recommend installing it via rustup. Then run:

cargo install --locked brush-shell

Community & Contributing

This project started out of curiosity and a desire to learn—we're keeping that attitude. If something doesn't work the way you'd expect, let us know!

Other POSIX-ish shells implemented in non-C/C++ languages:

🙏 Credits

This project relies on many excellent OSS crates:


Licensed under the MIT license.

Contributors

(top 30 of 37)

reubeno

800 commits

dependabot[bot]

166 commits

Elsie19

54 commits

lu-zero

28 commits

Languages

Rust

97.3%

Python

2.1%