AbdullahHassan192/degunk

Rust

0

28 commits

updated Oct 6, 2026

See the code

See what people are saying

SourceMessageScoreDate

Building too many projects kept burning through my 512GB SSD, so I built a simple TUI app to hunt down dead projects and save some space (r/SideProject)

Lately I've been spinning up way more uni projects and random test projects than I used to (a part of which has to do with the ease which AI enables us to do so). The problem is that after a bit of time, I completely forget half of these projects even exist. A few weeks ago my 512 GB laptop started…

1

Oct 6, 2026

README

degunk

Developers lose tens of gigabytes of disk space to old node_modules, venv, target, and build caches in projects they haven't touched in months. degunk finds those discarded folders, shows you how long it's been since you committed to each repo, and lets you reclaim disk space safely.

degunk demo


Understanding the dashboard

When you run degunk, it groups build artifacts by project and surfaces safety information before you delete anything:

  • Safety status (✓ Safe to clean, ● Dirty worktree, ↑ Unpushed, ⚠ No lockfile): Combines Git working tree state and dependency lockfile verification into an instant recommendation:
    • ✓ Safe to clean: The Git repository is clean (or not tracked by Git) and a dependency lockfile is present. Build artifacts can be safely reclaimed and restored identically anytime.
    • ● Dirty worktree: Uncommitted changes exist in the working tree. Cleaning is discouraged while active work is in flight.
    • ↑ Unpushed: Local commits have not been pushed to the remote repository.
    • ⚠ No lockfile: Missing lockfile (package-lock.json, Cargo.lock, poetry.lock, etc.). Reinstalling dependencies later could resolve newer, untested versions.
  • Git status (✓ Clean, ● N dirty, ↑ N unpushed): Shows the exact repository state, detailing modified file counts and commits ahead of origin.
  • Inactivity: Measures how many days have passed since your last Git commit to that repo (for example, Active today, 90d ago, 210d ago). This helps you spot forgotten projects that are safe to clean.
  • Projects vs Global caches: Press Tab to switch between project build directories (node_modules, target, .venv) and central developer caches (Cargo registries, Go modules, npm cache, Playwright browsers, and local Ollama model weights).
  • Trash vs Permanent delete: Files move to your operating system's Recycle Bin or Trash by default, so you can restore anything you delete by accident.

Installation

Homebrew (macOS and Linux)

brew install abdullahhassan192/tap/degunk

Scoop (Windows)

scoop bucket add degunk https://github.com/AbdullahHassan192/scoop-degunk
scoop install degunk

Shell script (macOS and Linux)

curl -fsSL https://raw.githubusercontent.com/AbdullahHassan192/degunk/main/scripts/install.sh | sh

PowerShell (Windows)

irm https://raw.githubusercontent.com/AbdullahHassan192/degunk/main/scripts/install.ps1 | iex

Cargo

cargo install degunk

Prebuilt binaries

Precompiled standalone binaries for Windows (x86_64), macOS (Apple Silicon and Intel), and Linux (x86_64 and ARM64) are available on the GitHub Releases page.


Quick start

Run degunk to open the interactive path picker, or scan folders directly:

# Open the interactive path picker
degunk

# Scan the current directory immediately
degunk .

# Scan specific project folders or drives
degunk D:\projects ~/code

# Filter by ecosystem when launching
degunk . --types node,rust,python

# Filter by inactivity age (days)
degunk . --older-than 60

# Filter by minimum artifact size
degunk . --min-size 100MB

Keyboard shortcuts

KeyAction
↑ / k, ↓ / jMove selection up or down
SpaceSelect or deselect item (selecting a project selects all its build targets)
Enter / eExpand or collapse project folder
EExpand all or collapse all project groups
TabSwitch between Projects and Global Caches views
sCycle sort order (Size, Inactivity age, Name, Ecosystem)
/Search projects and filter by token
pOpen the path picker to scan a different drive or directory
dOpen deletion confirmation modal
rRescan current paths and global caches
q / Ctrl+CQuit

Search syntax

Type / to search names, folder names, and paths. You can also mix in filter tokens:

  • eco:rust, eco:node, eco:python, eco:unreal, eco:android, eco:rn, eco:r
  • size:>100m, size:>1g, size:<50m
  • days:>60, age:>30
  • safe:yes, safe:no
  • locked:yes, locked:no
  • git:clean, git:dirty

Example: /eco:python size:>100m days:>60 git:clean


Supported ecosystems and targets

View all 28 supported ecosystems and artifact directories
EcosystemTarget foldersKey markersLockfile
Node.js / Modern Webnode_modules, .next, .nuxt, .turbo, .svelte-kit, .angular, .astro, .parcel-cache, .vite, .output, .swc, .nitro, .wrangler, .vercel, .netlify, .sst, .cache, storybook-staticpackage.json, wrangler.toml, vercel.json, nitro.config.*, etc.package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb
Python.venv, venv, env, __pycache__, .pytest_cache, .mypy_cache, .ruff_cache, dist, build, *.egg-info, .tox, .nox, .pixi, .ipynb_checkpointspyproject.toml, requirements.txt, Pipfile, setup.pypoetry.lock, Pipfile.lock, uv.lock, pdm.lock
RusttargetCargo.tomlCargo.lock
Java / Kotlinbuild, .gradle, targetbuild.gradle, build.gradle.kts, pom.xmlgradle.lockfile
Android / NDK.cxx, .externalNativeBuild, buildbuild.gradle, build.gradle.kts, CMakeLists.txt, settings.gradlegradle.lockfile
React Native / Expo.expo, .metro-health-check, ios/build, android/app/buildapp.json, package.json, metro.config.js, expo-env.d.tspackage-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb
Govendorgo.modgo.sum
.NET / C#bin, obj, BenchmarkDotNet.Artifacts, TestResults*.csproj, *.fsproj, *.slnpackages.lock.json
C / C++build, CMakeFiles, cmake-build-*, builddir, .vs, vcpkg_installedCMakeLists.txt, Makefile, meson.build, vcpkg.json, *.slnvcpkg-lock.json
Unreal EngineIntermediate, Saved, DerivedDataCache, Binaries*.uproject, *.upluginN/A
Embedded / PlatformIO.pioplatformio.iniN/A
iOS / Swift.build, DerivedData, Pods, CarthagePackage.swift, Podfile, Cartfile, *.xcodeproj, *.xcworkspacePackage.resolved, Podfile.lock, Cartfile.resolved
Flutter / Dart.dart_tool, buildpubspec.yamlpubspec.lock
PHPvendorcomposer.jsoncomposer.lock
Elixir_build, depsmix.exsmix.lock
Zigzig-cache, zig-outbuild.zig, build.zig.zonbuild.zig.zon
Godot.godotproject.godotN/A
UnityLibrary, Temp, ObjProjectSettingsN/A
Ruby.bundle, vendorGemfileGemfile.lock
Scalatarget, .bloop, .metalsbuild.sbtN/A
Haskell.stack-work, dist-newstylestack.yaml, *.cabal, cabal.projectstack.yaml.lock, cabal.project.freeze
OCaml_builddune-project, dunedune.lock
R.Rproj.user, .Rcache, renv/library*.Rproj, renv.lock, DESCRIPTIONrenv.lock
Elmelm-stuffelm.jsonN/A
Clojure.cpcache, .shadow-cljs, .calvaproject.clj, deps.edn, shadow-cljs.ednN/A
Julia.juliaProject.toml, JuliaProject.tomlManifest.toml
Terraform / IaC.terraform, .serverless, .aws-sam*.tf, *.tofu, serverless.yml, samconfig.toml.terraform.lock.hcl
Coverage & Testscoverage, .nyc_output, htmlcov, test-results, playwright-report, .playwrightProject test runners & configsN/A

Global tool caches

Press Tab in the TUI to inspect central tool caches that live outside your project folders:

  • Package managers & registries: Cargo checkouts and git registries, Go module cache (GOPATH/pkg/mod), npm, pnpm, Yarn, pip, uv, Bun, Pub, NuGet, Ruby gems, Coursier, vcpkg binary archives and download cache, Homebrew bottles, R renv cache.
  • Compilers & build systems: Go build cache, ccache, sccache, Rustup toolchains, Zig cache, Unreal Engine Global DDC, Gradle daemon logs and caches, Android build artifacts, Android emulator AVD images, Xcode DerivedData, CocoaPods, Terraform plugins, Docker Desktop WSL virtual disk (ext4.vhdx).
  • Browser binaries: Playwright standalone browser builds (Chromium, Firefox, WebKit), Cypress desktop binary cache.
  • AI model weights: Ollama models (~/.ollama/models), LM Studio, HuggingFace Hub, PyTorch Hub cache, Whisper weights.
  • Editor caches: JetBrains system caches, VS Code workspace storage, Cursor workspace storage.

Development

# Check compiler diagnostics
cargo check

# Run test suite
cargo test

AbdullahHassan192/degunk

Rust

0

28 commits

updated Oct 6, 2026

See the code

See what people are saying

SourceMessageScoreDate

Building too many projects kept burning through my 512GB SSD, so I built a simple TUI app to hunt down dead projects and save some space (r/SideProject)

Lately I've been spinning up way more uni projects and random test projects than I used to (a part of which has to do with the ease which AI enables us to do so). The problem is that after a bit of time, I completely forget half of these projects even exist. A few weeks ago my 512 GB laptop started…

1

Oct 6, 2026

README

degunk

Developers lose tens of gigabytes of disk space to old node_modules, venv, target, and build caches in projects they haven't touched in months. degunk finds those discarded folders, shows you how long it's been since you committed to each repo, and lets you reclaim disk space safely.

degunk demo


Understanding the dashboard

When you run degunk, it groups build artifacts by project and surfaces safety information before you delete anything:

  • Safety status (✓ Safe to clean, ● Dirty worktree, ↑ Unpushed, ⚠ No lockfile): Combines Git working tree state and dependency lockfile verification into an instant recommendation:
    • ✓ Safe to clean: The Git repository is clean (or not tracked by Git) and a dependency lockfile is present. Build artifacts can be safely reclaimed and restored identically anytime.
    • ● Dirty worktree: Uncommitted changes exist in the working tree. Cleaning is discouraged while active work is in flight.
    • ↑ Unpushed: Local commits have not been pushed to the remote repository.
    • ⚠ No lockfile: Missing lockfile (package-lock.json, Cargo.lock, poetry.lock, etc.). Reinstalling dependencies later could resolve newer, untested versions.
  • Git status (✓ Clean, ● N dirty, ↑ N unpushed): Shows the exact repository state, detailing modified file counts and commits ahead of origin.
  • Inactivity: Measures how many days have passed since your last Git commit to that repo (for example, Active today, 90d ago, 210d ago). This helps you spot forgotten projects that are safe to clean.
  • Projects vs Global caches: Press Tab to switch between project build directories (node_modules, target, .venv) and central developer caches (Cargo registries, Go modules, npm cache, Playwright browsers, and local Ollama model weights).
  • Trash vs Permanent delete: Files move to your operating system's Recycle Bin or Trash by default, so you can restore anything you delete by accident.

Installation

Homebrew (macOS and Linux)

brew install abdullahhassan192/tap/degunk

Scoop (Windows)

scoop bucket add degunk https://github.com/AbdullahHassan192/scoop-degunk
scoop install degunk

Shell script (macOS and Linux)

curl -fsSL https://raw.githubusercontent.com/AbdullahHassan192/degunk/main/scripts/install.sh | sh

PowerShell (Windows)

irm https://raw.githubusercontent.com/AbdullahHassan192/degunk/main/scripts/install.ps1 | iex

Cargo

cargo install degunk

Prebuilt binaries

Precompiled standalone binaries for Windows (x86_64), macOS (Apple Silicon and Intel), and Linux (x86_64 and ARM64) are available on the GitHub Releases page.


Quick start

Run degunk to open the interactive path picker, or scan folders directly:

# Open the interactive path picker
degunk

# Scan the current directory immediately
degunk .

# Scan specific project folders or drives
degunk D:\projects ~/code

# Filter by ecosystem when launching
degunk . --types node,rust,python

# Filter by inactivity age (days)
degunk . --older-than 60

# Filter by minimum artifact size
degunk . --min-size 100MB

Keyboard shortcuts

KeyAction
↑ / k, ↓ / jMove selection up or down
SpaceSelect or deselect item (selecting a project selects all its build targets)
Enter / eExpand or collapse project folder
EExpand all or collapse all project groups
TabSwitch between Projects and Global Caches views
sCycle sort order (Size, Inactivity age, Name, Ecosystem)
/Search projects and filter by token
pOpen the path picker to scan a different drive or directory
dOpen deletion confirmation modal
rRescan current paths and global caches
q / Ctrl+CQuit

Search syntax

Type / to search names, folder names, and paths. You can also mix in filter tokens:

  • eco:rust, eco:node, eco:python, eco:unreal, eco:android, eco:rn, eco:r
  • size:>100m, size:>1g, size:<50m
  • days:>60, age:>30
  • safe:yes, safe:no
  • locked:yes, locked:no
  • git:clean, git:dirty

Example: /eco:python size:>100m days:>60 git:clean


Supported ecosystems and targets

View all 28 supported ecosystems and artifact directories
EcosystemTarget foldersKey markersLockfile
Node.js / Modern Webnode_modules, .next, .nuxt, .turbo, .svelte-kit, .angular, .astro, .parcel-cache, .vite, .output, .swc, .nitro, .wrangler, .vercel, .netlify, .sst, .cache, storybook-staticpackage.json, wrangler.toml, vercel.json, nitro.config.*, etc.package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb
Python.venv, venv, env, __pycache__, .pytest_cache, .mypy_cache, .ruff_cache, dist, build, *.egg-info, .tox, .nox, .pixi, .ipynb_checkpointspyproject.toml, requirements.txt, Pipfile, setup.pypoetry.lock, Pipfile.lock, uv.lock, pdm.lock
RusttargetCargo.tomlCargo.lock
Java / Kotlinbuild, .gradle, targetbuild.gradle, build.gradle.kts, pom.xmlgradle.lockfile
Android / NDK.cxx, .externalNativeBuild, buildbuild.gradle, build.gradle.kts, CMakeLists.txt, settings.gradlegradle.lockfile
React Native / Expo.expo, .metro-health-check, ios/build, android/app/buildapp.json, package.json, metro.config.js, expo-env.d.tspackage-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb
Govendorgo.modgo.sum
.NET / C#bin, obj, BenchmarkDotNet.Artifacts, TestResults*.csproj, *.fsproj, *.slnpackages.lock.json
C / C++build, CMakeFiles, cmake-build-*, builddir, .vs, vcpkg_installedCMakeLists.txt, Makefile, meson.build, vcpkg.json, *.slnvcpkg-lock.json
Unreal EngineIntermediate, Saved, DerivedDataCache, Binaries*.uproject, *.upluginN/A
Embedded / PlatformIO.pioplatformio.iniN/A
iOS / Swift.build, DerivedData, Pods, CarthagePackage.swift, Podfile, Cartfile, *.xcodeproj, *.xcworkspacePackage.resolved, Podfile.lock, Cartfile.resolved
Flutter / Dart.dart_tool, buildpubspec.yamlpubspec.lock
PHPvendorcomposer.jsoncomposer.lock
Elixir_build, depsmix.exsmix.lock
Zigzig-cache, zig-outbuild.zig, build.zig.zonbuild.zig.zon
Godot.godotproject.godotN/A
UnityLibrary, Temp, ObjProjectSettingsN/A
Ruby.bundle, vendorGemfileGemfile.lock
Scalatarget, .bloop, .metalsbuild.sbtN/A
Haskell.stack-work, dist-newstylestack.yaml, *.cabal, cabal.projectstack.yaml.lock, cabal.project.freeze
OCaml_builddune-project, dunedune.lock
R.Rproj.user, .Rcache, renv/library*.Rproj, renv.lock, DESCRIPTIONrenv.lock
Elmelm-stuffelm.jsonN/A
Clojure.cpcache, .shadow-cljs, .calvaproject.clj, deps.edn, shadow-cljs.ednN/A
Julia.juliaProject.toml, JuliaProject.tomlManifest.toml
Terraform / IaC.terraform, .serverless, .aws-sam*.tf, *.tofu, serverless.yml, samconfig.toml.terraform.lock.hcl
Coverage & Testscoverage, .nyc_output, htmlcov, test-results, playwright-report, .playwrightProject test runners & configsN/A

Global tool caches

Press Tab in the TUI to inspect central tool caches that live outside your project folders:

  • Package managers & registries: Cargo checkouts and git registries, Go module cache (GOPATH/pkg/mod), npm, pnpm, Yarn, pip, uv, Bun, Pub, NuGet, Ruby gems, Coursier, vcpkg binary archives and download cache, Homebrew bottles, R renv cache.
  • Compilers & build systems: Go build cache, ccache, sccache, Rustup toolchains, Zig cache, Unreal Engine Global DDC, Gradle daemon logs and caches, Android build artifacts, Android emulator AVD images, Xcode DerivedData, CocoaPods, Terraform plugins, Docker Desktop WSL virtual disk (ext4.vhdx).
  • Browser binaries: Playwright standalone browser builds (Chromium, Firefox, WebKit), Cypress desktop binary cache.
  • AI model weights: Ollama models (~/.ollama/models), LM Studio, HuggingFace Hub, PyTorch Hub cache, Whisper weights.
  • Editor caches: JetBrains system caches, VS Code workspace storage, Cursor workspace storage.

Development

# Check compiler diagnostics
cargo check

# Run test suite
cargo test