{
  "slug": "csv-cell-diff",
  "name": "gizza-ai/csv-cell-diff",
  "version": "0.1.0",
  "title": "CSV Cell Diff — gizza.ai",
  "description": "Compare two CSVs column-by-column and highlight every individual cell that changed, plus added and removed rows and columns.",
  "tags": [
    "csv",
    "diff",
    "compare",
    "data",
    "developer"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/csv-cell-diff/",
    "markdown": "https://gizza.ai/tools/csv-cell-diff/index.md",
    "descriptor": "https://gizza.ai/tools/csv-cell-diff/tool.json",
    "deep_link_example": "https://gizza.ai/tools/csv-cell-diff/?left=id%2Cname%2Cprice%0A1%2CApple%2C10%0A2%2CBanana%2C20&right=id%2Cname%2Cprice%0A1%2CApple%2C12%0A2%2CBanana%2C20&key=id&delimiter=comma&header=true&ignore_case=true&ignore_whitespace=true&format=table"
  },
  "cli": "gizza tool csv-cell-diff \"id,name,price\n1,Apple,10\n2,Banana,20\" 'right=id,name,price\n1,Apple,12\n2,Banana,20'",
  "tool": {
    "description": "Align two CSVs column-by-column (by header name, so reordered columns still match) and compare them cell-by-cell, reporting every individual cell that changed with its old and new value, plus which rows and whole columns were added or removed. Pair rows by one or more key columns so reordered rows still match, or positionally when no key is given. Optional case- and whitespace-insensitive matching. Output as a readable table report, a structured JSON report, or a flat CSV change-log.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "delimiter": {
          "default": "comma",
          "description": "Field delimiter used by both CSVs.",
          "enum": [
            "comma",
            "tab",
            "semicolon",
            "pipe"
          ],
          "type": "string"
        },
        "format": {
          "default": "table",
          "description": "Output: table (readable report), json (structured report), or csv (flat change-log).",
          "enum": [
            "table",
            "json",
            "csv"
          ],
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Treat the first row as a header and align columns by name (reordered columns still match). Turn off to align columns by position (col1, col2, …).",
          "type": "boolean"
        },
        "ignore_case": {
          "default": false,
          "description": "Compare cell and key values case-insensitively while preserving original text in the output.",
          "type": "boolean"
        },
        "ignore_whitespace": {
          "default": false,
          "description": "Normalize runs of whitespace when comparing while preserving original text in the output.",
          "type": "boolean"
        },
        "key": {
          "default": "",
          "description": "Comma-separated key column name(s) (or 1-based index/indices) to pair rows by, so reordered rows still match. Leave empty to pair rows positionally by order. Example: id or first,last.",
          "type": "string"
        },
        "left": {
          "description": "The original/left CSV text.",
          "type": "string"
        },
        "right": {
          "description": "The updated/right CSV text.",
          "type": "string"
        }
      },
      "required": [
        "left",
        "right"
      ],
      "type": "object"
    }
  }
}