{
  "measured_at": "2026-06-23",
  "hardware": {
    "chip": "Apple M5 Pro",
    "cores": "18 (6 performance + 12 efficiency)",
    "memory_gb": 64,
    "os": "macOS 26.5 (Darwin 25.5.0, arm64)"
  },
  "sample": {
    "file": "sample.csv",
    "rows": 1000000,
    "columns": 5,
    "size_bytes": 54667810,
    "size_mb": 52.13,
    "schema": ["id", "name", "email", "amount", "country"]
  },
  "results": {
    "python_stdlib": {
      "tool": "Python csv.DictReader + json.dump",
      "version": "Python 3.14.6 stdlib",
      "rows_per_sec": 232137,
      "wall_seconds": 4.31
    },
    "pandas": {
      "tool": "pandas read_csv + to_json (orient=records, lines=True)",
      "version": "pandas 3.0.3 (Apple Silicon)",
      "rows_per_sec": 1112836,
      "wall_seconds": 0.90
    },
    "miller": {
      "tool": "Miller mlr --c2j cat",
      "version": "Miller 6.19.0 (Go implementation)",
      "rows_per_sec_cold_first_run": 988019,
      "rows_per_sec_warm_median_of_5": 1960784,
      "wall_seconds_cold": 1.01,
      "wall_seconds_warm_median": 0.51,
      "note": "First invocation is roughly half-speed due to FS cache miss on the input file; subsequent warm runs converge to ~1.96M rows/s on this hardware. Throughput reported in the article is the warm median."
    },
    "go": {
      "tool": "Go encoding/csv + encoding/json (streaming, ReuseRecord, 1MB buffer)",
      "version": "Go 1.26.4 darwin/arm64",
      "rows_per_sec": 2058201,
      "wall_seconds": 0.49
    },
    "papaparse_node": {
      "tool": "PapaParse streaming (Node)",
      "version": "papaparse 5.5.2 on Node 26.3.1",
      "rows_per_sec": 1625566,
      "wall_seconds": 0.62
    },
    "browser_formatarc": {
      "tool": "FormatArc CSV to JSON (browser)",
      "version": "PapaParse 5.5.2 in browser",
      "note": "Not measured in this run. The browser implementation loads the full file into memory; the practical ceiling on a recent laptop is in the tens of megabytes / hundreds of thousands of rows before the page becomes unresponsive."
    }
  },
  "caveats": [
    "Numbers are wall-clock for a single warm run. Variance between runs is typically ±5-10%.",
    "Throughput scales with both CPU single-thread speed and tool version. pandas 2.x was substantially slower than 3.x; Miller 5.x was substantially slower than 6.x.",
    "Apple Silicon (M-series) hits much higher throughput than Intel laptops of the same era for csv/JSON workloads.",
    "Real CSVs with wide columns, quoted strings, or unicode content will show different (typically lower) numbers."
  ]
}
