codediff 0.0.14

Fast, robust, syntax-aware code diffing using tree-sitter ASTs
Documentation
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2024"
rust-version = "1.88"
name = "codediff"
version = "0.0.14"
build = false
exclude = [
    "research/**",
    "src/bin/**",
    "src/test/data/**",
    "tests/**",
    "packaging/**",
    "flake.nix",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Fast, robust, syntax-aware code diffing using tree-sitter ASTs"
readme = "README.md"
keywords = [
    "diff",
    "ast",
    "tree-sitter",
    "cli",
    "git",
]
categories = [
    "command-line-utilities",
    "development-tools",
    "text-processing",
]
license = "AGPL-3.0-or-later"
repository = "https://github.com/ivankovic/codediff"

[package.metadata.deb]
maintainer = "Marko Ivankovic <marko@ivankovic.me>"
copyright = "2026 Marko Ivankovic"
license-file = [
    "LICENSE",
    "0",
]
extended-description = "CodeDiff parses both sides of a diff with tree-sitter and matches their syntax trees, so a change is reported as what it structurally is - an insertion, deletion, update, or move - rather than as whichever lines happened to align. It runs as an interactive terminal UI, a plain-text batch formatter, or a JSON emitter for editor integrations, and works as a git difftool backend and a Jujutsu (jj) diff formatter."
section = "devel"
priority = "optional"
depends = "$auto"
assets = [
    [
    "target/release/codediff",
    "usr/bin/",
    "755",
],
    [
    "README.md",
    "usr/share/doc/codediff/README.md",
    "644",
],
    [
    "target/dist/codediff.1",
    "usr/share/man/man1/",
    "644",
],
    [
    "target/dist/codediff.bash",
    "usr/share/bash-completion/completions/codediff",
    "644",
],
    [
    "target/dist/_codediff",
    "usr/share/zsh/vendor-completions/",
    "644",
],
    [
    "target/dist/codediff.fish",
    "usr/share/fish/vendor_completions.d/",
    "644",
],
]

[features]
default = ["tui"]
stats = [
    "dep:git2",
    "dep:rusqlite",
    "dep:crossbeam-channel",
    "dep:libc",
    "dep:num_cpus",
    "dep:rand",
    "dep:indoc",
    "dep:walkdir",
    "test-fixtures",
]
test-fixtures = [
    "dep:csv",
    "dep:regex",
    "dep:tempfile",
    "tui",
]
tui = [
    "dep:clap_complete",
    "dep:clap_mangen",
    "dep:ratatui",
    "dep:crossterm",
    "dep:tokio",
    "dep:syntect",
    "dep:two-face",
    "dep:confy",
    "dep:futures",
    "dep:tracing",
    "dep:tracing-subscriber",
    "dep:tracing-error",
]
web = ["tui"]

[lib]
name = "codediff"
path = "src/lib.rs"

[[bin]]
name = "codediff"
path = "src/main.rs"
required-features = ["tui"]

[[bin]]
name = "codediff-web"
path = "src/web_main.rs"
required-features = ["web"]

[[bench]]
name = "diff_code_benchmark"
path = "benches/diff_code_benchmark.rs"
harness = false
required-features = ["test-fixtures"]

[dependencies.anyhow]
version = "1.0.100"

[dependencies.clap]
version = "4.5.51"
features = ["derive"]

[dependencies.clap_complete]
version = "4.6.9"
optional = true

[dependencies.clap_mangen]
version = "0.2.33"
optional = true

[dependencies.confy]
version = "2.0.0"
optional = true

[dependencies.crossbeam-channel]
version = "0.5.15"
optional = true

[dependencies.crossterm]
version = "0.27.0"
features = [
    "serde",
    "event-stream",
]
optional = true

[dependencies.csv]
version = "1.4.0"
optional = true

[dependencies.futures]
version = "0.3"
optional = true

[dependencies.git2]
version = "0.20.3"
optional = true

[dependencies.indoc]
version = "2.0.7"
optional = true

[dependencies.libc]
version = "0.2"
optional = true

[dependencies.metrohash]
version = "1.0.7"

[dependencies.num_cpus]
version = "1.17.0"
optional = true

[dependencies.rand]
version = "0.8"
optional = true

[dependencies.ratatui]
version = "0.26.3"
features = [
    "serde",
    "macros",
]
optional = true

[dependencies.regex]
version = "1.12.2"
optional = true

[dependencies.rusqlite]
version = "0.37.0"
features = ["bundled"]
optional = true

[dependencies.rustc-hash]
version = "2.1"

[dependencies.serde]
version = "1.0.228"
features = ["derive"]

[dependencies.serde_json]
version = "1.0"

[dependencies.strum]
version = "0.28.0"
features = ["derive"]

[dependencies.syntect]
version = "5.2"
features = ["default-fancy"]
optional = true

[dependencies.tempfile]
version = "3.10.1"
optional = true

[dependencies.tokio]
version = "1.0"
features = ["full"]
optional = true

[dependencies.tracing]
version = "0.1.44"
optional = true

[dependencies.tracing-error]
version = "0.2.1"
optional = true

[dependencies.tracing-subscriber]
version = "0.3.23"
features = [
    "env-filter",
    "serde",
]
optional = true

[dependencies.tree-sitter]
version = "0.25"

[dependencies.tree-sitter-bash]
version = "0.25"

[dependencies.tree-sitter-c]
version = "0.24"

[dependencies.tree-sitter-c-sharp]
version = "0.23"

[dependencies.tree-sitter-cpp]
version = "0.23"

[dependencies.tree-sitter-css]
version = "0.25"

[dependencies.tree-sitter-go]
version = "0.25"

[dependencies.tree-sitter-html]
version = "0.23"

[dependencies.tree-sitter-java]
version = "0.23"

[dependencies.tree-sitter-javascript]
version = "0.25"

[dependencies.tree-sitter-json]
version = "0.24"

[dependencies.tree-sitter-kotlin-ng]
version = "1.1"

[dependencies.tree-sitter-lua]
version = "0.2"

[dependencies.tree-sitter-php]
version = "0.24"

[dependencies.tree-sitter-python]
version = "0.25"

[dependencies.tree-sitter-r]
version = "1.2"

[dependencies.tree-sitter-ruby]
version = "0.23.1"

[dependencies.tree-sitter-rust]
version = "0.24"

[dependencies.tree-sitter-scala]
version = "0.24"

[dependencies.tree-sitter-swift]
version = "0.7"

[dependencies.tree-sitter-typescript]
version = "0.23"

[dependencies.tree-sitter-vim]
version = "0.4"

[dependencies.tree-sitter-xml]
version = "0.7.0"

[dependencies.tree-sitter-yaml]
version = "0.7"

[dependencies.two-face]
version = "0.5.2"
features = ["syntect-fancy"]
optional = true
default-features = false

[dependencies.unicode-width]
version = "0.1.14"

[dependencies.walkdir]
version = "2"
optional = true

[dev-dependencies.criterion]
version = "0.5"
features = ["html_reports"]

[dev-dependencies.regex]
version = "1.12.2"

[dev-dependencies.tempfile]
version = "3.10.1"

[target."cfg(unix)".dependencies.libc]
version = "0.2"

[profile.release]
lto = "fat"
codegen-units = 1