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
{
"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"
}