Skip to content

v0.3.0

Choose a tag to compare

@deeplook deeplook released this 10 Mar 19:59
· 232 commits to main since this release

Added

  • Kubernetes pod scanning via pod://pod-name/path syntax — uses kubectl exec and
    find to build the tree without copying files out of the pod. Works on any running
    pod that has a POSIX shell and find (GNU or BusyBox). No extra dependency; only
    kubectl is required.
    • Namespace can be specified inline (pod://pod-name@namespace:/path) or via
      --k8s-namespace.
    • Container can be selected for multi-container pods via --k8s-container.
    • -xdev is intentionally omitted so mounted volumes (emptyDir, PVC, etc.) within
      the scanned path are traversed — the common case in k8s where images declare
      VOLUME entries that are always mounted on a separate filesystem.
    • Automatically falls back to a portable sh + stat loop on BusyBox/Alpine pods.
  • Docker container scanning via docker://container:/path syntax — uses docker exec
    and find to build the tree without copying files out of the container. Works on any
    running container that has a POSIX shell and find (GNU or BusyBox). No extra
    dependency; only the docker CLI is required.
    • Automatically detects BusyBox find (Alpine-based images) and falls back to a
      portable sh + stat loop when GNU -printf is unavailable.
    • Virtual filesystems (/proc, /sys, /dev) are skipped via -xdev.
    • Supports --exclude, --depth, --log, and all other standard options.
    • Dockerfile and .dockerignore added so the project itself can be used as a
      scan target.
  • SVG output format via --format svg or by saving to a .svg-suffixed path with --output.
    The output is a fully self-contained, interactive SVG file:
    • CSS hover highlight — file tiles brighten and gain a soft glow; directory headers
      brighten on mouse-over (.tile / .dir-tile classes, no JavaScript needed).
    • Floating tooltip panel — a JavaScript-driven semi-transparent panel tracks the cursor
      and shows the file or directory name, human-readable size, and file-type / item count.
      No external scripts or stylesheets — the panel logic is embedded in the SVG itself.
    • Van Wijk cushion shading — approximated via a single diagonal linearGradient
      overlay (gradientUnits="objectBoundingBox"), defined once and shared across all tiles.
      Matches the ×1.20 highlight / ×0.80 shadow range of the PNG renderer.
      Disabled with --no-cushion.
  • --format png|svg CLI option; format is also auto-detected from the --output file
    extension.
  • create_treemap_svg() added to the public Python API (from dirplot import create_treemap_svg).
  • drawsvg>=2.4 added as a core dependency.
  • Rename the treemap command to map (dirplot map ).
  • Add termsize subcommand and restructure CLI as multi-command app.
  • Add --depht parameter to limit the scanning of large file trees.
  • Support for SSH remote directory scanning (pip install dirplot[ssh]).
  • Support for AWS S3 buckets in the cloud (pip install dirplot[s3]).
  • Support for local archive files, .zip, tgz, .tar.xz, .rar, .7z, etc.
  • Include example archives for 17 different extentions for testing.
  • Comprehensive documentation.
  • github://owner/repo[@branch] URI scheme for GitHub repository scanning. The old
    github:owner/repo shorthand has been removed.
  • File tiles now have a 1-px dark outline (60/255 below fill colour per channel) so
    adjacent same-coloured tiles — e.g. a directory full of extension-less files — are
    always visually distinct rather than blending into a single flat block.

Changed

  • docs/REMOTE-ACCESS.md renamed to docs/EXAMPLES.md; Docker and Kubernetes pod
    sections added; images with captions added for all remote backends.

Fixed

  • SVG tooltips now show the original byte count when --log is active, not the
    log-transformed layout value. Node.original_size is populated by apply_log_sizes
    for both file and directory nodes and is used by the SVG renderer for data-size.
  • GitHub error messages are now clear and actionable.