A container image manifest following OCI specification, stored in ATProto
tid
Timestamp-based ID
Properties
annotations
unknown
Optional
Optional OCI annotation metadata. Map of string keys to string values (e.g., org.opencontainers.image.title → 'My App').
config
ref
#blobReference
Optional
Reference to image configuration blob
createdAt
string
datetime
Required
Record creation timestamp
digest
string
Required
Content digest (e.g., 'sha256:abc123...')
maxLength: 128 bytesholdDid
string
did
Optional
DID of the hold service where blobs are stored (e.g., 'did:web:hold01.atcr.io'). Primary reference for hold resolution.
holdEndpoint
string
uri
Optional
Hold service endpoint URL where blobs are stored. DEPRECATED: Use holdDid instead. Kept for backward compatibility.
layers
array
of
ref
#blobReference
Optional
Filesystem layers (for image manifests)
manifestBlob
blob
Optional
The full OCI manifest stored as a blob in ATProto.
manifests
array
of
ref
#manifestReference
Optional
Referenced manifests (for manifest lists/indexes)
mediaType
string
Required
OCI media type
maxLength: 128 bytesapplication/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+jsonrepository
string
Required
Repository name (e.g., 'myapp'). Scoped to user's DID.
maxLength: 255 bytesschemaVersion
integer
Required
OCI schema version (typically 2)
subject
ref
#blobReference
Optional
Optional reference to another manifest (for attestations, signatures)
View raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"repository",
"digest",
"mediaType",
"schemaVersion",
"createdAt"
],
"properties": {
"config": {
"ref": "#blobReference",
"type": "ref",
"description": "Reference to image configuration blob"
},
"digest": {
"type": "string",
"maxLength": 128,
"description": "Content digest (e.g., 'sha256:abc123...')"
},
"layers": {
"type": "array",
"items": {
"ref": "#blobReference",
"type": "ref"
},
"description": "Filesystem layers (for image manifests)"
},
"holdDid": {
"type": "string",
"format": "did",
"description": "DID of the hold service where blobs are stored (e.g., 'did:web:hold01.atcr.io'). Primary reference for hold resolution."
},
"subject": {
"ref": "#blobReference",
"type": "ref",
"description": "Optional reference to another manifest (for attestations, signatures)"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Record creation timestamp"
},
"manifests": {
"type": "array",
"items": {
"ref": "#manifestReference",
"type": "ref"
},
"description": "Referenced manifests (for manifest lists/indexes)"
},
"mediaType": {
"type": "string",
"maxLength": 128,
"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"
]
},
"repository": {
"type": "string",
"maxLength": 255,
"description": "Repository name (e.g., 'myapp'). Scoped to user's DID."
},
"annotations": {
"type": "unknown",
"description": "Optional OCI annotation metadata. Map of string keys to string values (e.g., org.opencontainers.image.title → 'My App')."
},
"holdEndpoint": {
"type": "string",
"format": "uri",
"description": "Hold service endpoint URL where blobs are stored. DEPRECATED: Use holdDid instead. Kept for backward compatibility."
},
"manifestBlob": {
"type": "blob",
"description": "The full OCI manifest stored as a blob in ATProto."
},
"schemaVersion": {
"type": "integer",
"description": "OCI schema version (typically 2)"
}
}
},
"description": "A container image manifest following OCI specification, stored in ATProto"
}