Rash (v6.22.0) is a bidirectional shell safety tool that purifies legacy bash scripts and lets you write shell scripts in REAL Rust with automatic safety guarantees.
REPL Debugging Enhancements - Released 2025-10-30
- Call Stack Tracking: Track function call hierarchy with StackFramestructs
- Purification-Aware Debugging: Compare original vs purified bash at breakpoints in real-time
- Interactive Development: See how bashrs transforms your scripts during debugging
See CHANGELOG.md for complete release notes.
- π‘οΈ Automatic Safety: Protection against shell injection, word splitting, glob expansion
- π Beyond Linting: Full AST semantic understanding - transforms code, doesn't just warn
- π¦ Zero Runtime Dependencies: Generated scripts work on any POSIX shell
- π― Deterministic Output: Same input always produces identical scripts
- β ShellCheck Compliant: All output passes strict linting
| What ShellCheck Does | What Rash Does | 
|---|---|
| β Rewrites to version-based deterministic IDs | |
| β
 Transforms to mkdir -p(idempotent) | |
| β Quotes all variables automatically | |
| Static pattern matching | Full AST semantic understanding | 
| Detects issues (read-only) | Fixes issues (read-write transformation) | 
Key Difference: ShellCheck tells you what's wrong. Rash understands your code's intent and rewrites it to be safe, deterministic, and idempotent β automatically.
# From crates.io (recommended)
cargo install bashrs
# Or from source
git clone https://github.com/paiml/bashrs
cd bashrs
cargo install --path rash// install.rs
#[rash::main]
fn main() {
    let version = env_var_or("VERSION", "1.0.0");
    let prefix = env_var_or("PREFIX", "/usr/local");
    echo("Installing MyApp {version} to {prefix}");
    mkdir_p("{prefix}/bin");
    mkdir_p("{prefix}/share/myapp");
    if exec("cp myapp {prefix}/bin/") {
        echo("β Binary installed");
    } else {
        eprint("β Failed to install binary");
        exit(1);
    }
}Transpile to safe POSIX shell:
$ bashrs build install.rs -o install.shBefore (messy bash):
#!/bin/bash
SESSION_ID=$RANDOM                      # Non-deterministic
mkdir /app/releases/$RELEASE            # Non-idempotent
rm /app/current                         # Fails if doesn't existAfter (purified by Rash):
#!/bin/sh
session_id="session-${version}"         # β
 Deterministic
mkdir -p "/app/releases/${release}"     # β
 Idempotent
rm -f "/app/current"                    # β
 Safe removal# Transpile Rust to shell
bashrs build input.rs -o output.sh
# Purify legacy bash scripts
bashrs purify messy.sh -o clean.sh
# Interactive REPL with debugging
bashrs repl
# Lint shell scripts
bashrs lint script.sh
# Test bash scripts
bashrs test script.sh
# Quality scoring
bashrs score script.sh
# Comprehensive audit
bashrs audit script.shThe Rash Book is the canonical source for all documentation:
Quick links:
Why the book?
- β All examples automatically tested
- β Always up-to-date with latest release
- β Comprehensive coverage of all features
- β Real-world examples and tutorials
| Metric | Status | 
|---|---|
| Quality Grade | A+ (Near Perfect) β | 
| Tests | 5,465 passing (0 failures) β | 
| Coverage | 88.71% (exceeds 85% target) β | 
| Mutation Testing | 92% kill rate β | 
| Property Tests | 52 properties (~26k+ cases) β | 
| ShellCheck | 100% compliant β | 
| Shell Compatibility | sh, dash, bash, ash, zsh, mksh β | 
Generated scripts are tested on:
| Shell | Version | Status | 
|---|---|---|
| POSIX sh | - | β Full support | 
| dash | 0.5.11+ | β Full support | 
| bash | 3.2+ | β Full support | 
| ash (BusyBox) | 1.30+ | β Full support | 
| zsh | 5.0+ | β Full support | 
| mksh | R59+ | β Full support | 
Rash is designed for fast transpilation:
- Rust-to-Shell: 21.1Β΅s transpile time
- Makefile Parsing: 0.034-1.43ms (70-320x faster than targets)
- Memory Usage: <10MB for most scripts
Rash provides a Model Context Protocol (MCP) server for AI-assisted shell script generation:
# Install MCP server
cargo install rash-mcp
# Run server
rash-mcpAvailable in the official MCP registry as io.github.paiml/rash.
We welcome contributions! See our Contributing Guide for details.
# Clone and test
git clone https://github.com/paiml/bashrs.git
cd bashrs
make test
# Run all quality checks
make validateRash is licensed under the MIT License. See LICENSE for details.
Rash is built with safety principles inspired by:
- ShellCheck for shell script analysis
- Oil Shell for shell language design
- The Rust community for memory safety practices
For comprehensive documentation, tutorials, and examples, visit The Rash Book.