# HTTP Manifest v1

The generic update provider uses a first-party JSON manifest.

Schema:

```json
{
  "schemaVersion": 1,
  "productID": "com.example.app",
  "releases": [
    {
      "id": "1.2.0",
      "version": "1.2.0",
      "channel": "stable",
      "publishedAt": "2026-03-01T03:10:56Z",
      "notesMarkdown": "Bug fixes",
      "artifacts": [
        {
          "os": "darwin",
          "arch": "arm64",
          "kind": "bundle-archive",
          "format": "zip",
          "url": "https://updates.example.com/app/1.2.0/darwin-arm64.zip",
          "sha256": "..."
        }
      ]
    }
  ]
}
```

Rules:

- `schemaVersion` must be `1`
- `productID` must match the running app descriptor
- `channel` is one of `stable`, `beta`, or `alpha`
- the provider picks the highest semver above the current version for the current `os` and `arch`
- artifact URLs are fetched with the adapter's per-provider request preparation hook
