Releases: dundee/gdu
Release list
v5.37.0
What's New
This release brings a browser-based UI, more control over long scans, richer
file-list information, and finer-grained configuration and export options. Below
is a walkthrough of each new feature.
Web UI
Gdu can now serve a browser-based interface instead of the terminal UI.
gdu --web /some/dir
Gdu scans the directory, prints the URL, and (by default) opens it in your
default browser. The interface shows an animated donut chart of the current
directory's contents alongside a sortable table with size bars, breadcrumb
navigation, and a disk-usage/apparent-size toggle. Scan progress is streamed
live while the analysis runs.
By default the server binds to localhost on a random free port. Use
--web-listen (or the web.listen config option) to pin a fixed address, and
--web-open=false to print the URL without launching a browser.
The compiled web assets are embedded in the binary, so no extra files or network
access are required.
Security: the web UI is read-only and has no authentication. It exposes file
names and sizes over HTTP, so keep it bound to localhost (the default). Binding
to a non-loopback address makes those details reachable by other hosts on the
network and prints a warning.
Preview results during a scan (Tab)
You no longer have to wait for a scan to finish before looking at results. Press
Tab during a scan to preview the directory totals found so far, then keep
watching them update as the analysis continues.
by @ultranity in #594
Stop scanning and keep partial results
Long scans can now be cut short without losing work. Press Ctrl+C during a scan
to stop scheduling new work and keep the results found so far, so you can start
browsing (or exporting) immediately instead of aborting the whole run.
by @ShivamB25 in #606
Show symlink target
Symlinks can be displayed as name -> target, showing the link destination next
to the name just like ls -l. Enable it with:
gdu --show-symlink-target /some/dir
Symlinks and sockets continue to be marked with the @ file flag.
by @yurenchen000 in #612
Move items to XDG trash (D key)
In addition to permanent deletion (d), you can now move the selected file or
directory to the XDG trash with the D key on Linux, matching the behavior of most
desktop file managers so items can be recovered later.
Configurable colors for marked items
The colors used for marked items can now be customized in the configuration
file:
style:
marked:
text-color: white
background-color: "#6600cc"
System-wide config: /etc/gdu.yaml
Gdu now loads /etc/gdu.yaml as a system-wide configuration file, letting
administrators set defaults for all users on a machine. Per-user config files
($HOME/.config/gdu/gdu.yaml and $HOME/.gdu.yaml) still apply on top of it.
Numeric percentage on usage bars
Usage bars now display the numeric percentage alongside the bar, making it easier
to read exactly how much space each item takes relative to its siblings.
Confirm before quitting after a long scan
To prevent accidentally discarding the results of a long scan, gdu now asks for
confirmation before quitting when a lengthy scan's results would otherwise be
lost. You can disable the prompt with --no-confirm-quit.
by @ultranity in #593
Honor block size environment variables
Terminal output now honors the BLOCK_SIZE and BLOCKSIZE environment
variables. BLOCK_SIZE takes precedence; both accept GNU coreutils block-size
values such as 1K, kB, human-readable, and si. Explicit size-format flags
override these variables, and exported JSON always retains raw byte values.
by @ShivamB25 in #604
Customize JSON export attributes
The JSON export can now be trimmed to only the attributes you need:
gdu --output-attrs=asize,dsize -o out.json /some/dir
name is always included; available optional attributes are asize, dsize,
items, mtime, and notreg. Directories always retain their asize, dsize,
and items summary stats so they can be preserved on import.
by @ShivamB25 in #605
Exclude OneDrive online-only file sizes
Gdu can now exclude the sizes of OneDrive online-only ("cloud") files, so
placeholder files that aren't actually stored locally don't inflate your disk
usage totals.
Summary of all changes
- feat: add web UI by @dundee in #617
- feat: preview results found so far during a scan (Tab) by @ultranity in #594
- feat: stop scanning and keep partial results by @ShivamB25 in #606
- feat: show symlink target #260 by @yurenchen000 in #612
- feat: move items to XDG trash with D key (#12) by @phaethix in #608
- feat: config option to change colors for marked items by @dundee in #566
- feat: load /etc/gdu.yaml as system-wide config by @graysky2 in #567
- feat: show numeric percentage on usage bars by @dundee in #590
- feat: confirm before quitting when a long scan would be lost by @ultranity in #593
- feat: honor block size environment by @ShivamB25 in #604
- feat: customize JSON export attributes by @ShivamB25 in #605
- feat: excluding OneDrive online file storage sizes by @tpill90 in #609
- feat: update vite by @dundee in #628
- fix: respect --show-apparent-size for file paths in non-interactive mode by @wahajahmed010 in #558
- fix: ignore for root directory not working by @dundee in #573
- fix: correct item count and size for empty dirs by @dundee in #574
- fix: stack overflow by @dundee in #577
- fix: import panic for empty array by @dundee in #578
- fix: import panic on wrong name by @dundee in #581
- fix: implement IsDir and GetPath for SimpleDir by @dundee in #583
- fix: SQLite analyzer permission error flags by @sjh9714 in #598
- fix(report): make JSON export respect -t, --depth and --summarize filters by @ShivamB25 in #600
- fix: sanitize control characters in paths printed on quit by @carfeii in #616
- fix(report): preserve directory stats in JSON export by @ShivamB25 in #603
- fix(device): skip malformed mount lines instead of panicking by @VXNCXNX in #625
- fix(cmd): stop truncating a --config-file path at the first space by @VXNCXNX in #624
- fix(ignore): anchor the whole ignore-pattern alternation by @VXNCXNX in #623
- fix: don't materialize dataless files when scanning on macOS by @ngrilly in #622
- fix(timefilter): drop the stray separator in the until= filter footer by @VXNCXNX in #621
- perf: concurrent processing in sqlite analyzer by @dundee in #565
- refactor: use atomic counter instead of mutex by @dundee in #597
- docs: fix typo "relase" -> "release" in release run-book by @maxtaran2010 in #601
- docs: for contributors and agents by @dundee in #626
- chore(deps): bump golang.org/x/text from 0.36.0 to 0.37.0 by @dependabot[bot] in #569
- chore(deps): bump golang.org/x/sys from 0.43.0 to 0.44.0 by @dependabot[bot] in #568
- chore(deps): bump golang.org/x/sys from 0.44.0 to 0.45.0 by @dependabot[bot] in #575
- chore(deps): bump github.com/gdamore/tcell/v2 from 2.13.9 to 2.13.10 by @dependabot[bot] in #579
- chore(deps): bump github.com/mattn/go-isatty from 0.0.21 to 0.0.22 by @dependabot[bot] in #559
- chore(deps): bump modernc.org/sqlite from 1.49.1 to 1.51.0 by @dependabot[bot] in #582
- chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #592
- chore(deps): bump golang.org/x/net from 0.47.0 to 0.55.0 by @dependabot[bot] in #596
- chore(deps): bump actions/setup-go from 6 to 7 by @dependabot[bot] in #602
- chore(deps): bump actions/setup-node from 4 to 7 by @dependabot[bot] in #620
- chore(deps-dev): bump vitest from 2.1.9 to 3.2.6 in /webui/frontend by @dependabot[bot] in #619
- chore(deps): bump github/codeql-action from 4 to 4.37.4 by @dependabot[bot] in #613
- chore(deps): bump docker/login-action from 4 to 4.5.2 by @dependabot[bot] in #610
- chore(deps): bump modernc.org/sqlite from 1.51.0 to 1.52.0 by @dependabot[bot] in #588
- cho...
v5.36.1
What's Changed
- perf: top dir analyzer optimizations by @dundee in #562
- perf: replace progress channel with atomic counters and ticker polling in all analyzers by @dundee in #563
- refactor: analyzers and improve SQLite backend by @dundee in #549
- fix: improve SQLite storage and analyzer implementation by @dundee in #541
- test: fix flaky test by @dundee in #561
Full Changelog: v5.36.0...v5.36.1
v5.36.0
This release brings a major improvement in memory consumption (mainly for larger disks) and also a bit better speed for non-interactive mode.
What's Changed
- feat: top-dir analyzer for non-interactive mode by @dundee in #557
- feat: implement deletion, JSON encoding, and query optimizations for SQLite storage by @dundee in #536
- test: cover internal packages by @dundee in #535
- chore(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.21 by @dependabot[bot] in #546
- chore(deps): bump golang.org/x/sys from 0.42.0 to 0.43.0 by @dependabot[bot] in #545
- chore(deps): bump modernc.org/sqlite from 1.48.0 to 1.48.2 by @dependabot[bot] in #548
- chore(deps): bump golang.org/x/text from 0.34.0 to 0.36.0 by @dependabot[bot] in #547
- chore(deps): bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #552
- chore(deps): bump modernc.org/sqlite from 1.48.2 to 1.49.1 by @dependabot[bot] in #553
- chore(deps): bump github.com/gdamore/tcell/v2 from 2.13.8 to 2.13.9 by @dependabot[bot] in #554
Full Changelog: v5.35.0...v5.36.0
v5.35.0
What's Changed
- feat: show progress bar when analysing the whole disk/partition by @dundee in #523
- feat: print marked items to stdout by @dundee in #528
- feat: add support for browsing tar archives by @dundee in #513
- feat: force interactive mode by @dundee in #533
- fix: create parent dir for sqlite db by @dundee in #511
- fix: use smaller value log file size for 32bit systems by @dundee in #519
- fix: make itemCount 64bit by @dundee in #520
- ci: use Golang 1.26 by @dundee in #508
- ci: drop support for golang 1.24 by @dundee in #521
- ci: release gh action by @dundee in #527
- test: move coverage for app package by @dundee in #534
- chore(deps): bump modernc.org/sqlite from 1.46.1 to 1.47.0 by @dependabot[bot] in #515
- chore(deps): bump github.com/fatih/color from 1.18.0 to 1.19.0 by @dependabot[bot] in #524
- chore(deps): bump codecov/codecov-action from 5 to 6 by @dependabot[bot] in #529
- chore(deps): bump modernc.org/sqlite from 1.47.0 to 1.48.0 by @dependabot[bot] in #531
Full Changelog: v5.34.0...v5.35.0
gdu v5.34.2
fix: run sqlite test only on supported platforms
Full Changelog: v5.34.1...v5.34.2
gdu v5.34.1
fix: make itemCount 64bit (#520)
fix: use smaller value log file size for 32bit systems (#519)
fix: create parent dir for sqlite db (#511)
Full Changelog: v5.34.0...v5.34.1
gdu v5.34.0
What's Changed
- feat: add interactive file type filtering via
-Tkey by @ShivamB25 in #493 - feat: allow navigating above launch directory by @ShivamB25 in #494
- feat: add
--no-view-fileflag for interactive viewer (#428) by @ShivamB25 in #496 - fix: enable
--show-item-countin non-interactive mode (#431) by @ShivamB25 in #495 - fix: align columns in non-interactive mode by @dundee in #500
- fix: support for sqlite db on all platforms by @dundee in #507
- chore(deps): bump modernc.org/sqlite from 1.45.0 to 1.46.1 by @dependabot[bot] in #499
- chore(deps): bump docker/build-push-action from 6 to 7 by @dependabot[bot] in #505
- chore(deps): bump docker/login-action from 3 to 4 by @dependabot[bot] in #503
- chore(deps): bump docker/metadata-action from 5 to 6 by @dependabot[bot] in #506
Full Changelog: v5.33.0...v5.34.0
gdu v5.33.0
What's Changed
- feat: add SQLite analyzer and some assorted changes by @quetz in #484
- feat: add
--archive-browsingflag to show zip/jar files as dirs, add--collapse-pathflag to for collapsing single-child directory - feat: add
--depthflag by @sguptasf in #485 - feat: add options to force output units by @shuaixr in #464
- feat: allow excluding file(s) by their type by @AmauMaill in #472
- feat: bump version of go and badger by @joy4eg in #438
- feat: time filters by @Sarke in #425
- feat: bump versions of dependencies by @dundee in #450
chains by @bingoohuang in #434 - fix: non-deterministic ordering in ParallelAnalyzer by @ShivamB25 in #445
- docs: add mise alternative method installation by @jylenhof in #465
- chore: bump Go to 1.25.5 to fix crypto/x509 CVEs by @almeida-silas in #471
New Contributors
- @joy4eg made their first contribution in #438
- @Sarke made their first contribution in #425
- @bingoohuang made their first contribution in #434
- @shuaixr made their first contribution in #464
- @jylenhof made their first contribution in #465
- @almeida-silas made their first contribution in #471
- @AmauMaill made their first contribution in #472
- @sguptasf made their first contribution in #485
- @quetz made their first contribution in #484
Full Changelog: v5.32.0...v5.33.0
gdu v5.32.0
What's Changed
- feat: Add --no-spawn-shell flag to disable shell access by @ShivamB25 in #440
- feat: Add --reverse-sort flag for non-interactive mode by @ShivamB25 in #436
- feat: switch mouse flag name, mimic default ncdu behavior by @shantanugadgil in #420
- feat: bump version of tcell, drop support for Golang 1.22 by @dundee in #432
- fix: make 'no' the default button in delete/empty confirmation dialogs by @ShivamB25 in #437
- fix: reorder
--mouseoption by @shantanugadgil in #433 - fix: ulikunitz/xz package update to fix vulnerability by @jullianow in #446
- ci: use Golang 1.24.4 by @shantanugadgil in #421
- refactor: struct align by @dundee in #442
- docs: fix link to configuration.md by @joliss in #392
New Contributors
- @shantanugadgil made their first contribution in #420
- @jullianow made their first contribution in #446
- @joliss made their first contribution in #392
Full Changelog: v5.31.0...v5.32.0
gdu v5.31.0
What's Changed
- feat: relative path ignore support by @s0up4200 in #398
- feat: Add support showing size of absent git-annex'ed files by @stv0g in #404
- fix: ctrl_z corruption #253 by @yurenchen000 in #406
- fix: item count for --show-item-count by @dundee in #416
- fix: automatically run non-interactive when related flag set by @dundee in #418
New Contributors
- @kianmeng made their first contribution in #397
- @s0up4200 made their first contribution in #398
- @stv0g made their first contribution in #404
- @GamerBene19 made their first contribution in #415
Full Changelog: v5.30.1...v5.31.0