{"id":35126834,"url":"https://github.com/mikesdatawork/provis","last_synced_at":"2026-01-13T22:54:58.651Z","repository":{"id":330505567,"uuid":"1122968017","full_name":"mikesdatawork/provis","owner":"mikesdatawork","description":"Provis – A graphical process and resource usage viewer for Linux","archived":false,"fork":false,"pushed_at":"2025-12-27T20:44:19.000Z","size":1887,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T22:54:52.852Z","etag":null,"topics":["cli-tool","command-line-tools","directory-size","disk-analyzer","disk-usage","filesystem","linux","linux-tool","open-source","performance-monitoring","process-monitoring","resource-monitor","rust","rust-lang","sysinfo","system-monitoring","system-utility","terminal-app","terminal-ui","tui"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/mikesdatawork.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["Canop"]}},"created_at":"2025-12-25T23:48:36.000Z","updated_at":"2026-01-03T14:23:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mikesdatawork/provis","commit_stats":null,"previous_names":["mikesdatawork/linprovis"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mikesdatawork/provis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikesdatawork%2Fprovis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikesdatawork%2Fprovis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikesdatawork%2Fprovis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikesdatawork%2Fprovis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mikesdatawork","download_url":"https://codeload.github.com/mikesdatawork/provis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikesdatawork%2Fprovis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28405138,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T21:51:37.118Z","status":"ssl_error","status_checked_at":"2026-01-13T21:45:14.585Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["cli-tool","command-line-tools","directory-size","disk-analyzer","disk-usage","filesystem","linux","linux-tool","open-source","performance-monitoring","process-monitoring","resource-monitor","rust","rust-lang","sysinfo","system-monitoring","system-utility","terminal-app","terminal-ui","tui"],"created_at":"2025-12-28T03:03:15.586Z","updated_at":"2026-01-13T22:54:58.645Z","avatar_url":"https://github.com/mikesdatawork.png","language":"Rust","funding_links":["https://github.com/sponsors/Canop"],"categories":[],"sub_categories":[],"readme":"# Provis\n\n**System monitoring and disk analysis tool for Linux**\n\nProvis provides three powerful views for managing your system resources:\n- **Filesystem view** - Monitor disk usage, mount points, and storage devices\n- **Process view** - Track CPU and memory usage across running processes  \n- **Directory scanner** - Analyze disk space usage with TreeSize-style filtering\n\nBuilt in Rust for performance and efficiency.\n\n---\n\n## Features\n\n### 📊 Filesystem Monitoring\n- Real-time disk usage with visual progress bars\n- Multiple filesystem types (ext4, btrfs, zfs, ntfs, etc.)\n- Inode tracking and statistics\n- Customizable columns and sorting\n- Filter by size, type, or mount point\n- JSON and CSV export\n\n![Filesystem View](screenshots/file_system_size_mountpoints.png)\n![Filesystem with Inodes](screenshots/file_system_inodes.png)\n\n### 🔄 Process Monitoring  \n- CPU and memory usage per process\n- Thread aggregation by process name\n- Disk I/O tracking (read/write)\n- Self-filtering (excludes provis from display)\n- Top N processes (default: 20)\n\n![Process Monitoring](screenshots/top_10_processes_by_cpu.png)\n\n### 📁 Directory Size Analysis\n- TreeSize-style smart filtering (skips hidden dirs and build artifacts)\n- Single-pass recursive scanning\n- Memory-efficient heap-based algorithm (constant O(20) memory)\n- Progress feedback during large scans\n- Supports recursive deep scanning without OOM errors\n\n![Directory Scanner - 10](screenshots/top_10_directories_by_size.png)\n![Directory Scanner - 17](screenshots/top_17_directories_by_size.png)\n\n---\n\n## Installation\n\n### From Release Binary\nDownload the latest release from [GitHub Releases](https://github.com/Canop/dysk/releases) and extract:\n```bash\ntar -xzf provis-*.tar.gz\nsudo mv provis /usr/local/bin/\n```\n\n### From Source\nRequires Rust 1.75+:\n```bash\ngit clone https://github.com/YOUR_USERNAME/provis.git\ncd provis\ncargo build --release\nsudo cp target/release/provis /usr/local/bin/\n```\n\n---\n\n## Quick Start\n\n### View Modes\n\n```bash\n# Filesystem view (default)\nprovis\n\n# Process monitoring\nprovis --processes\n\n# Directory size analysis\nprovis --size-on-disk\n```\n\n### Common Usage\n\n```bash\n# Show all filesystems including hidden\nprovis --all\n\n# Monitor top 50 processes\nprovis -p --limit 50\n\n# Scan home directory recursively\nprovis --size-on-disk /home --recursive\n\n# Filter large filesystems\nprovis --filter 'size\u003e100G'\n\n# Add inodes column to filesystem view\nprovis --cols +inodes\n\n# Export to JSON\nprovis --json\n```\n\n---\n\n## Command Reference\n\n### View Modes\n\n| Command | Description | Example |\n|---------|-------------|---------|\n| `provis` | Filesystem/disk view (default) | `provis` |\n| `provis --processes` or `-p` | Process monitoring view | `provis -p` |\n| `provis --size-on-disk` | Directory size analysis | `provis --size-on-disk` |\n| `provis --help` | Show detailed help | `provis --help` |\n| `provis --commands` | Show command reference table | `provis --commands` |\n| `provis --version` | Show version | `provis --version` |\n\n### Directory Scanning Options\n\n| Flag | Description | Example |\n|------|-------------|---------|\n| `--recursive` | Scan all nested folders | `provis --size-on-disk --recursive` |\n| `--depth N` | Scan N levels deep (default: 1) | `provis --size-on-disk --depth 3` |\n| `--limit N` | Show top N results (default: 20) | `provis --size-on-disk --limit 50` |\n| `--root` | Scan from filesystem root | `provis --size-on-disk --root` |\n| `--all`, `-a` | Show hidden dirs and build artifacts | `provis --size-on-disk -a` |\n| `PATH` | Start scan from path | `provis --size-on-disk /home` |\n\n### Filesystem View Options\n\n| Flag | Description | Example |\n|------|-------------|---------|\n| `--all`, `-a` | Show all mount points | `provis -a` |\n| `--list-cols` | List available columns | `provis --list-cols` |\n| `--cols`, `-c` | Select columns to display | `provis -c +inodes` |\n| `--sort`, `-s` | Sort by column | `provis -s free-desc` |\n| `--filter`, `-f` | Filter filesystems | `provis -f 'size\u003e100G'` |\n| `--units`, `-u` | Size units (SI/binary/bytes) | `provis -u binary` |\n\n### Display Options\n\n| Flag | Description | Example |\n|------|-------------|---------|\n| `--color` | Color mode (auto/yes/no) | `provis --color yes` |\n| `--ascii` | Use ASCII characters only | `provis --ascii` |\n\n### Output Formats\n\n| Flag | Description | Example |\n|------|-------------|---------|\n| `--json`, `-j` | JSON output | `provis -j` |\n| `--csv` | CSV output | `provis --csv` |\n| `--csv-separator` | CSV separator character | `provis --csv --csv-separator ';'` |\n\n---\n\n## Advanced Examples\n\n### Filesystem Analysis\n```bash\n# Find filesystems over 80% full\nprovis --filter 'use\u003e80%'\n\n# Show only remote filesystems\nprovis --filter 'remote=true'\n\n# Custom columns for detailed view\nprovis -c fs+type+disk+used+free+inodes+mount\n\n# Sort by free space ascending\nprovis --sort free-asc\n\n# Export filtered results to CSV\nprovis -f 'size\u003e10G' --csv \u003e large_filesystems.csv\n```\n\n### Process Monitoring\n```bash\n# Top 50 processes by CPU\nprovis -p --limit 50\n\n# Monitor in ASCII mode (for piping/logging)\nprovis -p --ascii\n\n# JSON export for scripting\nprovis -p --json | jq '.[] | select(.cpu \u003e 5.0)'\n```\n\n### Directory Scanning\n```bash\n# Find largest directories in /var\nprovis --size-on-disk /var --recursive --limit 30\n\n# Scan home showing everything (including hidden)\nprovis --size-on-disk /home --all --recursive\n\n# Quick scan of immediate children only\nprovis --size-on-disk /opt --depth 1\n\n# Deep scan with large result set\nprovis --size-on-disk / --recursive --limit all --root\n```\n\n---\n\n## Smart Filtering\n\nBy default, directory scanner skips:\n- Hidden directories (`.git`, `.cache`, `.npm`, etc.)\n- Build artifacts (`node_modules`, `target`, `dist`, `build`, `__pycache__`, etc.)\n- Version control (`.svn`, `.hg`)\n\nUse `--all` to disable filtering and see everything.\n\n---\n\n## Performance\n\n- **Optimized binary**: 3.5MB release build\n- **Low CPU usage**: 1-5% during monitoring (release build)\n- **Memory efficient**: Directory scanner uses constant O(20) memory regardless of tree size\n- **Fast scanning**: Single-pass algorithm prevents redundant filesystem walks\n\n---\n\n## Technical Details\n\n- Written in Rust\n- Uses `sysinfo` for process monitoring\n- Uses `lfs-core` for filesystem information\n- Terminal UI via `termimad`\n- Heap-based top-N tracking for memory efficiency\n\n---\n\n## Contributing\n\nContributions welcome. Before starting:\n- Discuss features in an issue first\n- Keep changes focused and simple\n- Follow existing code style\n- Test with `cargo test`\n\n---\n\n## License\n\nMIT License - see LICENSE file\n\n---\n\n## Credits\n\nForked from [dysk](https://github.com/Canop/dysk) by Denys Séguret (dystroy)\n\nExtended with process monitoring, directory scanning, and enhanced filtering.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikesdatawork%2Fprovis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikesdatawork%2Fprovis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikesdatawork%2Fprovis/lists"}