// 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
APPnsegment. - Keeps ICC colour profiles, JFIF and Adobe segments by default;
--strictdrops 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
SOSmarker to end of file. - EXIF orientation preserved by re-emitting a minimal 36-byte block;
--no-keep-orientationto drop it too. - Four modes: scrub,
-ndry run,--checkfor scripts,-lfor structure. - Sibling
.scrubbed.jpgoutput,-dmirrored output trees, or-iatomic 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
--checkverdict. - 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.