# io.atcr.manifest

> Published by [did:web:lexicon.atcr.io](https://lexicon.garden/identity/did:web:lexicon.atcr.io)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:web:lexicon.atcr.io/io.atcr.manifest)
- [Documentation](https://lexicon.garden/lexicon/did:web:lexicon.atcr.io/io.atcr.manifest/docs)
- [Examples](https://lexicon.garden/lexicon/did:web:lexicon.atcr.io/io.atcr.manifest/examples)

## Definitions

### `io.atcr.manifest#blobReference`

**Type**: `object`

Reference to a blob stored in S3 or external storage

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `annotations` | `unknown` | No | Optional OCI annotation metadata. Map of string keys to string values. |
| `digest` | `string` | Yes | Content digest (e.g., 'sha256:...') |
| `mediaType` | `string` | Yes | MIME type of the blob |
| `size` | `integer` | Yes | Size in bytes |
| `urls` | `array` | No | Optional direct URLs to blob (for BYOS) |

### `io.atcr.manifest`

**Type**: `record`

A container image manifest following OCI specification, stored in ATProto

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `annotations` | `unknown` | No | Optional OCI annotation metadata. Map of string keys to string values (e.g., org.opencontainers.image.title → 'My App'). |
| `config` | `ref` → `#blobReference` | No | Reference to image configuration blob |
| `createdAt` | `string` (datetime) | Yes | Record creation timestamp |
| `digest` | `string` | Yes | Content digest (e.g., 'sha256:abc123...') |
| `holdDid` | `string` (did) | No | DID of the hold service where blobs are stored (e.g., 'did:web:hold01.atcr.io'). Primary reference for hold resolution. |
| `holdEndpoint` | `string` (uri) | No | Hold service endpoint URL where blobs are stored. DEPRECATED: Use holdDid instead. Kept for backward compatibility. |
| `layers` | `array` | No | Filesystem layers (for image manifests) |
| `manifestBlob` | `blob` | No | The full OCI manifest stored as a blob in ATProto. |
| `manifests` | `array` | No | Referenced manifests (for manifest lists/indexes) |
| `mediaType` | `string` | Yes | OCI media type |
| `repository` | `string` | Yes | Repository name (e.g., 'myapp'). Scoped to user's DID. |
| `schemaVersion` | `integer` | Yes | OCI schema version (typically 2) |
| `subject` | `ref` → `#blobReference` | No | Optional reference to another manifest (for attestations, signatures) |

### `io.atcr.manifest#manifestReference`

**Type**: `object`

Reference to a manifest in a manifest list/index

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `annotations` | `unknown` | No | Optional OCI annotation metadata. Map of string keys to string values. |
| `digest` | `string` | Yes | Content digest (e.g., 'sha256:...') |
| `mediaType` | `string` | Yes | Media type of the referenced manifest |
| `platform` | `ref` → `#platform` | No | Platform information for this manifest |
| `size` | `integer` | Yes | Size in bytes |

### `io.atcr.manifest#platform`

**Type**: `object`

Platform information describing OS and architecture

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `architecture` | `string` | Yes | CPU architecture (e.g., 'amd64', 'arm64', 'arm') |
| `os` | `string` | Yes | Operating system (e.g., 'linux', 'windows', 'darwin') |
| `osFeatures` | `array` | No | Optional OS features |
| `osVersion` | `string` | No | Optional OS version |
| `variant` | `string` | No | Optional CPU variant (e.g., 'v7' for ARM) |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "blobReference": {
      "description": "Reference to a blob stored in S3 or external storage",
      "properties": {
        "annotations": {
          "description": "Optional OCI annotation metadata. Map of string keys to string values.",
          "type": "unknown"
        },
        "digest": {
          "description": "Content digest (e.g., 'sha256:...')",
          "maxLength": 128,
          "type": "string"
        },
        "mediaType": {
          "description": "MIME type of the blob",
          "maxLength": 128,
          "type": "string"
        },
        "size": {
          "description": "Size in bytes",
          "type": "integer"
        },
        "urls": {
          "description": "Optional direct URLs to blob (for BYOS)",
          "items": {
            "format": "uri",
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "mediaType",
        "size",
        "digest"
      ],
      "type": "object"
    },
    "main": {
      "description": "A container image manifest following OCI specification, stored in ATProto",
      "key": "tid",
      "record": {
        "properties": {
          "annotations": {
            "description": "Optional OCI annotation metadata. Map of string keys to string values (e.g., org.opencontainers.image.title → 'My App').",
            "type": "unknown"
          },
          "config": {
            "description": "Reference to image configuration blob",
            "ref": "#blobReference",
            "type": "ref"
          },
          "createdAt": {
            "description": "Record creation timestamp",
            "format": "datetime",
            "type": "string"
          },
          "digest": {
            "description": "Content digest (e.g., 'sha256:abc123...')",
            "maxLength": 128,
            "type": "string"
          },
          "holdDid": {
            "description": "DID of the hold service where blobs are stored (e.g., 'did:web:hold01.atcr.io'). Primary reference for hold resolution.",
            "format": "did",
            "type": "string"
          },
          "holdEndpoint": {
            "description": "Hold service endpoint URL where blobs are stored. DEPRECATED: Use holdDid instead. Kept for backward compatibility.",
            "format": "uri",
            "type": "string"
          },
          "layers": {
            "description": "Filesystem layers (for image manifests)",
            "items": {
              "ref": "#blobReference",
              "type": "ref"
            },
            "type": "array"
          },
          "manifestBlob": {
            "description": "The full OCI manifest stored as a blob in ATProto.",
            "type": "blob"
          },
          "manifests": {
            "description": "Referenced manifests (for manifest lists/indexes)",
            "items": {
              "ref": "#manifestReference",
              "type": "ref"
            },
            "type": "array"
          },
          "mediaType": {
            "description": "OCI media type",
            "knownValues": [
              "application/vnd.oci.image.manifest.v1+json",
              "application/vnd.docker.distribution.manifest.v2+json",
              "application/vnd.oci.image.index.v1+json",
              "application/vnd.docker.distribution.manifest.list.v2+json"
            ],
            "maxLength": 128,
            "type": "string"
          },
          "repository": {
            "description": "Repository name (e.g., 'myapp'). Scoped to user's DID.",
            "maxLength": 255,
            "type": "string"
          },
          "schemaVersion": {
            "description": "OCI schema version (typically 2)",
            "type": "integer"
          },
          "subject": {
            "description": "Optional reference to another manifest (for attestations, signatures)",
            "ref": "#blobReference",
            "type": "ref"
          }
        },
        "required": [
          "repository",
          "digest",
          "mediaType",
          "schemaVersion",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "manifestReference": {
      "description": "Reference to a manifest in a manifest list/index",
      "properties": {
        "annotations": {
          "description": "Optional OCI annotation metadata. Map of string keys to string values.",
          "type": "unknown"
        },
        "digest": {
          "description": "Content digest (e.g., 'sha256:...')",
          "maxLength": 128,
          "type": "string"
        },
        "mediaType": {
          "description": "Media type of the referenced manifest",
          "maxLength": 128,
          "type": "string"
        },
        "platform": {
          "description": "Platform information for this manifest",
          "ref": "#platform",
          "type": "ref"
        },
        "size": {
          "description": "Size in bytes",
          "type": "integer"
        }
      },
      "required": [
        "mediaType",
        "size",
        "digest"
      ],
      "type": "object"
    },
    "platform": {
      "description": "Platform information describing OS and architecture",
      "properties": {
        "architecture": {
          "description": "CPU architecture (e.g., 'amd64', 'arm64', 'arm')",
          "maxLength": 32,
          "type": "string"
        },
        "os": {
          "description": "Operating system (e.g., 'linux', 'windows', 'darwin')",
          "maxLength": 32,
          "type": "string"
        },
        "osFeatures": {
          "description": "Optional OS features",
          "items": {
            "maxLength": 64,
            "type": "string"
          },
          "type": "array"
        },
        "osVersion": {
          "description": "Optional OS version",
          "maxLength": 64,
          "type": "string"
        },
        "variant": {
          "description": "Optional CPU variant (e.g., 'v7' for ARM)",
          "maxLength": 32,
          "type": "string"
        }
      },
      "required": [
        "architecture",
        "os"
      ],
      "type": "object"
    }
  },
  "id": "io.atcr.manifest",
  "lexicon": 1
}
```
