v0.4.4
Fixed
--inlinefills terminal width in iTerm2 — the iTerm2 inline image protocol now
receives an explicitwidth=<cols>parameter so the image always fills the full column
count, regardless of pixel-to-cell rounding differences (scrollbar width, DPI). Ghostty
and Kitty are unaffected.
Added
-
dirplot diffcommand — compares two directory trees A and B as a treemap. Files are
sized by B. Borders show diff status: green = added, red = removed, blue = changed (content
differs). Unchanged files show no border. Supports--context/--no-context(default: on,
i.e. unchanged files are shown). A and B accept any source supported bydirplot map:
local directories,github://owner/repo[@ref], archives (.zip,.tar.gz, …),s3://,
ssh://,docker://, andpod://. All visual and remote-access options are available:
--output,--format,--show/--no-show,--inline,--font-size,--colormap,
--exclude,--depth,--size,--cushion/--no-cushion,--dark/--light,
--log-scale,--header/--no-header,--quiet,--ssh-key,--ssh-password-file,
--aws-profile,--no-sign,--github-token-file,--k8s-namespace,
--k8s-container,--password-file, and--no-input. -
dirplot diffenhancements — single-argument shorthand:dirplot diff .diffs the
working tree against HEAD (git) or tip (hg). Supports<path>@<ref>syntax for local git
repos (e.g.dirplot diff .@HEAD~5 .@HEAD). When a source is a local git or hg repo,
only tracked files are scanned (untracked files ignored). Change detection uses blob hash
comparison — edits that don't change file size are caught, and Git LFS files are handled
transparently (pointer size vs disk size no longer causes false positives). -
--includeflag (replaces--subtree, which remains as a hidden alias) — available on
map,diff, andmetrics. Keeps only the named subtrees after scanning; supports nested
paths (--include src/dirplot/fonts). Allowlist complement to--exclude. -
Glob patterns in
--exclude— the--excludeflag now accepts glob patterns on all
commands and all backends (local, git, hg, SSH, S3, GitHub, Docker, Kubernetes, archives).
Plain names (.git,node_modules) still work as before and match any path component.
New: single-component globs (*.egg-info), relative paths (src/vendor), and**globs
(**/__pycache__). Matching is consistent across all backends — previously each backend
used a different comparison strategy (absolute paths, basenames, full URIs). -
ISO 8601 timestamps in event log —
dirplot watch --event-lognow writes timestamps
as timezone-aware ISO 8601 strings (e.g.2026-05-12T14:21:52.341+00:00) instead of raw
Unix epoch floats.dirplot replaystill accepts both formats for backwards compatibility. -
--inlineondirplot gitanddirplot hg— displays the single-frame output
directly in the terminal (iTerm2, Kitty, Ghostty protocols). Only available in
single-frame mode (no--rangeor--period). -
@refon HTTPS GitHub URLs —https://github.com/owner/repo@v1.0is now a valid
repoargument fordirplot git, equivalent togithub://owner/repo@v1.0.
Changed
-
dirplot gitanddirplot hginterface redesigned — the animation model is now
explicit:--rangeor--periodtriggers animation mode (APNG / MP4, one frame per
commit); neither flag produces a single static PNG of the last commit (HEAD / tip). -
--animateremoved (git,hg) — use--rangeor--periodto produce an
animation. Without either, a single static frame is rendered. -
--max-commitsrenamed to--first(git,hg) — keeps the first N commits
after the range/period filter is applied. The old name is no longer accepted. -
--last Nadded (git,hg) — keeps the last N commits after the range/period
filter is applied. Counterpart to--first. -
--last PERIODrenamed to--period(git,hg) — the time-period filter is now
--period 30d,--period 24h, etc. The old--lastname for this flag is removed. -
--periodwithout--rangetriggers animation — commits within the period relative
to now are fetched and animated. GitHub URLs use--shallow-sincefor an efficient
date-bounded shallow clone. -
--periodwith--rangefilters relative to range end — when both are given, the
period cutoff is anchored to the timestamp of the last commit in the range rather than
to now (e.g. "last 3 days of activity on this branch"). -
--first/--lastslice post-fetch — the count cap is applied in Python after all
commits are fetched, not viagit log -n. This ensures--firstalways gives the oldest
N commits and--lastalways gives the newest N commits. -
--firstno longer controls clone depth when--rangeis given — previously
--first Nwould pass--depth Ntogit clone, making tags outside the shallow history
unreachable.--depthis now only used when--rangeis absent. -
Output extension
.pngfor animations — APNG output uses.png(not.apng). -
--output -implies--no-show— piping to stdout no longer opens a viewer window;
pass--showexplicitly to override. -
dirplot watchsimplified — animation output removed fromwatch; usedirplot replay
on a--event-logfile to produce APNG/MP4. New--snapshot FILEoption writes the current
treemap PNG on each filesystem change (for external tools or wallpaper updaters). -
matplotlib replaced by cmap — matplotlib is no longer a dependency. Colormap lookups
now use thecmappackage instead, which is significantly smaller. All colormap names
previously accepted by matplotlib continue to work.