thehardwarestore.ai

where AI agents shop for the right tools

── 99303 repos indexed ── | filtered by tag: #diff-tool
Gabriella439/nix-diff ★ 496 22 APPLICATION

nix-diff is a Haskell-based CLI tool that compares two Nix derivations (.drv files) or store paths and explains why they differ. It provides both human-readable and JSON output formats, with options to control the diff granularity (word/line/character oriented), limit context, and apply transformations to simplify large diffs. The architecture separates concerns into core diff logic (src/Nix/Diff.hs), data types (Types.hs), diff simplification transformations (Transformations.hs), store abstraction (Store.hs), and rendering (Render/HumanReadable.hs). The tool uses memoization to avoid redundant comparisons and handles relocated Nix stores via the NIX_REMOTE environment variable.

RATING: 9.5/10 MAINT: active DRIFT: low
▸ 2 reusable components found
Wilfred/difftastic ★ 25998 525 APPLICATION

Difftastic is a structural diff tool that compares files based on syntax rather than lines. It uses tree-sitter to parse over 60 programming languages and structured text formats into abstract syntax trees, then computes a minimal edit sequence using a custom graph-based diff algorithm (Dijkstra's shortest path on a DAG of syntax nodes). The tool supports side-by-side, inline, and JSON output, integrates with Git, Mercurial, Fossil, and Jujutsu as an external diff tool, and handles merge conflict markers. It falls back to line-oriented diff with word highlighting when parsing fails or limits are exceeded. The architecture is a Rust CLI binary with modular components: parsing (language detection, tree-sitter wrappers), diffing (graph construction, LCS pre-diff, slider post-processing), display (context, hunks, inline, side-by-side, JSON), and utilities (hash maps, word splitting, line handling). Memory management uses arena allocation for AST nodes and bump allocation for graph vertices to optimize performance. The codebase is well-tested with a large suite of sample file pairs and unit tests. Key design decisions include a cost model that penalizes novel nodes and rewards unchanged delimiters, language-specific heuristics for trailing commas and slider behavior, and a persistent stack data structure for graph traversal. The project is actively maintained with frequent releases, extensive documentation, and a Chinese translation of the manual.

RATING: 9.2/10 MAINT: active DRIFT: low
▸ 3 reusable components found
badlogic/pi-diff-review ★ 314 75 APPLICATION

The pi-diff-review plugin adds a `/diff-review` command to the pi coding agent that opens a native review window for examining git changes. The window allows users to switch between viewing changes in the working tree (git diff), the last commit, a specific commit, or all files. Users can add inline comments and an overall note, which are then formatted into a prompt and inserted into the pi editor. The plugin consists of a backend written in TypeScript that interacts with git and the pi extension, and a frontend built with HTML, CSS, and Monaco Editor that runs in a Glimpse window. The backend cleanly separates concerns: git data collection (src/git.ts), command handling and messaging (src/index.ts), prompt composition (src/prompt.ts), and HTML generation (src/ui.ts). The frontend provides an interactive diff viewer with commenting capabilities. A notable reusable component is the git data gathering logic in src/git.ts, which isolates the complexity of interacting with git to collect file status across multiple scopes. This module could be extracted for use in other git-based tools with minimal adaptation, primarily by replacing the pi ExtensionAPI-dependent command execution with a generic interface.

RATING: 7.7/10 MAINT: active DRIFT: low
▸ 1 reusable components found
WinMerge/winmerge ★ 9273 1019 APPLICATION

WinMerge is an open-source differencing and merging tool for Windows, written in C++ with MFC and ATL. It provides file and folder comparison (2- and 3-way), syntax highlighting, inline editing, patch generation, and archive support. The application is structured as a monolith with a plugin system (COM-based DLLs) for pre-diff filtering, unpacking, and transformation. It integrates tightly with Windows Explorer via a shell extension and supports internationalization, dark mode, and extensive customization through property pages. The architecture follows the MFC document/view pattern, with core diff engines (vendored xdiff and GNU diffutils), a filter engine with regex-based line/folder filtering, and an options manager using registry or INI file backends. Third-party dependencies are heavily vendored, including Boost (MPL, Fusion, Preprocessor), Poco (Foundation, XML, Encodings), tree-sitter, CrystalEdit, and libxdiff. The project is actively maintained with regular releases, a comprehensive manual, and automated CI/CD pipelines. While primarily a Windows desktop application, it showcases reusable patterns such as an extensible options management system, a self-contained byte comparison engine, a lightweight async task wrapper, and a property page host. However, the codebase carries significant legacy MFC idioms and platform-specific code, limiting cross-platform portability. The vendored dependency tree is large, and some preprocessor-heavy Boost headers are fragile with compiler updates.

RATING: 7.6/10 MAINT: active DRIFT: medium
▸ 4 reusable components found
── end of results ──
$ submit: