{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "https://holochain.org/hc/app-manifest",
"title": "AppManifest",
"description": "Holochain hApp manifest",
"type": "object",
"additionalProperties": false,
"required": [
"manifest_version",
"name",
"roles"
],
"properties": {
"manifest_version": {
"type": "string",
"description": "The version of the app manifest schema"
},
"name": {
"type": "string",
"description": "The name of the app"
},
"description": {
"type": [
"string",
"null"
],
"description": "A description for the app"
},
"roles": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"dna"
],
"properties": {
"name": {
"type": "string",
"description": "The ID which will be used for the role, the DNA which fills it and the cells created from that DNA"
},
"provisioning": {
"description": "Rules to determine if and how a Cell will be created for this Dna",
"oneOf": [
{
"description": "Always create a new Cell when installing this App",
"type": "object",
"required": [
"deferred",
"strategy"
],
"properties": {
"deferred": {
"type": "boolean"
},
"strategy": {
"type": "string",
"enum": [
"create"
]
}
}
},
{
"description": "**NOT YET IMPLEMENTED**: Require that a Cell is already installed which matches the DNA version spec, and which has an Agent that's associated with this App's agent via DPKI. If no such Cell exists, *app installation fails*.",
"type": "object",
"required": [
"deferred",
"strategy"
],
"properties": {
"deferred": {
"type": "boolean"
},
"strategy": {
"type": "string",
"enum": [
"use_existing"
]
}
}
},
{
"description": "**NOT YET IMPLEMENTED**: Try `UseExisting`, and if that fails, fallback to `Create`",
"type": "object",
"required": [
"deferred",
"strategy"
],
"properties": {
"deferred": {
"type": "boolean"
},
"strategy": {
"type": "string",
"enum": [
"create_if_not_exists"
]
}
}
},
{
"description": "Install or locate the DNA, but never create a Cell for this DNA. Only allow clones to be created from the DNA specified. This case requires `clone_limit > 0`, otherwise no Cells will ever be created.",
"type": "object",
"required": [
"strategy"
],
"properties": {
"strategy": {
"type": "string",
"enum": [
"clone_only"
]
}
}
}
]
},
"dna": {
"type": "object",
"additionalProperties": false,
"properties": {
"bundled": {
"type": "string",
"description": "Expect file to be part of this bundle"
},
"path": {
"type": "string",
"description": "Get file from local filesystem (not bundled)"
},
"url": {
"type": "string",
"description": "Get file from URL"
},
"modifiers": {
"type": "object",
"additionalProperties": false,
"properties": {
"network_seed": {
"type": [
"string",
"null"
]
},
"properties": {
"type": [
"object",
"null"
],
"additionalProperties": true
},
"origin_time": {
"type": [
"string",
"null"
]
},
"quantum_time": {
"type": [
"string",
"null"
]
}
}
},
"version": {
"type": [
"string",
"null"
],
"description": "Deprecated, use installed_hash instead",
"deprecationMessage": "use installed_hash instead"
},
"installed_hash": {
"type": [
"string",
"null"
],
"description": "The hash of the DNA to be installed. If specified, will cause installation to fail if the bundled DNA hash does not match this"
},
"clone_limit": {
"type": "number",
"minimum": 0
}
}
}
}
}
}
}
}