id = "dua-cli"
name = "dua"
homepage = "https://github.com/Byron/dua-cli"
description = "A fast disk-usage analyzer with an interactive terminal interface."
executables = ["dua"]
[dotfiles]
paths = [
"[configHome]/dua-cli/config.toml",
"[appData]/dua-cli/config.toml",
"%APPDATA%/dua-cli/config.toml",
]
secret = []
side_effect = false
[commands]
format = 1
label = "dua"
description = "Disk usage analysis with dua: aggregate sizes, the interactive browser, disposable-directory discovery and flame graphs. Short flags, snapshots and config subcommands are not covered."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.subcommand]]
path = ["aggregate"]
label = "Aggregate sizes"
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/Byron/dua-cli/blob/main/README.md"
revision = "2026-10-27"
evidence = """
dua aggregate --help
Files that share only some blocks are not deduplicated, and `--apparent-size`
By default `aggregate` prints a flat listing. Pass `--depth N` to instead print an indented tree
`--no-sort` and `--no-total` work the same way they do for the flat listing.
`--ignore-from FILE` reads gitignore-style patterns and leaves everything they match out of the
dua --ignore-from .duaignore
dua i
dua interactive
dua clean --depth 3 ~/dev ~/Downloads
Traversal options, `--no-entry-check`, and `--once` are supported.
dua flamegraph -o disk-usage.svg
"--threads",
// Paths were explicitly passed by the user on the command-line; per `--ignore-dirs`'s
bail!("stacks cannot be used with --format");
pub enum ByteFormat { Metric, Binary, Bytes, GB, Gib, MB, Mib }
"""
[[commands.subcommand.field]]
id = "inputs"
label = "Files or directories"
description = "Defaults to the current directory."
type = "path"
position = 0
multiple = true
path = { kind = "any", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.field]]
id = "depth"
label = "Tree depth"
description = "Print an indented tree this many levels deep."
type = "integer"
option = ["--depth"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "apparent_size"
label = "Apparent size"
description = "Show apparent size instead of disk usage."
type = "boolean"
option = ["--apparent-size"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "format"
label = "Byte format"
type = "enum"
option = ["--format"]
choices = [{ value = "metric", label = "Metric" }, { value = "binary", label = "Binary" }, { value = "bytes", label = "Bytes" }, { value = "gb", label = "GB" }, { value = "gib", label = "GiB" }, { value = "mb", label = "MB" }, { value = "mib", label = "MiB" }]
sources = ["readme"]
[[commands.subcommand.field]]
id = "no_sort"
label = "Keep command-line order"
type = "boolean"
option = ["--no-sort"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "no_total"
label = "No total column"
type = "boolean"
option = ["--no-total"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "ignore_from"
label = "Ignore patterns file"
description = "gitignore-style patterns whose matches are left out."
type = "path"
option = ["--ignore-from"]
multiple = true
path = { kind = "file", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.field]]
id = "threads"
label = "Threads"
description = "0 uses the number of logical processors."
type = "integer"
option = ["--threads"]
sources = ["readme"]
[[commands.subcommand.task]]
id = "summary"
label = "Size summary"
fields = ["inputs", "depth", "apparent_size", "format"]
required = []
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["inputs", "depth", "apparent_size", "format"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["no_sort", "no_total", "ignore_from", "threads"]
[[commands.subcommand]]
path = ["interactive"]
label = "Browse interactively"
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/Byron/dua-cli/blob/main/README.md"
revision = "2026-10-27"
evidence = """
dua aggregate --help
Files that share only some blocks are not deduplicated, and `--apparent-size`
By default `aggregate` prints a flat listing. Pass `--depth N` to instead print an indented tree
`--no-sort` and `--no-total` work the same way they do for the flat listing.
`--ignore-from FILE` reads gitignore-style patterns and leaves everything they match out of the
dua --ignore-from .duaignore
dua i
dua interactive
dua clean --depth 3 ~/dev ~/Downloads
Traversal options, `--no-entry-check`, and `--once` are supported.
dua flamegraph -o disk-usage.svg
"--threads",
// Paths were explicitly passed by the user on the command-line; per `--ignore-dirs`'s
bail!("stacks cannot be used with --format");
pub enum ByteFormat { Metric, Binary, Bytes, GB, Gib, MB, Mib }
"""
[[commands.subcommand.field]]
id = "inputs"
label = "Files or directories"
description = "Defaults to the current directory."
type = "path"
position = 0
multiple = true
path = { kind = "any", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.field]]
id = "apparent_size"
label = "Apparent size"
description = "Show apparent size instead of disk usage."
type = "boolean"
option = ["--apparent-size"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "ignore_from"
label = "Ignore patterns file"
description = "gitignore-style patterns whose matches are left out."
type = "path"
option = ["--ignore-from"]
multiple = true
path = { kind = "file", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.field]]
id = "threads"
label = "Threads"
description = "0 uses the number of logical processors."
type = "integer"
option = ["--threads"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "format"
label = "Byte format"
type = "enum"
option = ["--format"]
choices = [{ value = "metric", label = "Metric" }, { value = "binary", label = "Binary" }, { value = "bytes", label = "Bytes" }, { value = "gb", label = "GB" }, { value = "gib", label = "GiB" }, { value = "mb", label = "MB" }, { value = "mib", label = "MiB" }]
sources = ["readme"]
[[commands.subcommand.task]]
id = "browse"
label = "Browse a directory"
fields = ["inputs", "apparent_size", "ignore_from"]
required = []
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["inputs", "apparent_size", "ignore_from"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["threads", "format"]
[[commands.subcommand]]
path = ["clean"]
label = "Find disposable directories"
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/Byron/dua-cli/blob/main/README.md"
revision = "2026-10-27"
evidence = """
dua aggregate --help
Files that share only some blocks are not deduplicated, and `--apparent-size`
By default `aggregate` prints a flat listing. Pass `--depth N` to instead print an indented tree
`--no-sort` and `--no-total` work the same way they do for the flat listing.
`--ignore-from FILE` reads gitignore-style patterns and leaves everything they match out of the
dua --ignore-from .duaignore
dua i
dua interactive
dua clean --depth 3 ~/dev ~/Downloads
Traversal options, `--no-entry-check`, and `--once` are supported.
dua flamegraph -o disk-usage.svg
"--threads",
// Paths were explicitly passed by the user on the command-line; per `--ignore-dirs`'s
bail!("stacks cannot be used with --format");
pub enum ByteFormat { Metric, Binary, Bytes, GB, Gib, MB, Mib }
"""
[[commands.subcommand.field]]
id = "inputs"
label = "Directories to search"
description = "Defaults to the current directory."
type = "path"
position = 0
multiple = true
path = { kind = "directory", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.field]]
id = "depth"
label = "Discovery depth"
description = "0 checks only the supplied directories."
type = "integer"
option = ["--depth"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "no_entry_check"
label = "Skip entry presence check"
description = "Faster on slow filesystems."
type = "boolean"
option = ["--no-entry-check"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "ignore_from"
label = "Ignore patterns file"
description = "gitignore-style patterns whose matches are left out."
type = "path"
option = ["--ignore-from"]
multiple = true
path = { kind = "file", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.task]]
id = "clean"
label = "Search for disposable directories"
fields = ["inputs", "depth"]
required = []
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["inputs", "depth"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["no_entry_check", "ignore_from"]
[[commands.subcommand]]
path = ["flamegraph"]
label = "Render a flame graph"
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/Byron/dua-cli/blob/main/README.md"
revision = "2026-10-27"
evidence = """
dua aggregate --help
Files that share only some blocks are not deduplicated, and `--apparent-size`
By default `aggregate` prints a flat listing. Pass `--depth N` to instead print an indented tree
`--no-sort` and `--no-total` work the same way they do for the flat listing.
`--ignore-from FILE` reads gitignore-style patterns and leaves everything they match out of the
dua --ignore-from .duaignore
dua i
dua interactive
dua clean --depth 3 ~/dev ~/Downloads
Traversal options, `--no-entry-check`, and `--once` are supported.
dua flamegraph -o disk-usage.svg
"--threads",
// Paths were explicitly passed by the user on the command-line; per `--ignore-dirs`'s
bail!("stacks cannot be used with --format");
pub enum ByteFormat { Metric, Binary, Bytes, GB, Gib, MB, Mib }
"""
[[commands.subcommand.field]]
id = "inputs"
label = "Files or directories"
description = "Defaults to the current directory."
type = "path"
position = 0
multiple = true
path = { kind = "any", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.field]]
id = "output"
label = "SVG output file"
description = "Defaults to a temporary file."
type = "path"
option = ["-o"]
path = { kind = "file", role = "output", must_exist = false }
effect = "overwrite"
sources = ["readme"]
[[commands.subcommand.field]]
id = "depth"
label = "Depth"
type = "integer"
option = ["--depth"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "apparent_size"
label = "Apparent size"
description = "Show apparent size instead of disk usage."
type = "boolean"
option = ["--apparent-size"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "ignore_from"
label = "Ignore patterns file"
description = "gitignore-style patterns whose matches are left out."
type = "path"
option = ["--ignore-from"]
multiple = true
path = { kind = "file", role = "input", must_exist = true }
sources = ["readme"]
[[commands.subcommand.task]]
id = "svg"
label = "Write an SVG"
fields = ["inputs", "output", "depth"]
required = ["output"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["inputs", "output", "depth"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["apparent_size", "ignore_from"]