{"id":15626285,"url":"https://github.com/ksxgithub/parallel-disk-usage","last_synced_at":"2026-04-03T02:03:57.613Z","repository":{"id":37937945,"uuid":"367807925","full_name":"KSXGitHub/parallel-disk-usage","owner":"KSXGitHub","description":"Highly parallelized, blazing fast directory tree analyzer","archived":false,"fork":false,"pushed_at":"2025-02-11T05:12:16.000Z","size":968,"stargazers_count":557,"open_issues_count":12,"forks_count":13,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-12T20:43:35.233Z","etag":null,"topics":["chart","disk-usage","du","dust","filesystem","graph","pdu","rust","size"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/parallel-disk-usage","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KSXGitHub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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},"funding":{"github":"KSXGitHub","patreon":"khai96_","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://paypal.me/khai96x"]}},"created_at":"2021-05-16T07:03:18.000Z","updated_at":"2025-04-11T23:42:47.000Z","dependencies_parsed_at":"2023-01-31T02:16:04.797Z","dependency_job_id":"54340007-e3f5-43f2-8a99-6bb55916e6f6","html_url":"https://github.com/KSXGitHub/parallel-disk-usage","commit_stats":{"total_commits":907,"total_committers":5,"mean_commits":181.4,"dds":0.1730981256890849,"last_synced_commit":"0edeadd2280cf475167b7b87f61ea8d772a633f9"},"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KSXGitHub%2Fparallel-disk-usage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KSXGitHub%2Fparallel-disk-usage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KSXGitHub%2Fparallel-disk-usage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KSXGitHub%2Fparallel-disk-usage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KSXGitHub","download_url":"https://codeload.github.com/KSXGitHub/parallel-disk-usage/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254160559,"owners_count":22024571,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["chart","disk-usage","du","dust","filesystem","graph","pdu","rust","size"],"created_at":"2024-10-03T10:11:51.691Z","updated_at":"2026-04-03T02:03:57.607Z","avatar_url":"https://github.com/KSXGitHub.png","language":"Rust","readme":"# Parallel Disk Usage (pdu)\n\n[![Test](https://github.com/KSXGitHub/parallel-disk-usage/workflows/Test/badge.svg)](https://github.com/KSXGitHub/parallel-disk-usage/actions?query=workflow%3ATest)\n[![Benchmark](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/benchmark.yaml/badge.svg)](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/benchmark.yaml)\n[![Clippy](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/clippy.yaml/badge.svg)](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/clippy.yaml)\n[![Code formatting](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/fmt.yaml/badge.svg)](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/fmt.yaml)\n[![Crates.io Version](https://img.shields.io/crates/v/parallel-disk-usage?logo=rust)](https://crates.io/crates/parallel-disk-usage)\n\nHighly parallelized, blazing fast directory tree analyzer.\n\n## Description\n\n`pdu` is a CLI program that renders a graphical chart for disk usages of files and directories, it is an alternative to [`dust`](https://github.com/bootandy/dust) and [`dutree`](https://github.com/nachoparker/dutree).\n\n## Benchmark\n\nThe benchmark was generated by [a GitHub Workflow](https://github.com/KSXGitHub/parallel-disk-usage/blob/0.20.0/.github/workflows/deploy.yaml#L431-L601) and uploaded to the release page.\n\n\u003cdetails\u003e\u003csummary\u003ePrograms\u003c/summary\u003e\n\n* `pdu` v0.20.0\n* [`dust`](https://github.com/bootandy/dust) v1.2.1\n* [`dua`](https://github.com/Byron/dua-cli) v2.30.1\n* [`ncdu`](https://dev.yorhel.nl/ncdu)\n* [`gdu`](https://github.com/dundee/gdu) v5.31.0\n* `du`\n\n\u003c/details\u003e\n\n\u003cfigure\u003e\n  \u003cimg src=\"https://ksxgithub.github.io/parallel-disk-usage-0.20.0-benchmarks/tmp.benchmark-report.competing.block-size.svg\"\u003e\n  \u003cimg src=\"https://ksxgithub.github.io/parallel-disk-usage-0.20.0-benchmarks/tmp.benchmark-report.competing.deduplicate-hardlinks.svg\"\u003e\n  \u003cfigcaption align=\"center\"\u003e\n    benchmark results\n    \u003cem\u003e(lower is better)\u003c/em\u003e\n  \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n[_(See more)_](https://github.com/KSXGitHub/parallel-disk-usage-0.20.0-benchmarks/blob/master/tmp.benchmark-report.CHARTS.md)\n\n## Demo\n\n![screenshot](https://user-images.githubusercontent.com/11488886/127254941-d1fb30d8-18e0-40ac-a212-bbd6463aa624.png)\n\n[![asciicast of pdu command](https://asciinema.org/a/416663.svg)](https://asciinema.org/a/416663)\n\n[![asciicast of pdu command on /usr](https://asciinema.org/a/416664.svg)](https://asciinema.org/a/416664)\n\n## Features\n\n* Very fast.\n* Relative comparison of separate files.\n* Extensible via the library crate or JSON interface.\n* Unbiased regarding hardlinks: All hardlinks are treated as equally real.\n* Optional hardlink detection and deduplication (would make `pdu` proportionally slower).\n* Optional progress report (would make `pdu` slightly slower).\n* Customize tree depth.\n* Customize chart size.\n\n## Limitations\n\n* Ignorant of reflinks (from COW filesystems such as BTRFS and ZFS).\n* Does not follow symbolic links.\n* The runtime is optimized at the expense of binary size.\n\n## Usage\n\nSee [USAGE.md](./USAGE.md) for the full help text.\n\n## Development\n\n### Prerequisites\n\n* [`cargo`](https://github.com/rust-lang/cargo)\n\n### Test\n\n```sh\n./test.sh \u0026\u0026 ./test.sh --release\n```\n\n\u003cdetails\u003e\u003csummary\u003e\nEnvironment Variables\n\u003c/summary\u003e\n\n| name          | type              | default value | description                                     |\n|---------------|-------------------|---------------|-------------------------------------------------|\n| `FMT`         | `true` or `false` | `true`        | Whether to run `cargo fmt`                      |\n| `LINT`        | `true` or `false` | `true`        | Whether to run `cargo clippy`                   |\n| `DOC`         | `true` or `false` | `false`       | Whether to run `cargo doc`                      |\n| `BUILD`       | `true` or `false` | `true`        | Whether to run `cargo build`                    |\n| `TEST`        | `true` or `false` | `true`        | Whether to run `cargo test`                     |\n| `BUILD_FLAGS` | string            | _(empty)_     | Space-separated list of flags for `cargo build` |\n| `TEST_FLAGS`  | string            | _(empty)_     | Space-separated list of flags for `cargo test`  |\n| `TEST_SKIP`   | string            | _(empty)_     | Space-separated list of test names to skip      |\n\n\u003c/details\u003e\n\n### Run\n\n```sh\n./run pdu \"${arguments[@]}\"\n```\n\n* `\"${arguments[@]}\"`: List of arguments to pass to `pdu`.\n\n### Build\n\n#### Debug build\n\n```sh\ncargo build --bin pdu\n```\n\nThe resulting executable is located at `target/debug/pdu`.\n\n#### Release build\n\n```sh\ncargo build --bin pdu --release\n```\n\nThe resulting executable is located at `target/release/pdu`.\n\n### Update shell completion files\n\n```sh\n./generate-completions.sh\n```\n\n## Extending `parallel-disk-usage`\n\nThe [parallel-disk-usage crate](https://crates.io/crates/parallel-disk-usage) is both a binary crate and a library crate. If you desire features that `pdu` itself lacks (that is, after you have asked the maintainer(s) of `pdu` for the features but they refused), you may use the library crate to build a tool of your own. The documentation for the library crate can be found in [docs.rs](https://docs.rs/parallel-disk-usage).\n\nAlternatively, the `pdu` command provides `--json-input` flag and `--json-output` flag. The `--json-output` flag converts disk usage data into JSON and the `--json-input` flag turns said JSON into visualization. These 2 flags allow integration with other CLI tools (via pipe, as per the UNIX philosophy).\n\nBeware that the structure of the JSON tree differs depending on the number of file/directory names that were provided (as CLI arguments):\n* If there are only 0 or 1 file/directory names, the name of the tree root would be a real path (either `.` or the provided name).\n* If there are 2 or more file/directory names, the name of the tree root would be `(total)` (which is not a real path), and the provided names would correspond to the children of the tree root.\n\n## Installation\n\n### Any Desktop OS\n\n#### From GitHub\n\nGo to the [GitHub Release Page](https://github.com/KSXGitHub/parallel-disk-usage/releases) and download a binary.\n\n#### From [crates.io](https://crates.io)\n\n**Prerequisites:**\n  * [`cargo`](https://github.com/rust-lang/cargo)\n\n```sh\ncargo install parallel-disk-usage --bin pdu\n```\n\n### Arch Linux\n\n#### From the [Official Repository](https://archlinux.org/packages/extra/x86_64/parallel-disk-usage/)\n\n```sh\nsudo pacman -S parallel-disk-usage\n```\n\n\u003c!-- #### From [Khải's Pacman Repository](https://github.com/KSXGitHub/pacman-repo)\n\nFollow the [installation instruction](https://github.com/KSXGitHub/pacman-repo#installation) then run the following command:\n\n```sh\nsudo pacman -S parallel-disk-usage\n``` --\u003e\n\n## Distributions\n\n[![Packaging Status](https://repology.org/badge/vertical-allrepos/parallel-disk-usage.svg)](https://repology.org/project/parallel-disk-usage/versions)\n\n## Frequently Asked Questions\n\n### Is this project vibe-coded?\n\nNo. \"Vibe coding\" means letting AI do everything without human involvement. This project uses AI-assisted workflows with active human direction and reviews.\n\nUsing AI also does not mean poor quality. On the contrary, AI reviews have helped detect previously undetected bugs.\n\n## Similar programs\n\n* **CLI:**\n  * `du`\n  * [`dust`](https://github.com/bootandy/dust)\n  * [`dutree`](https://github.com/nachoparker/dutree)\n  * [`dua`](https://github.com/byron/dua-cli)\n* **TUI:**\n  * [`ncdu`](https://dev.yorhel.nl/ncdu)\n  * [`gdu`](https://github.com/dundee/gdu)\n  * [`godu`](https://github.com/viktomas/godu)\n* **GUI:**\n  * [GNOME's Disk Usage Analyzer, a.k.a. `baobab`](https://apps.gnome.org/Baobab/)\n  * [Filelight](https://apps.kde.org/filelight/)\n\n## License\n\n[Apache 2.0](https://git.io/JGIAt) © [Hoàng Văn Khải](https://ksxgithub.github.io/).\n","funding_links":["https://github.com/sponsors/KSXGitHub","https://patreon.com/khai96_","https://paypal.me/khai96x"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksxgithub%2Fparallel-disk-usage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fksxgithub%2Fparallel-disk-usage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksxgithub%2Fparallel-disk-usage/lists"}