]> ###2026.09.29.03 - Fail-safe dry run: Delete and Prune build cache act only when the request carries an explicit boolean dryRun=false. A missing, null or non-boolean value (including the string "false" and 0) is treated as a dry run, so an absent or malformed flag can never delete or prune. - Immediate feedback on every action button. On click the button and the destructive buttons are disabled and a banner appears at once (Refreshing, Deleting N images, Estimating, Starting prune, Saving); it is replaced by the result, or by the error with the buttons re-enabled. Prevents double-submits. - Support thread: https://forums.unraid.net/topic/200737-docker-orphan-cleaner/ ###2026.09.29.02 - Trim the packaged plugin README to the two-line Plugins-page blurb (bold name plus one sentence). The Unraid Plugins page renders the whole file inline, so the full docs (headings, table, sections) made the entry fill a screen. The full documentation now lives in the repository README. - Dry run now also covers Prune build cache. While Dry run is ticked the prune button reports "would reclaim X (N entries)" and no worker is started; the server refuses to spawn a prune when dryRun is set. The toggle is labelled "Dry run (applies to Delete and Prune)". ###2026.09.29.01 - Polish from the first real-world run on unraid-syd. - Results table now repeats the image label (tag, or repo@sha256:short for untagged) and size on every row. - New "Unique" figure per orphan (Size minus SharedSize from /system/df) and the header totals now show "N - X total, >= Y unique" so the reclaimable figure is not overstated by shared layers. - Plugins page entry reformatted to the Unraid convention (bold name line plus one sentence). - Build cache prune is now asynchronous. A large prune ran for minutes and returned nothing until it finished, hitting the 30 s socket timeout (and the nginx request timeout). The action now refuses a second prune, launches a detached worker with its own 900 s timeout, returns immediately, and the UI polls progress until it reports the reclaimed space. - Same-day builds now use a dot counter (2026.09.29.01, .02, ...). Note: Unraid compares plugin versions with strcmp, so the counter is zero-padded. ###2026.09.29 - Fix: superseded image pulls were not listed. An image that lost its tag when a tag moved to a newer pull (empty RepoTags, still carrying RepoDigests) is now shown as an untagged orphan, along with all other untagged images. The orphan set now matches the daemon's top-level image list (what the Unraid Docker page enumerates). - Untagged rows now show the repository from their digest (for example wordpress@sha256:abcd1234abcd) so the user can tell what the image was. - Moved to Settings > User Utilities instead of a top-level nav entry, and the header summary now reports per-class counts. ###2026.09.28 - First release. - Lists Docker images that no container references (running or stopped). - Classifies each orphan as pinned, template-referenced, compose-referenced, tagged or untagged in that precedence order. - Bulk selection and deletion, one image per API call, never forced. - Reports child images so a refused parent does not fail the whole batch. - Shows the reclaimable build cache and prunes it on request. - Optional scheduled notify-only or untagged-only cleanup with pins and a minimum age. mkdir -p &pluginLOC; for old in $(ls &pluginLOC;/&name;-*.txz 2>/dev/null | grep -v "&packagefile;"); do rm -f "$old"; done &packageURL; 512269ad6b68da03a59856d4c9f675ec2bc11b2f11ee7b0ab2c450b621a49e7e update_cron echo "" echo "------------------------------------------------------" echo " Docker Orphan Cleaner installed" echo " version &version;" echo "" echo " Open it from Tools (Settings > User Utilities)." echo "------------------------------------------------------" echo "" removepkg &name; 2>/dev/null || true rm -rf &emhttpLOC;; rm -rf &pluginLOC;; update_cron