Rash - Rust to Shell Transpiler
Rash transpiles a safe subset of Rust to POSIX-compliant shell scripts, enabling you to write maintainable and type-safe shell scripts using familiar Rust syntax.
Why Rash?
- 🛡️ Safety First: Automatic protection against shell injection attacks
- 🔍 Compile-Time Verification: Catch errors before deployment
- 📦 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
Quick Start
Write Rust:
// install.rs
Get POSIX shell:
#!/bin/sh
# Generated by Rash v0.3.1
# POSIX-compliant shell script
IFS='
'
# Rash runtime functions
# Main script begins
# Execute main function
Installation
From crates.io (Recommended)
Binary Releases
Pre-built binaries are available for Linux and macOS:
# Linux x86_64
|
# macOS x86_64
|
# macOS ARM64
|
Using cargo-binstall
From Source
# Full build with all features
# Minimal build (smaller binary, ~2MB)
Usage
Basic Commands
# Transpile a Rust file to shell
# Check if a file is valid Rash
# Verify safety properties
# Start interactive playground (if built with playground feature)
CLI Options
)
)
)
)
Language Features
Supported Rust Subset
Rash supports a carefully chosen subset of Rust that maps cleanly to shell:
Variables and Types
let name = "Alice"; // String literals
let count = 42; // Integers
let flag = true; // Booleans
let user = env; // Environment variables
let result = capture; // Command output
Functions (Built-ins only)
// I/O operations
echo; // Print to stdout
eprint; // Print to stderr
// File system
mkdir_p; // Create directory recursively
write_file; // Write file
let content = read_file; // Read file
if path_exists // Check path
// Process management
exec; // Run command
let output = capture; // Capture command output
exit; // Exit with code
// Environment
set_env; // Set environment variable
let val = env; // Get environment variable
let val = env_var_or; // With default
Control Flow
// Conditionals
if condition else if other else
// Pattern matching (limited)
match value
Loops (requires loops
feature)
// Bounded iteration only
for i in 0..10
// While loops must have explicit bounds
let mut count = 0;
while count < 10
Safety Features
All generated scripts are protected against:
- Command Injection: All variables are properly quoted
- Path Traversal: Paths are validated and escaped
- Glob Expansion: Glob patterns are quoted when needed
- Word Splitting: IFS is set to safe value
- Undefined Variables:
set -u
catches undefined vars
Example of automatic safety:
let user_input = env;
exec; // Safe: becomes echo "$user_input"
Examples
See the examples/
directory for complete examples:
-
Basic
- Hello World - Simplest example
- Variables - Variable usage and escaping
- Functions - Built-in functions
-
Control Flow
- Conditionals - If/else statements
- Loops - Bounded iteration
-
Safety
- Injection Prevention - Security examples
- String Escaping - Special character handling
-
Real-World
- Minimal Installer - Bootstrap script
Shell Compatibility
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 |
Performance
Rash is designed for fast transpilation:
- Typical scripts transpile in <10ms
- Memory usage <10MB for most scripts
- Generated scripts add minimal overhead (~20 lines boilerplate)
Contributing
We welcome contributions! Please see our Contributing Guide for details.
Development Setup
# Clone the repository
# Run tests
# Run with all checks
# Build release binary
License
Rash is licensed under the MIT License. See LICENSE for details.
Acknowledgments
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
Roadmap
- Core transpilation engine
- Basic safety validation
- ShellCheck compliance
- Property-based testing
- Language server (LSP)
- Incremental compilation
- More shell targets (fish, PowerShell)
- Package manager integration