# Open data

The datasets behind mlx.app/compare, /run and /mac (every Apple silicon Mac configuration, every open model in the catalog, and which model runs on which Mac and how fast) as versioned JSON and CSV under CC BY 4.0, with a manifest that carries each file's SHA-256.

The human page is [mlx.app/data](https://mlx.app/data). The files are static: built once per deploy from the same catalogs and the same estimate engine as the pages, served from the CDN, and never edited by hand.

## GET /data/index.json {#manifest}

```endpoint try
GET https://mlx.app/data/index.json
```

The manifest: what's here, its version, licence, every dataset's columns and each file's URL, size and SHA-256. Note the path: the datasets live under `mlx.app/data`, not under `/api`.

```bash tab=curl
curl https://mlx.app/data/index.json
curl -O https://mlx.app/data/macs.csv && shasum -a 256 macs.csv
```

```js tab=JavaScript
const m = await (await fetch("https://mlx.app/data/index.json")).json();
for (const d of m.datasets) for (const f of d.files) console.log(d.id, f.format, f.bytes, f.sha256);
```

```python tab=Python
import hashlib, requests

m = requests.get("https://mlx.app/data/index.json").json()
for d in m["datasets"]:
    for f in d["files"]:
        body = requests.get(f["url"]).content
        assert hashlib.sha256(body).hexdigest() == f["sha256"], f["url"]
print("version", m["version"], "checksums match")
```

```json title="Response"
{
  "name": "MLX open data: Apple Silicon Macs, open AI models and what runs where",
  "url": "https://mlx.app/data",
  "version": "2026-10-19",
  "dateModified": "2026-10-19",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "attribution": "MLX Network, https://mlx.app/data",
  "method": "https://mlx.app/compare#cp-how",
  "datasets": [
    {
      "id": "macs",
      "name": "Apple Silicon Mac configurations",
      "description": "Every Apple Silicon chip from M1 to M6 in every memory size Apple sells it with: unified memory, memory bandwidth, GPU core options and the Macs it ships in, read from Apple's Tech Specs pages, with the source of every row.",
      "dateModified": "2026-10-19",
      "rows": 58,
      "columns": [
        { "name": "mac", "type": "string", "description": "Identifier: chip and memory size, as in mlx.app/mac/<mac>" },
        { "name": "chip", "type": "string", "description": "Chip name" }
      ],
      "files": [
        { "format": "json", "url": "https://mlx.app/data/macs.json", "bytes": 45839, "sha256": "76320724a7fac7650f78f2c51a08b5f74e9a5d6791d6cfd51a6a3795e3ff81f2", "mime": "application/json" },
        { "format": "csv", "url": "https://mlx.app/data/macs.csv", "bytes": 26453, "sha256": "e8a976f183d2a11401e038cbb4b2c6fefa9200f2a0039b4cc771b5893eade384", "mime": "text/csv" }
      ]
    }
  ]
}
```

`datasets` is trimmed to one dataset and its `columns` to two here; the live manifest lists all three datasets with every column and its description.

| Field | Type | Notes |
| --- | --- | --- |
| `version` | string | The day the source catalogs were last checked (YYYY-MM-DD). The files change exactly when the catalogs do. |
| `license` | string | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). |
| `attribution` | string | How to credit the data: "MLX Network, https://mlx.app/data". |
| `method` | string | Where the estimates are explained. |
| `datasets[].id` | string | `macs`, `models` or `fit`. |
| `datasets[].dateModified` | string | When that dataset's catalog was last checked. |
| `datasets[].rows` | integer | Rows in the dataset. |
| `datasets[].columns` | array | `name`, `type` (`string`, `number` or `boolean`) and `description` of every column, in file order. |
| `datasets[].files` | array | One entry per format: `format`, `url`, `bytes`, `sha256` (of the exact bytes served) and `mime`. |

## The files {#files}

| File | What it is |
| --- | --- |
| `https://mlx.app/data/macs.json`, `macs.csv` | Every Apple silicon chip in every memory size Apple sells, from Apple's Tech Specs pages. |
| `https://mlx.app/data/models.json`, `models.csv` | Every open-weight model on mlx.app/compare, from each model's official Hugging Face card, config and file listing. |
| `https://mlx.app/data/fit.json`, `fit.csv` | Every Mac configuration against every model: the best version that fits and its estimated speed. |

Each URL always serves the newest version. Every response carries:

- `X-Dataset-Version`: the version, the same as `version` in the manifest.
- `Link`: the licence (`rel="license"`) and mlx.app/data (`rel="describedby"`).
- `Content-Disposition` with a file name that includes the version (`mlx-macs-2026-10-19.csv`), so a saved copy says which one it is.
- `Access-Control-Allow-Origin: *`.

### JSON

A JSON file is one object: `name`, `id`, `version`, `dateModified`, `url`, `license`, `attribution`, `description`, `method`, `sources` (each `{ text, href }`), `columns` (as in the manifest) and `rows`, an array of objects keyed by column name. List columns (such as `macs`, `gpu_cores` or `sources`) are arrays; empty values are `null`.

```json title="https://mlx.app/data/fit.json, rows trimmed to one"
{
  "name": "Which open model runs on which Mac, and how fast (estimates)",
  "id": "fit",
  "version": "2026-10-19",
  "dateModified": "2026-10-19",
  "url": "https://mlx.app/data#fit",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "attribution": "MLX Network, https://mlx.app/data",
  "rows": [
    {
      "mac": "m1-8gb",
      "chip": "Apple M1",
      "memory_gb": 8,
      "bandwidth_gbs": 68,
      "model": "qwen3-0.6b",
      "model_name": "Qwen3 0.6B",
      "version": "8-bit",
      "bits_per_weight": 8.5,
      "weights_gb": 0.6,
      "needs_gb": 2.1,
      "fit": "fits",
      "group": "Runs well",
      "below_4_bit": false,
      "tok_s_low": 51,
      "tok_s_high": 91,
      "tok_s_ceiling": 113
    }
  ]
}
```

### CSV

A CSV file has a header row with the column names, `\r\n` line ends and RFC 4180 quoting. List values are joined with `; `, and empty values are empty cells. The content type says `header=present`.

```text title="https://mlx.app/data/fit.csv, first rows"
mac,chip,memory_gb,bandwidth_gbs,model,model_name,version,bits_per_weight,weights_gb,needs_gb,fit,group,below_4_bit,tok_s_low,tok_s_high,tok_s_ceiling
m1-8gb,Apple M1,8,68,qwen3-0.6b,Qwen3 0.6B,8-bit,8.5,0.6,2.1,fits,Runs well,false,51,91,113
m1-8gb,Apple M1,8,68,qwen3.5-0.8b,Qwen3.5 0.8B,8-bit,8.5,0.9,2.4,fits,Runs well,false,34,60,76
```

## Columns {#columns}

The manifest describes every column in full; in short:

**macs**: `mac` (id, as in `mlx.app/mac/<mac>`), `chip`, `chip_id`, `generation`, `tier` (base, pro, max, ultra), `memory_gb`, `bandwidth_gbs` (as Apple publishes it; empty where Apple publishes none), `bandwidth_gbs_used` (what the estimates use), `gpu_memory_default_gb` (what macOS lets the GPU use by default), `gpu_cores`, `macs` (the Macs the chip ships in), `note`, `page`, `sources`.

**models**: `model` (id, as in `mlx.app/run/<model>`), `name`, `maker`, `hf_repo`, `params_b`, `active_params_b` (parameters read per generated token), `architecture` (dense or moe), `context_tokens`, `license`, `released`, `modality`, `precision`, `repo_weights_gb`, `native_gb` and `native_bits` (for models released in a low-bit format), `offload_gb` (lookup tables a runtime can leave on disk), `mlx_build`, `page`, `sources`.

**fit**: `mac`, `chip`, `memory_gb`, `bandwidth_gbs`, `model`, `model_name`, `version` (the highest precision that fits), `bits_per_weight`, `weights_gb`, `needs_gb` (weights plus room for context and the runtime), `fit` (fits, tight, no), `group` (the label the pages show), `below_4_bit`, `tok_s_low` and `tok_s_high` (the estimated writing speed range), `tok_s_ceiling` (memory bandwidth divided by the bytes read per token).

> [!WARNING]
> `fit` is estimated from published specs, not measured. The method, and how far real speeds fall from the ceiling, is at [mlx.app/compare](https://mlx.app/compare#cp-how).

## What's left out

The Artificial Analysis Intelligence Index shown on mlx.app/compare isn't in these files: its terms reserve redistribution. The llama.cpp measurements the hardware catalog cites are linked from the pages, not copied.

## Licence

The data is [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/): use it, change it and share it, commercially too, as long as you credit **MLX Network, https://mlx.app/data**.

## Errors

| Status | When |
| --- | --- |
| 404 | Any other file name under `/data/` (the site's HTML 404 page). |
