Skip to main content

Reclaimed — disk space management

Fast, local disk-usage analysis with a responsive terminal interface.

PyPI version Supported Python versions PyPI downloads MIT license

Reclaimed recursively scans a directory, calculates its largest files and directory trees, and presents the results in either an interactive Textual application or compact Rich tables. It runs entirely on your machine, makes no network requests, and includes no telemetry.

Scanner Interactive UI Output
Bounded top-file tracking, exact recursive directory totals, 1–8 directory-listing workers Responsive side-by-side or stacked tables, live scan and per-directory status, keyboard and mouse control Proportional size bars, iCloud/OneDrive detection, local JSON export
Ignores symlinks and skips common trash/system directories by default Sort, hide, rescan, switch themes, or permanently delete with confirmation Partial results are retained when a text-mode scan is interrupted

Reclaimed supports Python 3.9+ on macOS, Linux, and Windows.

Install

Run without installing Install with pip Install with Homebrew on macOS
uvx reclaimed python -m pip install reclaimed brew install taylorwilsdon/tap/reclaimed

To work from a clone instead:

git clone https://github.com/taylorwilsdon/reclaimed.git
cd reclaimed
python -m pip install -e .

Use

Interactive mode is the default. Pass a directory, or omit PATH to scan the current directory.

# Open the interactive interface
reclaimed ~/Documents

# Print Rich tables and exit
reclaimed ~/Documents --no-interactive

# Keep more results and use all eight workers
reclaimed ~/Documents --files 25 --dirs 20 --jobs 8

# Add directory names to the default skip list
reclaimed ~/Documents -s node_modules -s __pycache__

# Count logical file sizes instead of bytes currently allocated on disk
reclaimed ~/Documents --apparent-size

# Export the retained results and scan metadata
reclaimed ~/Documents --output results.json

When --output is used with the interactive interface, the JSON file is written after the app exits. In text mode, pressing Ctrl+C prints and optionally exports the partial results collected so far.

Command-line reference

Argument or option Purpose
PATH Directory to scan; defaults to the current directory
-f, --max-files, --files N Keep the N largest files; default 10, minimum 0
-d, --max-dirs, --dirs N Keep the N largest directories; default 10, minimum 0
-j, --jobs N Directory-listing workers; default 4, range 1–8
--actual-size / --apparent-size Count allocated on-disk bytes (default) or logical file sizes
-s, --skip-dirs NAME Skip an additional directory name; repeat for multiple names
-i, --interactive / --no-interactive Select the Textual interface or one-shot Rich output
-o, --output FILE Write scan metadata, retained results, and access issues to JSON
--debug Enable debug logging
--version Print the installed version and exit

.Trash and System Volume Information are always included in the skip list. Additional --skip-dirs values are matched by directory name.

Interactive interface

The interface updates while the scan runs and adapts to the terminal width: result panels sit side by side in wide terminals and stack in compact terminals. Each result shows its size, share of the scanned total, and path. Directories show whether their full subtree is still scanning or done, and a storage column appears when iCloud or OneDrive content is found.

The summary strip tracks discovered size, file count, elapsed time, and hidden items. Hiding a directory only removes it and its descendants from the current view. Deletion removes the selected item from disk and always requires confirmation.

Key Action Key Action
F Focus files D Focus directories
Tab Switch result table S Open sort control
H Hide selected directory U Restore hidden directories
Delete Delete selected item R Rescan
T Cycle theme Ctrl+P Open command palette
? Show help Q Quit

Results can be sorted by size, modification time, name, or path. The built-in theme cycle includes Solarized Dark, Nord, Rose Pine Moon, Catppuccin Mocha, Atom One Dark, and Textual Light.

Text output and JSON

Text mode prints the same largest-file and largest-directory sets without starting the full-screen interface. Tables use relative, end-preserving paths, proportional bars, percentages, and an iCloud/OneDrive/local storage column only when relevant. Permission and other access failures are summarized after the results instead of aborting the scan.

JSON exports contain:

  • Scan timestamp, root path, size mode, total bytes, formatted total, and number of files scanned
  • Largest files and directories with absolute paths, byte and formatted sizes, and storage type
  • Paths that could not be read and their error messages

Python API

The scanner can also be embedded. Cloud roots named Mobile Documents, OneDrive, or OneDrive - Organization are detected automatically; explicit base paths are also supported:

from pathlib import Path

from reclaimed import DiskScanner, ScanOptions

options = ScanOptions(
    max_files=25,
    max_dirs=20,
    max_workers=4,
    icloud_base=Path.home() / "Library" / "Mobile Documents",
    onedrive_base=Path.home() / "OneDrive",
    actual_size=True,
)
result = DiskScanner(options).scan(Path.home())

scan_async() yields progress snapshots while directory listings run off the event loop. An interrupted synchronous scan raises ScanInterruptedError with the collected ScanResult available as error.partial.

Contributing

See CONTRIBUTING.md for the development workflow and pyproject.toml for supported Python versions, dependencies, and tool configuration.

License

Reclaimed is available under the MIT License.

Metadata

Release files for reclaimed 0.2.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reclaimed 0.2.10
File Size Uploaded
reclaimed-0.2.10.tar.gz 55.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for reclaimed 0.2.10
File Interpreter ABI Platform
reclaimed-0.2.10-py3-none-any.whl Python 3 none any Details

Total release size: 112.1 kB

Release files / reclaimed-0.2.10.tar.gz

Download URL reclaimed-0.2.10.tar.gz
Size 55.1 kB
Tags Source
SHA-256 checksum
How to use checksums
290f8b6c23112ec1138aa06adc8af9e9012ab9ab7cc030112e5b7357e2885aad
BLAKE2b-256 checksum
How to use checksums
6a822445786330687e6610398be948cc77449595fe5341360c9258ce9f52f58d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.5

Release files / reclaimed-0.2.10-py3-none-any.whl

Download URL reclaimed-0.2.10-py3-none-any.whl
Size 57.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8a08c485622e36f8df1ac3318dff5111998be3abeac2bb951c17d28771eab6de
BLAKE2b-256 checksum
How to use checksums
3062891894727b29391a3bf5b5eaa1e9f5528f631cfe3854942a864391d2f7d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.5

Release history Release notifications | RSS feed

This release

0.2.10 This release

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page