{"id":39128367,"url":"https://github.com/taylorwilsdon/reclaimed","last_synced_at":"2026-01-17T21:06:24.113Z","repository":{"id":278774032,"uuid":"936718844","full_name":"taylorwilsdon/reclaimed","owner":"taylorwilsdon","description":"Fast, light and useful - reclaimed is a disk space utilization \u0026 cleanup application for macOS, Linux \u0026 Windows","archived":false,"fork":false,"pushed_at":"2025-07-26T17:27:09.000Z","size":329,"stargazers_count":119,"open_issues_count":1,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-27T16:41:37.833Z","etag":null,"topics":["cleanup","disk-space","disk-usage","disk-usage-analyzer","reclaimed"],"latest_commit_sha":null,"homepage":"","language":"Python","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/taylorwilsdon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-02-21T15:09:52.000Z","updated_at":"2025-11-24T18:34:08.000Z","dependencies_parsed_at":"2025-03-02T19:16:58.358Z","dependency_job_id":"8d6cc3de-ded8-487e-86b6-b37e8b760464","html_url":"https://github.com/taylorwilsdon/reclaimed","commit_stats":null,"previous_names":["taylorwilsdon/reclaim","taylorwilsdon/reclaimed"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/taylorwilsdon/reclaimed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freclaimed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freclaimed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freclaimed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freclaimed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taylorwilsdon","download_url":"https://codeload.github.com/taylorwilsdon/reclaimed/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freclaimed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28518610,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:55:29.170Z","status":"ssl_error","status_checked_at":"2026-01-17T18:55:03.375Z","response_time":85,"last_error":"SSL_read: 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":["cleanup","disk-space","disk-usage","disk-usage-analyzer","reclaimed"],"created_at":"2026-01-17T21:06:23.563Z","updated_at":"2026-01-17T21:06:24.103Z","avatar_url":"https://github.com/taylorwilsdon.png","language":"Python","readme":"# reclaimed ♻️\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/taylorwilsdon/reclaimed?style=flat\u0026logo=github\u0026logoColor=white\u0026label=License\u0026labelColor=555\u0026color=blue\" alt=\"License\" /\u003e\n  \u003ca href=\"https://github.com/taylorwilsdon\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Privacy-100%25_Client--Side_Processing-blue?style=flat\u0026logo=shield\u0026logoColor=white\u0026labelColor=555\" alt=\"Privacy Shield\" /\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/v/reclaimed?style=flat\u0026logo=pypi\u0026logoColor=white\u0026label=Version\u0026labelColor=005da7\u0026color=blue\" alt=\"PyPI Version\" /\u003e\n  \u003ca href=\"https://pepy.tech/projects/reclaimed\"\u003e\u003cimg src=\"https://static.pepy.tech/badge/reclaimed\" alt=\"PyPI Downloads\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n \u003cimg width=\"50%\" src=\"https://github.com/user-attachments/assets/7f02903b-24ca-4415-a929-5a8f89caa99d\" /\u003e\n\u003c/div\u003e\n\n---\n\n**reclaimed** is a cross-platform, ultra-lightweight, and surprisingly powerful command-line tool for analyzing disk usage — with special handling for iCloud storage on macOS.  \nQuickly find your largest files and directories with a beautiful, color-coded interface, and manage them through an interactive terminal UI.  \nFully supports **Linux**, **macOS**, and **Windows**.\n\n---\n\n### A quick plug for AI-Enhanced Docs\n\n\u003e **This README was crafted with AI assistance, and here's why that matters**\n\u003e \n\u003e As a solo developer building open source tools that may only ever serve my own needs, comprehensive documentation often wouldn't happen without AI help. Using agentic dev tools like **Roo** \u0026 **Claude Code** that understand the entire codebase, AI doesn't just regurgitate generic content - it extracts real implementation details and creates accurate, specific documentation.\n\u003e\n\u003e In this case, Sonnet 4 took a pass \u0026 a human (me) verified them 6/28/25.\n\n---\n\n## ✨ Features\n\n- 🚀 **Legitimately Performant**: Fast recursive directory scanning with ultra-efficient progress updates.\n  - Carefully tuned repaint frequency — optimized to avoid slowing results by even 5ms.\n  - Separate thread for the clock to keep real-time updates buttery smooth.\n- ☁️ **iCloud Aware**: Detects and handles iCloud Drive symlink files vs local storage (macOS).\n- 📊 **Beautiful UI**: Powered by [Textualize/rich](https://github.com/Textualize/rich) and [Textualize/textual](https://github.com/Textualize/textual).\n  - Full keyboard navigation, mouse support, and customizable themes.\n- 🖥️ **Interactive Terminal UI**: Browse, manage, and delete files/directories with ease.\n- 🗑️ **Safe Deletion**: Remove large files and directories directly from the interface — with confirmation prompts.\n- 💾 **Export to JSON**: Save scan results for further analysis or batch operations.\n- ⚡ **Real-Time Feedback**: Live progress indicators and graceful handling of permission issues.\n- 🛡️ **Actual Privacy**: 100% offline. No telemetry, no analytics, no tracking - can't even check for updates.\n\n---\n\nhttps://github.com/user-attachments/assets/1aae04e7-3201-414d-a1e3-6ea5d55bd691\n\n---\n\n## 📦 Installation\n\n### Prerequisites\n- Python 3.8+\n- pip (Python package installer)\n- (Optional but recommended) Use a virtual environment\n\n### uvx (fastest)\n```bash\nuvx reclaimed\n```\n\n### Install via pip\n```bash\npip install reclaimed\n```\n\n### Install via Homebrew (macOS)\n```bash\nbrew install taylorwilsdon/tap/reclaimed\n```\n\n### Build from Source\n```bash\ngit clone https://github.com/taylorwilsdon/reclaimed.git\ncd reclaimed\npip install -e .\n```\n\n---\n\n## 🚀 Usage\n\n### Basic\n```bash\nreclaimed ~/Documents\n```\n\n### Advanced\n```bash\n# Show more results\nreclaimed ~/Documents --files 20 --dirs 15\n\n# Skip specific directories during scanning\nreclaimed ~/Documents --skip-dirs node_modules --skip-dirs __pycache__\n\n# Save results to JSON\nreclaimed ~/Documents --output results.json\n```\n\n### Options\n| Option | Description |\n|:------|:------------|\n| `PATH` | Directory to scan (default: current directory) |\n| `-f, --max-files N` | Number of largest files to show (default: 10) |\n| `-d, --max-dirs N` | Number of largest directories to show (default: 10) |\n| `-s, --skip-dirs DIR` | Additional directories to skip (can be specified multiple times) |\n| `-o, --output FILE` | Save results to a JSON file |\n| `-i, --interactive` | Launch the interactive Textual UI |\n\n---\n\n## 🎛️ Interactive Mode\n\nInteractive mode is on by default. Non-interactive mode (minimal output) can be forced with:\n\n```bash\nreclaimed ~/Documents --no-interactive\n```\n\n### Keyboard Shortcuts\n| Key | Action | | Key | Action |\n|-----|--------|-|-----|--------|\n| `F` | Files view | | `Delete` | Remove item |\n| `D` | Directories view | | `R` | Refresh scan |\n| `S` | Sort items | | `Q` | Quit |\n| `H` | Hide directory | | `U` | Unhide all directories |\n\n---\n\n## 📊 Output\n\n### CLI Mode\n- Real-time progress indicator (files scanned, total size)\n- Tables of largest files and directories\n- iCloud vs local storage clearly indicated\n- Summary of any access issues\n\n### Interactive Mode\n- Tabbed interface: switch between Files and Directories\n- Keyboard navigation (arrow keys) and mouse support\n- Sort items by size, name, or path\n- Delete files/directories with confirmation\n- Refresh scan results\n\n---\n\n## 🛠️ Development\n\nThis project uses [UV](https://github.com/astral-sh/uv) for building/publishing and [Hatch](https://hatch.pypa.io/) for workflow management.\n\n### Setup Development Environment\n```bash\npip install -r requirements.txt\nhatch shell\n```\n\n### Common Commands\n```bash\n# Run tests\nhatch test\n\n# Build distribution packages\nuv build --sdist --wheel\n\n# Create a new release\n./release.sh\n\n# Run interactively\npython -m reclaimed /path/to/scan\n```\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome!  \nPlease see the [Contributing Guide](CONTRIBUTING.md) for details.\n\n---\n\n## 📜 License\n\nThis project is licensed under the **MIT License**.  \nSee the [LICENSE](LICENSE) file for full details.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eBuilt with ❤️ for those who love clean disks and clean code.\u003c/sub\u003e\n\u003c/p\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaylorwilsdon%2Freclaimed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaylorwilsdon%2Freclaimed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaylorwilsdon%2Freclaimed/lists"}