🚀 CarWash - Rust Project Manager
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.
✨ Features
🎯 Core Features
- 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
🎨 Enterprise-Grade UX
- 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
⌨️ Keyboard-Driven Workflow
- 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
📦 Installation
From crates.io (Recommended)
See the package on crates.io.
From source
# Clone the repository
# Build and install
# Or run directly
🚀 Quick Start
# Run in current directory
# Run in specific directory
# Show help
📖 Usage Guide
Navigation
| Key | Action |
|---|---|
↑/↓ or j/k |
Navigate projects |
←/→ |
Switch output tabs |
Space |
Toggle project selection |
PgUp/PgDown |
Scroll output |
Commands
| Key | Action |
|---|---|
: |
Open command palette |
u |
Check for dependency updates |
? |
Show help screen |
q |
Quit application |
Ctrl+C |
Force quit |
Command Palette
- 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
Available Commands
- 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
Dependency Updates
- 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
🎯 Workflow Examples
Running Tests Across Multiple Projects
- 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
←/→
Checking for Updates
- 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
Building All Projects
- Press
:to open command palette - Type "build"
- Press
Tabto change scope to "All Projects" - Press
Enterto build all projects in parallel
🏗️ Architecture
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
Project Structure
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
🎨 Customization
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
🤝 Contributing
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
📝 License
🙏 Acknowledgments
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.