// changelog

What changed.

One release so far. Future entries land here, newest first, and the version this site documents is always the one in the footer.

1.0.0 — first public release

The complete tool: segment parser, keep/drop policy, EXIF reader, atomic writer, directory walker, and the test suite that holds them up.

  • Removes EXIF, XMP and extended XMP, Photoshop/IPTC, JFXX, MPF, FlashPix, Ducky, JPEG comments, and any unrecognised APPn segment.
  • Keeps ICC colour profiles, JFIF and Adobe segments by default; --strict drops all three.
  • Identification by the payload's identifier string rather than the marker code, so ICC survives where MPF does not, both under APP2.
  • Entropy-coded image data copied verbatim from the SOS marker to end of file.
  • EXIF orientation preserved by re-emitting a minimal 36-byte block; --no-keep-orientation to drop it too.
  • Four modes: scrub, -n dry run, --check for scripts, -l for structure.
  • Sibling .scrubbed.jpg output, -d mirrored output trees, or -i atomic in-place replacement.
  • Write-then-fsync-then-rename on every path; permissions and ownership carried onto in-place replacements; unchanged files left entirely untouched.
  • Directory walking with sorted entries, symlink refusal, a 64-level depth limit, per-file error isolation, and skipping of its own outputs and temporaries.
  • Exit codes 0 / 1 / 2 / 64, with an operational error outranking a dirty --check verdict.
  • Verified on macOS 26.5.2 arm64 (Apple clang 21) and Linux aarch64 and x86-64 (gcc 11–13, clang 18): 741 checks, 8/8 suites, zero warnings under -Wall -Wextra -Wpedantic -Wconversion.
  • 7,575,421 libFuzzer executions with zero crashes and zero leaks; 30 SIGKILLs mid-write on a 24 MB in-place scrub with zero partial files; 13/13 fixtures agreeing with exiftool.

MIT licence. Source at github.com/norsehorse-dev/ScrubPony.

Ahead

What is being worked on and what is merely being considered are kept apart on the roadmap. Nothing is listed as shipped here until it is.