{"id":28910556,"url":"https://github.com/neg4n/wdmt","last_synced_at":"2026-05-07T17:39:07.387Z","repository":{"id":299505813,"uuid":"1002682027","full_name":"neg4n/wdmt","owner":"neg4n","description":"Secure and robust way to clean up your clutter caused by having too much files in your System Data.","archived":false,"fork":false,"pushed_at":"2025-07-12T19:50:17.000Z","size":53,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-17T11:11:56.517Z","etag":null,"topics":["ccleaner","debloat","debloater","mac-cleanup","next","nodejs","nodemodules","system-bloat","system-cleaner-tool","system-cleaning","system-cleanup"],"latest_commit_sha":null,"homepage":"https://neg4n.dev/explore/wdmt/overview","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neg4n.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-16T01:10:18.000Z","updated_at":"2025-09-06T12:45:32.000Z","dependencies_parsed_at":"2025-06-16T22:48:45.011Z","dependency_job_id":"b51d7a23-09e8-409a-ad58-7acaf3468db0","html_url":"https://github.com/neg4n/wdmt","commit_stats":null,"previous_names":["neg4n/wdmt"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/neg4n/wdmt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neg4n%2Fwdmt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neg4n%2Fwdmt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neg4n%2Fwdmt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neg4n%2Fwdmt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neg4n","download_url":"https://codeload.github.com/neg4n/wdmt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neg4n%2Fwdmt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32749430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ccleaner","debloat","debloater","mac-cleanup","next","nodejs","nodemodules","system-bloat","system-cleaner-tool","system-cleaning","system-cleanup"],"created_at":"2025-06-21T18:14:12.653Z","updated_at":"2026-05-07T17:39:07.381Z","avatar_url":"https://github.com/neg4n.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Introduction\n\n**WDMT** /ˌwɪdiˈɛmˈtiː/ (Web Developer Maintenance Tool) is a CLI that securely removes bulky development artefacts such as `node_modules`, `.next`, or `dist`. It focuses on correctness and safety, ensuring that no file outside the intended directory tree is ever touched.\n\n## Preview\n\n\n\n\n\nhttps://github.com/user-attachments/assets/a8b5d6bb-0571-4c95-bca4-0c793e076b5c\n\n\n\n\n\n\n### Motivation\n\nHave you ever seen 200GB+ taken by the System Data on your Mac?\n\nLarge dependency folders and build outputs quickly bloat local check-outs.  Manually pruning them with `rm -rf` or similar commands is risky-one wrong path or an unexpected symlink can wipe unrelated data.\n\n**WDMT** gives developers a fast and interactive way to reclaim disk space without compromising security.\n\n### Key Features\n\n- **🔒 Symlink Attack Prevention** — Never follows malicious symlinks  \n- **🛡️ Path Traversal Protection** — Blocks `../../../etc/passwd` style attacks  \n- **⚡ Interactive Selection** — Smart path display with multiple view modes  \n- **📊 Progress Visualisation** — Beautiful progress bars created using [charmbracelet](charm.sh) libraries  \n- **🎯 Secure by Design** — Robust security validation  \n- **📱 Cross-Platform** — Works on macOS, Linux, and Windows  \n- **🔍 Enhanced Path Display** — Smart, condensed, and full path viewing modes with keyboard shortcuts  \n- **📏 Accurate Size Calculation** — Uses 4KB block size to match actual disk usage\n- **🚀 Zero Configuration** — Works out of the box with sensible defaults, no config files needed\n\n### Built With\n\n- **[Cobra](https://github.com/spf13/cobra)** — CLI framework for building commands\n- **[Bubble Tea](https://github.com/charmbracelet/bubbletea)** — Terminal UI framework\n- **[Lipgloss](https://github.com/charmbracelet/lipgloss)** — Terminal styling and layout\n- **[Bubbles](https://github.com/charmbracelet/bubbles)** — TUI components (lists, progress bars, spinners)\n\n### Quick Start\n\n#### Installation\n\n```bash\ngo install github.com/neg4n/wdmt@latest\n```\n\nor\n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/neg4n/wdmt/main/install.sh | sh\n```\n\n#### Usage\n\n1. Launch your preferred terminal emulator\n2. Navigate to the directory you want to clean up _(e.g. `~/projects` if you keep all your programming projects there)_\n3. Run `wdmt` in the terminal\n4. Follow the interactive prompts to select and delete directories\n\n#### Interactive Controls\n\nDuring the selection phase:\n- **↑/↓** or **j/k** — Navigate through the list\n- **Space** or **Enter** — Select/deselect items\n- **a** — Select all items\n- **A** — Deselect all items\n- **p** — Cycle through path display modes (smart → condensed → full)\n- **?** — Toggle help\n- **q** or **Ctrl+C** — Quit\n\nDuring deletion:\n- **Any key** — Skip the 5-second completion delay\n\n### Security Architecture\n\nWDMT uses a **two-phase security model** optimized for both performance and safety:\n\n#### **Discovery Phase (Scanner)**\n- **🔍 Fast \u0026 Minimal Security** — Essential symlink detection for safe directory traversal\n- **⚡ Performance Optimized** — Parallel scanning with CPU×3 workers for fast discovery\n- **👀 User Review Required** — Always displays confirmation screen before deletion\n\n#### **Deletion Phase (Cleaner)**\n- **🛡️ Full Security Suite** — Complete protection when it matters most\n\n| Feature | Traditional tools | WDMT Scanner | WDMT Cleaner |\n|---------|------------------|--------------|--------------|\n| Symlink safety | Often follows symlinks | Essential detection | Never follows symlinks |\n| Path validation | Basic checks | Basic boundary checks | Multi-layer validation |\n| Injection protection | None | N/A (user review) | UTF-8 \u0026 null-byte filtering |\n| Race-condition defence | Vulnerable | N/A (user review) | Just-in-time validation |\n| Filesystem boundaries | Can cross devices | N/A (user review) | Device-ID tracking |\n\n\u003e [!IMPORTANT]  \n\u003e The scanner prioritizes speed for discovery, while the cleaner enforces complete security during deletion. **Always review the confirmation screen** to verify what you're deleting, as this is your primary defense against accidental deletions.\n\n### Supported Targets\n\nWDMT detects and cleans the following artefacts:\n\n| Type | Directories |\n|------|-------------|\n| Node.js | `node_modules` |\n| Build output | `dist`, `build`, `.output` |\n| Framework cache | `.next`, `.nuxt`, `.vite`, `.turbo` |\n| Test coverage | `coverage`, `.nyc_output`, `lib-cov` |\n| Bundler cache | `.parcel-cache`, `.webpack`, `.rollup.cache` |\n| Temporary | `tmp`, `temp`, `.cache` |\n| System files | `.DS_Store`, `Thumbs.db` |\n\n\u003e [!NOTE]  \n\u003e Target directories are currently hardcoded for security and simplicity but will be configurable in future releases.\n\n### Development\n\n#### Running Tests\n\n```bash\n# All tests\ngo test ./...\n\n# Security tests with coverage\ngo test ./internal/cleaner -v -cover\n```\n\n\u003e [!TIP]  \n\u003e All security tests run in isolated temporary directories to avoid touching real data.\n\n### Comparison\n\n| Tool | Security | Interactive | Cross-Platform |\n|------|----------|-------------|----------------|\n| **WDMT** | ✅ Robust | ✅ Modern UI | ✅ Go-based |\n| `rimraf` | ❌ Basic | ❌ No | ✅ Node.js |\n| `rm -rf` | ❌ Dangerous | ❌ No | ⚠️ Unix only |\n| `npkill` | ⚠️ Limited | ✅ Yes | ✅ Node.js |\n\n## License\n\nThe MIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneg4n%2Fwdmt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneg4n%2Fwdmt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneg4n%2Fwdmt/lists"}