| Crates.io | gravityfile |
| lib.rs | gravityfile |
| version | 0.2.2 |
| created_at | 2025-12-09 18:20:05.1332+00 |
| updated_at | 2026-01-16 13:09:40.493239+00 |
| description | A state-of-the-art file system analyzer with TUI |
| homepage | |
| repository | https://github.com/epistates/gravityfile |
| max_upload_size | |
| id | 1975919 |
| size | 3,898,204 |
"Where mass accumulates, attention should follow."
File system explorer and analyzer with an interactive TUI, built in Rust.
v)jwalk: commands for power userscargo install gravityfile
git clone https://github.com/epistates/gravityfile
cd gravityfile
cargo install --path .
This installs two binaries: gravityfile and grav (short alias).
gravityfile [PATH]
# or use the short alias:
grav [PATH]
Launch the interactive terminal interface to explore disk usage.
gravityfile scan [PATH] [-d DEPTH] [-n TOP]
Quick summary of disk usage with tree output.
gravityfile duplicates [PATH] [--min-size SIZE] [-n TOP]
Find duplicate files. Uses a three-phase algorithm:
gravityfile age [PATH] [--stale DURATION]
Analyze file ages and find stale directories.
gravityfile export [PATH] [-o OUTPUT]
Export scan results to JSON.
| Key | Action |
|---|---|
j / ↓ |
Move down |
k / ↑ |
Move up |
h / ← |
Collapse directory |
l / → |
Expand directory |
g / Home |
Jump to top |
G / End |
Jump to bottom |
Ctrl-u / PgUp |
Page up |
Ctrl-d / PgDn |
Page down |
Enter |
Drill into directory |
Backspace / - |
Navigate back |
o |
Toggle expand node |
Ctrl-g |
Go to path |
| Key | Action |
|---|---|
Space |
Mark item for multi-select |
y |
Yank (copy) to clipboard |
x |
Cut to clipboard |
p |
Paste from clipboard |
Esc |
Clear clipboard / marks |
| Key | Action |
|---|---|
d / D / Del |
Delete item(s) |
r |
Rename |
a |
Create file (touch) |
A |
Create directory (mkdir) |
T |
Take (mkdir + cd into new directory) |
Ctrl-z |
Undo last operation |
| Key | Action |
|---|---|
Tab / Shift-Tab |
Switch view tab (Usage, Duplicates, Age) |
v |
Toggle Tree / Miller layout |
i |
Toggle details panel |
P |
Cycle preview mode |
t |
Toggle theme (dark/light) |
, |
Open settings |
R |
Rescan current directory |
| Key | Action |
|---|---|
/ |
Search |
s |
Sort |
S |
Reverse sort |
| Key | Action |
|---|---|
Ctrl-t |
New directory tab |
Ctrl-w |
Close current tab |
] / [ |
Next / previous tab |
1-9 |
Switch to tab by number |
| Key | Action |
|---|---|
: |
Open command palette |
? |
Show help |
q |
Quit |
Ctrl-c |
Force quit |
| Command | Action |
|---|---|
:q :quit |
Quit |
:cd <path> |
Change directory |
:touch <name> |
Create file |
:mkdir <name> |
Create directory |
:take <name> |
Create dir and cd into it |
:yank :y |
Copy to clipboard |
:cut :x |
Cut to clipboard |
:paste :p |
Paste from clipboard |
:delete :rm |
Delete marked items |
:rename <name> |
Rename current item |
:clear |
Clear all marks |
:theme dark|light |
Set theme |
:layout tree|miller |
Set layout |
:help |
Show help |
gravityfile is designed as a composable library:
use gravityfile_scan::{JwalkScanner, ScanConfig};
use gravityfile_analyze::{DuplicateFinder, DuplicateConfig};
// Scan a directory
let config = ScanConfig::new("/path/to/analyze");
let scanner = JwalkScanner::new();
let tree = scanner.scan(&config)?;
// Find duplicates
let dup_config = DuplicateConfig::builder()
.min_size(1024u64)
.build()?;
let finder = DuplicateFinder::with_config(dup_config);
let report = finder.find_duplicates(&tree);
println!("Found {} duplicate groups", report.group_count);
println!("Wasted space: {} bytes", report.total_wasted_space);
gravityfile - Main binary and CLIgravityfile-core - Core types (FileNode, FileTree, etc.)gravityfile-scan - File system scanning enginegravityfile-analyze - Analysis algorithms (duplicates, age)gravityfile-ops - File operations engine (copy, move, rename, delete)gravityfile-tui - Terminal user interfacejwalkLicensed under either of:
at your option.
Contributions welcome! Please feel free to submit a Pull Request.