oodiff

Capability-bounded file and directory comparison for the openOODA era.

v0.3.0 100% openOODA Myers LCS GNU diff Parity CI 100% Green MCP Native

Install

1. Web Installer (Zero Dependencies)

curl -fsSL https://openooda-tools.github.io/oodiff/install.sh | bash

Installs native standalone binary to /usr/local/bin (or ~/.local/bin) with strict SHA-256 seal verification.

2. Native Packages (APT & DNF)

Signed release packages are attached to every GitHub release:

# Debian, Ubuntu (APT)
sudo apt install ./oodiff_0.3.0-1_amd64.deb

# Fedora, RHEL, Rocky, Alma (DNF)
sudo dnf install ./oodiff-0.3.0-1.*.rpm

Or install directly via the universal script with package manager integration:

curl -fsSL https://openooda-tools.github.io/oodiff/install.sh | bash -s -- --package

Why not just diff?

CapabilityGNU diffoodiff
Default formatnormal diffnormal diff (byte-for-byte identical)
Unified format (-u, -U NUM)yesbyte-for-byte hunk parity
Exit codes (0 identical, 1 diffs, 2 error)yesPOSIX exit code contract strictly held
Normalization (-i, -w, -b, -B)yesUTF-8 multibyte case folding & whitespace pruning
Directory recursion & creation (-r, -N)yesrecursion cycle protected (ln -s . loop safe)
Device nodes (/dev/null, /dev/stdin)yespure capability interception for patch workflows
Performance optimizationheuristicsDJB2 integer line hashing + Myers LCS
Agent surface (MCP stdio)noJSON-RPC 2.0 (diff_files, diff_dirs)
Memory safety & DoS ceilingunbounded100MB input ceiling, capability sandbox

Try it

oodiff file_a.txt file_b.txt              # Standard normal diff (default)
oodiff -u file_a.txt file_b.txt           # Unified diff
oodiff -i -b -B file_a.txt file_b.txt     # Ignore case, whitespace, & blank lines
oodiff -r -N src_v1/ src_v2/              # Recursive directory diff
oodiff --mcp                              # Model Context Protocol stdio server

Source & Docs · Releases · openOODA-tools