Skip to content

Dev Dust recursively scans directories to find development projects (Rust, Node.js, Python, .NET, Unity, etc.) and cleans their build artifacts to reclaim disk space.

License

Notifications You must be signed in to change notification settings

extrise/devdust

Repository files navigation

Dev Dust 🧹

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.

Features

  • 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

Supported Project Types

Click to expand full list of 18+ supported project types

Currently Supported

  • 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-*/)

Installation

Quick Install (Recommended)

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.sh

The 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 --help

Available 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

Interactive Menu Mode

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

Manual Installation

From Source

# Clone the repository
git clone https://github.com/extrise/devdust.git
cd devdust

# Build and install
cargo build --release
cargo install --path devdust-cli

Using Cargo

cargo install devdust

Note

Make sure ~/.cargo/bin is in your PATH to use the devdust command globally.

Platform-Specific Binaries

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

Usage

Basic Usage

# 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-run

Important

Always use --dry-run first when scanning important directories to preview what will be deleted before actually cleaning.

Advanced Options

# 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

Command-Line Options Reference

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, or json
--help -h Display help information
--version -V Display version information

Age Filter Examples

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.

Examples

Interactive Cleaning

$ 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!

Automated Cleaning

# Clean all projects older than 30 days
devdust ~/projects --older 30d --all --quiet

# Result: 12 projects cleaned, 5.4 GB freed

Safe Preview Mode

# Preview what would be deleted without actually deleting
devdust ~/projects --dry-run

# Output shows potential space savings without making changes

JSON Output for Scripting

# Get machine-readable output for automation
devdust ~/projects --format json --dry-run > projects.json

Safety Guidelines

Caution

devdust deletes files permanently. Follow these safety guidelines to avoid data loss:

Best Practices

  1. Always test first: Use --dry-run to preview changes before cleaning
  2. Start small: Test on a single project directory before scanning large areas
  3. Check your backups: Ensure important projects are backed up
  4. Review carefully: Read the list of artifact directories before confirming deletion
  5. Use age filters: Target old projects with --older to avoid cleaning active work

What Gets Deleted

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

What Gets Cleaned

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.

Building from Source

# 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

Running Tests

# 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 --release

Code Style

This 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

Contributing

Contributions are welcome! Here's how you can help:

Ways to Contribute

  • 🐛 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

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes and add tests
  4. Run tests and linting (cargo test && cargo clippy)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to your branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

Tip

Before submitting a PR, make sure all tests pass and the code is properly formatted with cargo fmt.

Troubleshooting

Common Issues

Issue: devdust: command not found

Solution: Make sure ~/.cargo/bin is in your PATH:

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Issue: 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.

License

MIT License - See LICENSE file for details.

Author

Ext Rise

Acknowledgments

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

About

Dev Dust recursively scans directories to find development projects (Rust, Node.js, Python, .NET, Unity, etc.) and cleans their build artifacts to reclaim disk space.

Topics

Resources

License

Stars

Watchers

Forks