# Difftastic — Structural Diff Tool That Understands Syntax > A structural diff tool that compares files based on their syntax tree rather than line-by-line text, producing diffs that reflect actual code changes instead of incidental whitespace or formatting shifts. ## Install Save in your project root: # Difftastic — Structural Diff Tool That Understands Syntax ## Quick Use ```bash # Install via cargo cargo install --locked difftastic # Or on macOS brew install difftastic # Compare two files difft old.py new.py # Use as git diff driver git config diff.external difft ``` ## Introduction Difftastic is an open-source diff tool that parses source code into syntax trees and computes the minimal structural difference between them. Instead of showing line-level additions and deletions, it highlights which expressions, statements, or blocks actually changed, making code reviews and merges significantly easier to read. ## What Difftastic Does - Parses over 50 programming languages into concrete syntax trees using tree-sitter grammars - Computes a minimal edit script between two syntax trees using a novel graph search algorithm - Displays side-by-side diffs with color highlighting that shows moved, added, and removed nodes - Falls back to a line-oriented text diff for unsupported file types or binary files - Integrates with git as an external diff or difftool driver ## Architecture Overview Difftastic uses tree-sitter parsers to produce concrete syntax trees for each input file. It then runs a shortest-path graph search (Dijkstra-based) over the two trees to find the minimum-cost edit that transforms one tree into the other. The cost model penalizes node insertions and deletions while allowing reordering for free when it preserves structure. Output is rendered as a side-by-side terminal display with ANSI colors. ## Self-Hosting & Configuration - Install from crates.io with `cargo install --locked difftastic` or via your OS package manager - Set as the default git diff tool: `git config --global diff.external difft` - Alternatively, use `GIT_EXTERNAL_DIFF=difft git diff` for one-off usage - Configure display width with `--width` and background color preference with `--background` - Set `DFT_DISPLAY=inline` for a unified inline diff instead of side-by-side ## Key Features - Syntax-aware diffing that ignores meaningless whitespace and formatting changes - Supports 50+ languages including Python, JavaScript, Rust, Go, C, Java, and TypeScript - Written in Rust for fast performance on large files - Side-by-side and inline display modes with configurable terminal width - Graceful fallback to text diff for unknown file types ## Comparison with Similar Tools - **git diff** — Line-based only; Difftastic provides structural awareness - **delta** — A syntax-highlighting pager for diffs but still line-based; Difftastic changes the diff algorithm itself - **Semantic Diff** — Commercial; Difftastic is open source and free - **diff-so-fancy** — Cosmetic improvement to line diffs; Difftastic operates on syntax trees - **Meld** — GUI diff tool with directory comparison; Difftastic is a terminal-first tool optimized for git integration ## FAQ **Q: Does Difftastic slow down git operations?** A: For most files the overhead is small (milliseconds). Very large files with deep syntax trees can take longer but the tool imposes a time limit and falls back to text diff if needed. **Q: Can I use Difftastic with GitHub pull requests?** A: Difftastic runs locally. It works with `git diff` and `git log` on your machine but does not integrate with GitHub's web diff viewer. **Q: What happens with files Difftastic cannot parse?** A: It falls back to a line-oriented text diff, similar to standard diff output, so no file type is unsupported. **Q: Is Difftastic a drop-in replacement for diff?** A: Not exactly. Its output format differs from unified diff. It is best used as `diff.external` in git rather than replacing the system `diff` binary. ## Sources - https://github.com/Wilfred/difftastic - https://difftastic.wilfred.me.uk/ --- Source: https://tokrepo.com/en/workflows/asset-253c3ca7 Author: AI Open Source