What changed.
Newest first. The core version this site documents is always the one in the footer.
ScrubPony for Android 1.3.0 — the app
The same C core as the desktop tool, compiled through the NDK into a native app, scrubbing JPEG, PNG, WebP and HEIC entirely on the device.
- Two ways in — the system share sheet (Scrub metadata) and an in-app picker (the Photo Picker, or Pick from Files for anything outside the gallery) — and three ways out: save to
Pictures/ScrubPony, save to any folder, or share clean copies onward. - No network and no declared permissions. Originals are never changed; every scrub writes a fresh clean copy.
- Jetpack Compose and Material 3 interface, dark themed, with a first-run tour and scrub options (keep orientation, strict) in Settings.
- Localised in English, German, Spanish, French, Japanese and Brazilian Portuguese, switchable in-app.
- A direct APK download with a checksum and PGP signature; an F-Droid listing is in progress. Apache-2.0, at github.com/norsehorse-dev/ScrubPonyAndroid.
iOS is in development.
1.3 — PNG, WebP and HEIC
The core learned three more containers beyond the original JPEG, each detected by content rather than extension, each copying the image data through byte for byte exactly as JPEG does.
- PNG. Drops
tEXt,zTXt,iTXt(including XMP),eXIfandtIME; keeps rendering-correctness chunks unconditionally and theiCCPprofile by default. Orientation preserved in a minimaleXIfchunk. - WebP. Drops
EXIFandXMPchunks; keeps the image, alpha and animation chunks, andICCPby default. The RIFF header andVP8Xflags are recomputed in a two-pass write. - HEIC. Excises the
Exifandmime(XMP) items from the ISOBMFF structure and recomputes the surviving offsets, relocating the untouched image item. Keeps everything else — new item types are more likely image than metadata. Orientation rides on the nativeirotproperty. Elaborate layouts are refused and left untouched rather than risked. - JPEG is unchanged and remains the most weathered path. PNG, WebP and HEIC each ship with their own unit suites and mutation fuzzing; what has and has not yet been independently cross-verified for each is set out on the guarantees page.
- AVIF, which shares HEIC's container, is the natural next format but is not tested yet and is not claimed.
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.