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] # https://github.com/Byron/dua-cli/blob/master/src/config.rs — the official # source resolves the config file as dua-cli/config.toml below the platform # config directory: $XDG_CONFIG_HOME on Unix, ~/Library/Application Support # on macOS, and %APPDATA% on Windows. 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"]