Clean build artifacts from development projects to reclaim disk space.
Dev Dust is a fast, cross-platform command-line tool written in Rust that recursively scans directories to find development projects and cleans their build artifacts (like target/, node_modules/, __pycache__/, etc.).
Warning
Dev Dust permanently deletes files and directories. Always review what will be deleted before confirming, or use --dry-run to preview changes safely.
- Fast - Written in Rust for maximum performance
- Smart Detection - Automatically detects 18+ project types
- Space Saver - Reclaim gigabytes of disk space
- Beautiful CLI - Colored output with clear information
- Safe - Confirmation prompts before deletion
- Flexible - Many options for customization
Click to expand full list of 18+ supported project types
-  Rust - Cargo projects (target/,.xwin-cache/)
-  Node.js/JavaScript - npm, yarn, pnpm (node_modules/,.next/,dist/,build/)
-  Python - pip, venv, pytest (__pycache__/,.venv/,.pytest_cache/)
-  .NET - C#, F# projects (bin/,obj/)
-  Unity - Game Engine projects (Library/,Temp/,Obj/)
-  Unreal Engine - Game projects (Binaries/,Intermediate/,Saved/)
-  Java Maven - Maven projects (target/)
-  Java/Kotlin Gradle - Gradle projects (build/,.gradle/)
-  CMake - C/C++ projects (build/,cmake-build-*/)
-  Haskell Stack - Stack projects (.stack-work/)
-  Scala SBT - SBT projects (target/,project/target/)
-  PHP Composer - Composer projects (vendor/)
-  Dart/Flutter - Flutter projects (build/,.dart_tool/)
-  Elixir - Mix projects (_build/,.elixir-tools/)
-  Swift - Swift Package Manager (.build/,.swiftpm/)
-  Zig - Zig projects (zig-cache/,zig-out/)
-  Godot - Godot 4.x projects (.godot/)
-  Jupyter - Jupyter notebooks (.ipynb_checkpoints/)
-  Go - Go modules (vendor/,bin/)
-  Ruby - Bundler projects (vendor/bundle/)
-  Terraform - Infrastructure projects (.terraform/)
- Docker - Build cache and volumes
-  Bazel - Build system (bazel-*/)
Tip
Use the provided installation script for the easiest setup experience. It handles building and installing devdust automatically.
# Clone the repository
git clone https://github.com/extrise/devdust.git
cd devdust
# Run the installation script
chmod +x install.sh
./install.shThe install script supports several options:
# Install to a custom directory
./install.sh --install-dir ~/.local
# Automatically install Rust if not found
./install.sh --auto-install-rust
# Run tests before installing
./install.sh --test
# Skip building (use existing binary)
./install.sh --skip-build
# Uninstall devdust
./install.sh --uninstall
# Show help
./install.sh --helpAvailable Flags:
| Flag | Description | 
|---|---|
| --install-dir DIR | Specify custom installation directory (default: ~/.local/bin) | 
| --auto-install-rust | Automatically install Rust if not detected | 
| --test | Run test suite before installing | 
| --skip-build | Skip building, use existing binary | 
| --uninstall | Remove devdust from system | 
| --help | Display help information | 
Running ./install.sh without arguments launches an interactive menu with colorful options:
- Install devdust - Automatically detects OS, checks/installs Rust, builds, and installs
- Uninstall devdust - Removes the installed binary
- Exit - Quit the installer
The installer includes:
- ✅ Automatic OS detection (Linux, macOS, Windows/WSL)
- ✅ Rust installation check and auto-install option
- ✅ Cross-platform support with proper PATH configuration
- ✅ Colorful, user-friendly interface
# Clone the repository
git clone https://github.com/extrise/devdust.git
cd devdust
# Build and install
cargo build --release
cargo install --path devdust-clicargo install devdustNote
Make sure ~/.cargo/bin is in your PATH to use the devdust command globally.
Pre-built binaries are available for multiple platforms via GitHub Releases:
| Platform | Architecture | Download | 
|---|---|---|
| Linux | x86_64 | devdust-linux-x86_64 | 
| Linux | ARM64 | devdust-linux-aarch64 | 
| macOS | Intel | devdust-macos-x86_64 | 
| macOS | Apple Silicon | devdust-macos-aarch64 | 
| Windows | x86_64 | devdust-windows-x86_64.exe | 
# Scan current directory
devdust
# Scan specific directories
devdust ~/projects ~/work
# Clean all projects without confirmation
devdust --all
# Dry run (show what would be deleted)
devdust --dry-runImportant
Always use --dry-run first when scanning important directories to preview what will be deleted before actually cleaning.
# Only show projects older than 30 days
devdust --older 30d
# Follow symbolic links
devdust --follow-symlinks
# Stay on same filesystem (don't cross mount points)
devdust --same-filesystem
# Quiet mode (minimal output)
devdust --quiet
# Combine options for powerful workflows
devdust ~/projects --older 7d --all --quiet| Option | Short | Description | 
|---|---|---|
| --all | -a | Clean all found projects without confirmation | 
| --follow-symlinks | -L | Follow symbolic links during scanning | 
| --same-filesystem | -s | Stay on the same filesystem (don't cross mount points) | 
| --older <TIME> | -o | Only show projects older than specified time | 
| --quiet | -q | Quiet mode with minimal output | 
| --dry-run | -n | Show what would be deleted without actually deleting | 
| --format <FORMAT> | -f | Output format: pretty,plain, orjson | 
| --help | -h | Display help information | 
| --version | -V | Display version information | 
devdust supports flexible time specifications for the --older flag:
| Format | Meaning | Example | 
|---|---|---|
| 30m | 30 minutes | devdust --older 30m | 
| 2h | 2 hours | devdust --older 2h | 
| 7d | 7 days | devdust --older 7d | 
| 2w | 2 weeks | devdust --older 2w | 
| 6M | 6 months | devdust --older 6M | 
| 1y | 1 year | devdust --older 1y | 
Tip
Use the --older flag to target stale projects that haven't been modified recently, keeping your active projects untouched.
$ devdust ~/projects
╔═══════════════════════════════════════╗
║        Dev Dust v1.0.0                ║
║  Clean Development Project Artifacts  ║
╚═══════════════════════════════════════╝
Scanning: /home/user/projects
Found: 5 projects with 2.3 GB of artifacts
● my-rust-app (Rust)
  Path: /home/user/projects/my-rust-app
  Artifacts: 1.2 GB
  Modified: 2 days ago
  → Artifact directories:
    • target
  ? Clean my-rust-app project? [y/N/a/q]: y
  ✓ Cleaned 1.2 GB
● old-website (Node.js)
  Path: /home/user/projects/old-website
  Artifacts: 450.5 MB
  Modified: 3 months ago
  → Artifact directories:
    • node_modules
  ? Clean old-website project? [y/N/a/q]: y
  ✓ Cleaned 450.5 MB
...
═══════════════════════════════════════════════════
Summary: 3 projects cleaned, 1.8 GB freed!# Clean all projects older than 30 days
devdust ~/projects --older 30d --all --quiet
# Result: 12 projects cleaned, 5.4 GB freed# Preview what would be deleted without actually deleting
devdust ~/projects --dry-run
# Output shows potential space savings without making changes# Get machine-readable output for automation
devdust ~/projects --format json --dry-run > projects.jsonCaution
devdust deletes files permanently. Follow these safety guidelines to avoid data loss:
- Always test first: Use --dry-runto preview changes before cleaning
- Start small: Test on a single project directory before scanning large areas
- Check your backups: Ensure important projects are backed up
- Review carefully: Read the list of artifact directories before confirming deletion
- Use age filters: Target old projects with --olderto avoid cleaning active work
devdust only deletes recognized build artifact directories. It never deletes:
-  Source code files (.rs,.js,.py, etc.)
-  Configuration files (Cargo.toml,package.json, etc.)
- Documentation and README files
-  Git repositories (.git/directories)
- Any files outside artifact directories
devdust will delete these artifact directories:
- ❌ Build outputs (target/,build/,dist/)
- ❌ Dependencies (node_modules/,vendor/)
- ❌ Cache directories (__pycache__/,.cache/)
- ❌ Temporary files (Temp/,.tmp/)
Note
All deleted artifacts can be regenerated by rebuilding your projects. devdust never touches source code or configuration files.
# Debug build (faster compilation, slower runtime)
cargo build
# Release build (optimized for performance)
cargo build --release
# Run tests
cargo test
# Run with logging enabled
RUST_LOG=debug cargo run
# Run clippy for linting
cargo clippy
# Format code
cargo fmt# Run all tests
cargo test
# Run tests with output
cargo test -- --nocapture
# Run specific test
cargo test test_format_size
# Run tests in release mode
cargo test --releaseThis project follows Rust best practices and conventions:
- Comprehensive inline documentation
- Clear error handling with custom error types
- Modular design with separation of concerns
- Extensive unit tests for core functionality
- Type safety and zero-cost abstractions
- Idiomatic Rust patterns
Contributions are welcome! Here's how you can help:
- 🐛 Report bugs: Open an issue with details about the problem
- 💡 Suggest features: Share ideas for new functionality
- 📝 Improve documentation: Fix typos or add examples
- 🔧 Submit pull requests: Fix bugs or implement features
- ⭐ Star the project: Show your support on GitHub
- Fork the repository
- Create a feature branch (git checkout -b feature/amazing-feature)
- Make your changes and add tests
- Run tests and linting (cargo test && cargo clippy)
- Commit your changes (git commit -m 'Add amazing feature')
- Push to your branch (git push origin feature/amazing-feature)
- Open a Pull Request
Tip
Before submitting a PR, make sure all tests pass and the code is properly formatted with cargo fmt.
Issue: devdust: command not found
Solution: Make sure ~/.cargo/bin is in your PATH:
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcIssue: Permission denied when cleaning
Solution: Some artifact directories may require elevated permissions. Run with appropriate permissions or skip those projects.
Issue: Symbolic links not followed
Solution: Use the --follow-symlinks flag to traverse symbolic links during scanning.
MIT License - See LICENSE file for details.
Ext Rise
- Email: nayanchandradas@hotmail.com
- GitHub: extrise
- Repository: github.com/extrise/devdust
devdust was built from scratch with modern Rust practices, inspired by similar tools in the ecosystem. Special thanks to the Rust community for excellent libraries like clap, walkdir, and colored.
Made with ❤️ and Rust | Report Issues | View Releases