MusePi



1389 compatibility tests Packaging status Discord invite

</p>


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

  Feature Description
50+ builtins echo, declare, read, complete, trap, ulimit, …
Full expansions brace, parameter, arithmetic, command/process substitution, globs, extglob, globstar
Control flow if/for/while/until/case, &&/\|\|, subshells, pipelines, etc.
Redirection here docs, here strings, fd duplication, process substitution redirects
Arrays & variables indexed/associative arrays, dynamic variables, standard well-known variables, etc.
Programmable completion Works with bash-completion out of the box
Job control background jobs, suspend/resume, fg/bg/jobs
🔷 Traps & options DEBUG/ERR/EXIT traps work; signal traps and options in progress

⌨️ User Experience

  Feature Description
Syntax highlighting Real-time as you type (reedline)
Auto-suggestions History-based hints as you type (reedline)
Rich prompts PS1/PROMPT_COMMAND, right prompts, starship compatible
TOML config ~/.config/brush/config.toml for persistent settings
🧪 Extras fzf/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](https://formulae.brew.sh/formula/brush): ```bash brew install brush ```
🐧 Installing on Arch Linux Arch Linux users can install `brush` from the official [extra repository](https://archlinux.org/packages/extra/x86_64/brush/): ```bash pacman -S brush ```
🚀 Installing prebuilt binaries via `cargo binstall` You may use [cargo binstall](https://github.com/cargo-bins/cargo-binstall) to install pre-built `brush` binaries. Once you've installed `cargo-binstall` you can run: ```bash 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](https://github.com/reubeno/brush/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.: ```bash 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](https://cli.github.com/), e.g.: ```bash 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: ```bash nix run 'github:NixOS/nixpkgs/nixpkgs-unstable#brush' -- --version ```
🔨 Building from sources To build from sources, first install a working (and recent) `rust` toolchain; we recommend installing it via [`rustup`](https://rustup.rs/). Then run: ```bash 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: * [`reedline`](https://github.com/nushell/reedline) — readline-like input and interactive features * [`clap`](https://github.com/clap-rs/clap) — command-line parsing * [`fancy-regex`](https://github.com/fancy-regex/fancy-regex) — regex support * [`tokio`](https://github.com/tokio-rs/tokio) — async runtime * [`nix`](https://github.com/nix-rust/nix) — Unix/POSIX APIs * [`criterion.rs`](https://github.com/bheisler/criterion.rs) — benchmarking * [`bash-completion`](https://github.com/scop/bash-completion) — completion test suite

Licensed under the MIT license.