A TUI (Terminal User Interface) for managing multiple Rust projects with ease. CarWash provides an intuitive interface for running cargo commands across multiple projects simultaneously, managing dependencies, and monitoring build outputs.
- Multi-Project Management: Automatically discover and manage all Rust projects in a directory tree
- Parallel Command Execution: Run cargo commands across multiple projects simultaneously
- Interactive Command Palette: Fuzzy search through cargo commands with vim-style navigation
- Real-time Output Monitoring: Watch command output with colored syntax highlighting
- Dependency Management: Check for outdated dependencies and update them interactively
- Workspace Support: Intelligently handles Cargo workspaces and member projects
- Beautiful UI: Modern, colorful interface with intuitive layouts
- Status Indicators: Real-time status updates with progress indicators
- Smart Color Coding: Errors (red), warnings (yellow), success (green)
- Scrollable Output: Navigate through large command outputs with keyboard shortcuts
- Multiple Tabs: Switch between running commands with arrow keys
- Project Selection: Select single or multiple projects with visual checkboxes
- Vim-style Navigation:
j/kfor up/down,h/lfor left/right - Quick Commands: Press
:to open command palette instantly - Space to Select: Toggle project selection with spacebar
- Esc to Cancel: Consistent escape behavior throughout
- Tab to Toggle: Switch command scope between selected and all projects
cargo install carwashSee the package on crates.io.
# Clone the repository
git clone https://github.com/epistates/carwash.git
cd carwash
# Build and install
cargo install --path .
# Or run directly
cargo run -- /path/to/your/rust/projectscarwash is available as a native package on NetBSD.
To install it, simply run:
pkgin install carwash# Run in current directory
carwash
# Run in specific directory
carwash ~/my-rust-projects
# Show help
carwash --help| Key | Action |
|---|---|
β/β or j/k |
Navigate projects |
β/β |
Switch output tabs |
Space |
Toggle project selection |
PgUp/PgDown |
Scroll output |
| Key | Action |
|---|---|
: |
Open command palette |
u |
Check for dependency updates |
? |
Show help screen |
q |
Quit application |
Ctrl+C |
Force quit |
- Press
:to open the command palette - Type to filter commands (fuzzy search)
- Use
β/βorj/kto select a command - Press
Tabto toggle between Selected Projects and All Projects - Press
Enterto execute the command - Press
Escto cancel
- test - Run tests
- check - Check for compilation errors
- build - Build projects
- build --release - Build with optimizations
- clean - Remove build artifacts
- clippy - Run Clippy lints
- fmt - Format code
- doc - Generate documentation
- update - Update dependencies
- bench - Run benchmarks
- run - Run the project
- Select a project
- Press
uto check for outdated dependencies - Use
Spaceto select dependencies to update - Press
ato select all,nto select none - Press
Enterto update selected dependencies - Press
Escto cancel
- Use
β/βto navigate through projects - Press
Spaceto select projects you want to test - Press
:to open command palette - Type "test" or select from list
- Ensure scope is "Selected Projects"
- Press
Enterto run tests in parallel - Switch between output tabs with
β/β
- Select a project (or multiple)
- Press
uto check for outdated dependencies - Review the list of outdated packages
- Select packages to update with
Space - Press
Enterto update
- Press
:to open command palette - Type "build"
- Press
Tabto change scope to "All Projects" - Press
Enterto build all projects in parallel
CarWash is built with:
- Ratatui: Modern TUI framework for Rust
- Tokio: Async runtime for parallel command execution
- crates.io API: For checking dependency versions
- Component-Based UI: Modular, maintainable UI components
- Redux-style State Management: Predictable state updates with reducer pattern
src/
βββ main.rs # Entry point and main event loop
βββ app.rs # Application state and reducer
βββ events.rs # Action and event definitions
βββ project.rs # Project discovery and parsing
βββ runner.rs # Command execution logic
βββ ui.rs # Main UI layout
βββ components/
βββ dependencies.rs # Dependency viewer
βββ help.rs # Help screen
βββ output.rs # Output tabs with scrolling
βββ palette.rs # Command palette
βββ projects.rs # Project list
βββ status.rs # Status bar
βββ text_input.rs # Text input component
βββ updater.rs # Update wizard
CarWash uses a carefully chosen color scheme optimized for terminal visibility:
- Cyan: Borders, titles, and interactive elements
- Green: Success states and selected items
- Yellow: Warnings and pending states
- Red: Errors and critical information
- Magenta: Special modes like update wizard
- Dark Gray: Secondary information and help text
Contributions are welcome! Areas for improvement:
- Configuration file support (
.carwashrc) - Custom command templates
- Project favorites/bookmarks
- Command history persistence
- Export/save command outputs
- Custom color themes
- Plugin system
- Remote project support
Built with:
- Ratatui - Amazing TUI framework
- Tokio - Powerful async runtime
- crates.io API - Crate metadata
Made with β€οΈ for the Rust community
For bugs, feature requests, or questions, please open an issue on GitHub.