experimental

isomer

The version string says nothing changed; the behavior says otherwise.

isomer judges whether a change is malicious. Give it two states of the same thing, a directory, a git ref, a package, or a container image, and it reads the delta in context: capability drift, whether the version bump matches the size of the change, what the commit claims to do, and what the disassembly says it does. “Gained network and process-spawn between 1.2.3 and 1.2.4, and the changelog says fix typo” is a sharper alert than any score on a whole tree. It is also the exact shape of xz-utils, event-stream, and ua-parser-js.

cleave extracts what each side can actually do. An expert system built from three decades of real supply-chain attacks, written up in our public compendium, judges the drift. That is how it can flag a backdoor nobody has seen before, from behavior alone, with no signature. Offline CLI built for CI, powered by Atomdrift Scan. Apache-2.0, no telemetry.

Heavy development

isomer is an early build. Verdicts, flags, and output formats change without notice. Try it, break it, file issues. Do not wire it into anything you cannot unwire. May eat your cat.

Design partners wanted

We want a handful of design partners: teams who will run isomer against real pipelines and real dependency churn and tell us early whether we are building the right thing. Contact Thomas Stromberg at t, at this domain.

The xz-utils test

The benchmark is the hardest version of the problem: the compiled, stripped liblzma.so from the 2024 xz-utils backdoor. The 5.4.5 → 5.6.0 diff verdicts HOSTILE. With every known signature ignored, the behavioral axis alone still fails CI, which is what catching a novel xz-shaped attack on release day requires. The 5.6.0 → 5.6.3 diff reads as the backdoor being removed, not added.

Surface

isomer ci                             # zero-config in CI: derives base..head from the environment
isomer fs   <old-path> <new-path>     # compare two trees; follows the dependency graph
isomer git  --repo <url> <old> <new>  # compare two commits/branches/tags of a remote repo   (planned)
isomer purl <purl@a> <purl@b>         # compare two published package versions               (planned)
isomer oci  <old-image> <new-image>   # compare two container images                         (planned)

ci and fs are implemented. Output is terminal, JSON, SARIF, or Markdown. Old, then new, like diff. Exit codes: 0 clean, 1 findings at or above --fail-on, 2 operational error, never confused with findings.

Install

Prebuilt binaries for macOS (signed and notarized) and Linux are on the releases page.

From source (Rust 1.94+):

git clone https://github.com/atomdrift-project/isomer.git
cd isomer
make install