> ## Documentation Index
> Fetch the complete documentation index at: https://roe.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# JSON output

> Stable v1 machine-readable schemas for every command.

Every command supports `--format json` for machine-readable output. The
schemas are versioned: `version` is `1`, and changes within v1 are additive
only, so parsers can rely on the fields below. Keys are camelCase, optional
fields are omitted when absent, and `file` paths are relative to `root`.

## `roe --format json`

The combined run — a bare `roe`, or [`roe check`](/commands/check) — prints a
single document rather than three concatenated ones, so stdout stays valid JSON:

```json theme={null}
{
  "version": 1,
  "root": "/path/to/solution",
  "deadCode": { "version": 1, "…": "…" },
  "dupes": { "version": 1, "…": "…" },
  "health": { "version": 1, "…": "…" }
}
```

| Field      | Description                                                                                             |
| ---------- | ------------------------------------------------------------------------------------------------------- |
| `version`  | Schema version of the combined document, `1`.                                                           |
| `root`     | The analysis root path.                                                                                 |
| `deadCode` | The `roe dead-code` report, unchanged.                                                                  |
| `dupes`    | The `roe dupes` report, unchanged. `mode` is always `exact` — the combined run takes no `--mode` flag.  |
| `health`   | The `roe health` report, unchanged. `hotspots` is always empty — hotspots need `roe health --hotspots`. |

Each nested value is byte-for-byte the schema the individual command emits,
including its own `version` and `root`, so anything already written against
`roe dead-code --format json` can consume `deadCode` as-is.

## `roe dead-code --format json`

```json theme={null}
{
  "version": 1,
  "root": "/path/to/solution",
  "summary": {
    "projects": 3,
    "filesScanned": 214,
    "symbols": 2610,
    "unusedTypes": 0,
    "unusedMembers": 1,
    "unusedFiles": 1,
    "elapsedMs": 74
  },
  "notes": [],
  "findings": [
    {
      "kind": "unused-member",
      "symbolKind": "method",
      "name": "App.Billing.InvoiceService.RecalculateAll",
      "project": "App",
      "file": "src/App/Billing/InvoiceService.cs",
      "line": 88,
      "column": 17,
      "visibility": "private"
    }
  ]
}
```

| Field                               | Description                                                                                                             |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `version`                           | Schema version, `1`.                                                                                                    |
| `root`                              | The analysis root path.                                                                                                 |
| `summary`                           | Scan totals: `projects`, `filesScanned`, `symbols`, `unusedTypes`, `unusedMembers`, `unusedFiles`, `elapsedMs`.         |
| `notes`                             | Human-readable notes about the scan, if any.                                                                            |
| `findings[].kind`                   | `unused-type`, `unused-member`, or `unused-file` — the same names used by [inline suppressions](/suppressing-findings). |
| `findings[].symbolKind`             | The kind of symbol (e.g. `method`). Optional.                                                                           |
| `findings[].name`                   | Fully-qualified symbol name, or the file path for a dead file.                                                          |
| `findings[].project`                | The containing project. Optional.                                                                                       |
| `findings[].file`, `line`, `column` | Location of the finding; dead-file findings are pinned at `1:1`.                                                        |
| `findings[].visibility`             | The symbol's visibility (e.g. `private`). Optional.                                                                     |

## `roe dupes --format json`

```json theme={null}
{
  "version": 1,
  "root": "/path/to/solution",
  "mode": "exact",
  "summary": {
    "projects": 1,
    "filesScanned": 214,
    "groups": 1,
    "duplicatedLines": 48,
    "elapsedMs": 61
  },
  "groups": [
    {
      "tokenCount": 105,
      "lineCount": 24,
      "occurrences": [
        {
          "file": "src/App/Billing/PaymentService.cs",
          "startLine": 40,
          "startColumn": 5,
          "endLine": 63,
          "endColumn": 6
        },
        {
          "file": "src/App/Shipping/ShippingService.cs",
          "startLine": 38,
          "startColumn": 5,
          "endLine": 61,
          "endColumn": 6
        }
      ]
    }
  ]
}
```

| Field                    | Description                                                                              |
| ------------------------ | ---------------------------------------------------------------------------------------- |
| `version`                | Schema version, `1`.                                                                     |
| `root`                   | The analysis root path.                                                                  |
| `mode`                   | The matching mode used: `exact` or `semantic`.                                           |
| `summary`                | Scan totals: `projects`, `filesScanned`, `groups`, `duplicatedLines`, `elapsedMs`.       |
| `groups[].tokenCount`    | Length of the duplicated block in tokens.                                                |
| `groups[].lineCount`     | Length of the duplicated block in lines.                                                 |
| `groups[].occurrences[]` | Every location of the block: `file`, `startLine`, `startColumn`, `endLine`, `endColumn`. |

## `roe health --format json`

```json theme={null}
{
  "version": 1,
  "root": "/path/to/solution",
  "summary": {
    "projects": 1,
    "filesScanned": 214,
    "symbols": 2610,
    "highComplexity": 1,
    "highCognitiveComplexity": 0,
    "longMethods": 0,
    "tooManyParameters": 1,
    "largeFiles": 0,
    "largeTypes": 1,
    "circularDependencies": 1,
    "elapsedMs": 8,
    "excluded": {
      "testProjects": ["App.Tests"],
      "ignoredFiles": 4
    }
  },
  "findings": [
    {
      "kind": "large-type",
      "name": "App.Billing.InvoiceService",
      "project": "App",
      "file": "src/App/Billing/InvoiceService.cs",
      "line": 3,
      "column": 14,
      "metric": 34,
      "threshold": 20,
      "breakdown": {
        "methods": 15,
        "properties": 19,
        "fields": 0,
        "events": 0
      }
    },
    {
      "kind": "too-many-parameters",
      "name": "App.Billing.InvoiceService.Reconcile",
      "project": "App",
      "file": "src/App/Billing/InvoiceService.cs",
      "line": 42,
      "column": 17,
      "metric": 8,
      "threshold": 5,
      "parameters": {
        "required": 8,
        "optional": 2,
        "out": 1
      }
    }
  ],
  "cycles": [
    {
      "path": [
        {
          "name": "App.Orders.Order",
          "project": "App",
          "file": "src/App/Orders/Order.cs",
          "line": 3,
          "column": 14
        },
        {
          "name": "App.Orders.Invoice",
          "project": "App",
          "file": "src/App/Orders/Invoice.cs",
          "line": 8,
          "column": 14
        }
      ],
      "others": []
    }
  ],
  "hotspots": []
}
```

| Field                               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `version`                           | Schema version, `1`.                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `root`                              | The analysis root path.                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `summary`                           | Scan totals: `projects`, `filesScanned`, `symbols`, one count per check (`highComplexity`, `highCognitiveComplexity`, `longMethods`, `tooManyParameters`, `largeFiles`, `largeTypes`, `circularDependencies`), and `elapsedMs`. `commitsWalked` is present only when `--hotspots` was passed. The three scan totals count what was eligible to be reported, so they narrow under `--exclude-tests` and the config's `ignore` globs (top-level and `health.ignore`). |
| `summary.baselined`                 | How many findings and cycles a [baseline](/commands/health#baselines) hid — they are counted nowhere else in this document. Present only when a baseline was in force, so `0` means "the baseline is fully ratcheted" and absent means "no baseline was used".                                                                                                                                                                                                      |
| `summary.excluded`                  | What was ruled out before any check ran: `testProjects` (an array of project names, present under `--exclude-tests`) and `ignoredFiles` (a count). Omitted entirely when nothing was excluded.                                                                                                                                                                                                                                                                      |
| `findings[].kind`                   | `high-complexity`, `high-cognitive-complexity`, `long-method`, `too-many-parameters`, `large-file`, or `large-type` — the same names used by [inline suppressions](/suppressing-findings).                                                                                                                                                                                                                                                                          |
| `findings[].name`                   | Fully-qualified symbol name, or the file path for a large file.                                                                                                                                                                                                                                                                                                                                                                                                     |
| `findings[].project`                | The containing project. Optional.                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `findings[].file`, `line`, `column` | Location of the finding; large-file findings are pinned at `1:1`.                                                                                                                                                                                                                                                                                                                                                                                                   |
| `findings[].metric`                 | The measured value — the complexity score, line count, member count, or, for `too-many-parameters`, the **required** parameter count rather than the declared total.                                                                                                                                                                                                                                                                                                |
| `findings[].threshold`              | The threshold it exceeded. `metric / threshold` is the severity the human report sorts by.                                                                                                                                                                                                                                                                                                                                                                          |
| `findings[].breakdown`              | Member composition — `methods`, `properties`, `fields`, `events`. Present on `large-type` findings only.                                                                                                                                                                                                                                                                                                                                                            |
| `findings[].parameters`             | Signature composition — `required`, `optional`, `out`. Present on `too-many-parameters` findings only. `required` always equals `metric`; the three sum to the declared parameter count.                                                                                                                                                                                                                                                                            |
| `cycles[].path`                     | The types on the cycle, each referencing the next and the last referencing the first. Each entry has `name`, `project`, `file`, `line`, `column`.                                                                                                                                                                                                                                                                                                                   |
| `cycles[].others`                   | Types in the same tangle that aren't on `path`. Empty for a simple cycle.                                                                                                                                                                                                                                                                                                                                                                                           |
| `hotspots[]`                        | Present only with `--hotspots`: `file`, `project`, `score`, `weightedCommits`, `cyclomatic`, `lines`, `complexityDensity`. Empty otherwise.                                                                                                                                                                                                                                                                                                                         |

<Note>
  One finding is emitted per tripped check, so a single method that's both too
  complex and too long appears twice. The human report groups those into one
  entry, and `--sort` and `--limit` apply to it alone — JSON is never
  reordered or truncated.
</Note>
