Porter · Schema

Porter Bundle Manifest

Schema for the porter.yaml bundle manifest file used to author Cloud Native Application Bundles (CNAB) with Porter. The manifest defines a bundle's metadata, actions, parameters, credentials, outputs, and the mixin steps to execute for each action.

Cloud NativeCNABDevOpsKubernetesPackage Manager

Properties

Name Type Description
schemaType string Identifies the document type as a Porter bundle manifest.
schemaVersion string Version of the Porter bundle schema this manifest conforms to.
name string Name of the bundle. Used as the repository name when publishing to an OCI registry.
version string Semantic version of the bundle.
description string Human-readable description of what the bundle installs or manages.
registry string OCI registry where the bundle will be published, such as 'ghcr.io/myorg' or 'docker.io/myuser'.
reference string Full OCI reference override for the bundle image. If omitted, the reference is constructed from registry, name, and version.
maintainers array List of bundle maintainers.
labels object Arbitrary key-value labels for the bundle.
annotations object OCI annotations to attach to the bundle image.
dockerfile string Path to a custom Dockerfile template for building the bundle's invocation image.
mixins array List of mixins used in this bundle. Each mixin provides pre-built steps for interacting with tools like Helm, Kubernetes, or Terraform.
parameters object Parameter definitions for configuring the bundle at install or upgrade time.
credentials object Credential definitions for secrets required by the bundle, such as kubeconfig files or cloud provider tokens.
outputs object Output definitions for values produced by the bundle during action execution.
state array State definitions for values that are persisted between bundle action runs.
dependencies object
install array Steps to execute when running the install action. Each step invokes a mixin or custom action.
upgrade array Steps to execute when running the upgrade action.
uninstall array Steps to execute when running the uninstall action.
custom object Custom actions defined beyond the standard install, upgrade, and uninstall CNAB actions.
images object Container images referenced by the bundle for relocation to air-gapped environments.
required array Names of extensions required by this bundle.
View JSON Schema on GitHub

JSON Schema

porter-manifest-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://porter.sh/schemas/porter.yaml.json",
  "title": "Porter Bundle Manifest",
  "description": "Schema for the porter.yaml bundle manifest file used to author Cloud Native Application Bundles (CNAB) with Porter. The manifest defines a bundle's metadata, actions, parameters, credentials, outputs, and the mixin steps to execute for each action.",
  "type": "object",
  "required": ["schemaType", "name", "version", "registry"],
  "properties": {
    "schemaType": {
      "type": "string",
      "description": "Identifies the document type as a Porter bundle manifest.",
      "const": "Bundle"
    },
    "schemaVersion": {
      "type": "string",
      "description": "Version of the Porter bundle schema this manifest conforms to.",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
      "examples": ["1.0.1"]
    },
    "name": {
      "type": "string",
      "description": "Name of the bundle. Used as the repository name when publishing to an OCI registry.",
      "pattern": "^[a-z0-9][a-z0-9-]*$",
      "maxLength": 128
    },
    "version": {
      "type": "string",
      "description": "Semantic version of the bundle.",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+.*$",
      "examples": ["1.0.0", "0.2.3-beta.1"]
    },
    "description": {
      "type": "string",
      "description": "Human-readable description of what the bundle installs or manages."
    },
    "registry": {
      "type": "string",
      "description": "OCI registry where the bundle will be published, such as 'ghcr.io/myorg' or 'docker.io/myuser'."
    },
    "reference": {
      "type": "string",
      "description": "Full OCI reference override for the bundle image. If omitted, the reference is constructed from registry, name, and version."
    },
    "maintainers": {
      "type": "array",
      "description": "List of bundle maintainers.",
      "items": {
        "$ref": "#/$defs/Maintainer"
      }
    },
    "labels": {
      "type": "object",
      "description": "Arbitrary key-value labels for the bundle.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "annotations": {
      "type": "object",
      "description": "OCI annotations to attach to the bundle image.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "dockerfile": {
      "type": "string",
      "description": "Path to a custom Dockerfile template for building the bundle's invocation image."
    },
    "mixins": {
      "type": "array",
      "description": "List of mixins used in this bundle. Each mixin provides pre-built steps for interacting with tools like Helm, Kubernetes, or Terraform.",
      "items": {
        "$ref": "#/$defs/MixinDeclaration"
      }
    },
    "parameters": {
      "type": "object",
      "description": "Parameter definitions for configuring the bundle at install or upgrade time.",
      "additionalProperties": {
        "$ref": "#/$defs/Parameter"
      }
    },
    "credentials": {
      "type": "object",
      "description": "Credential definitions for secrets required by the bundle, such as kubeconfig files or cloud provider tokens.",
      "additionalProperties": {
        "$ref": "#/$defs/Credential"
      }
    },
    "outputs": {
      "type": "object",
      "description": "Output definitions for values produced by the bundle during action execution.",
      "additionalProperties": {
        "$ref": "#/$defs/Output"
      }
    },
    "state": {
      "type": "array",
      "description": "State definitions for values that are persisted between bundle action runs.",
      "items": {
        "$ref": "#/$defs/StateVariable"
      }
    },
    "dependencies": {
      "$ref": "#/$defs/Dependencies"
    },
    "install": {
      "type": "array",
      "description": "Steps to execute when running the install action. Each step invokes a mixin or custom action.",
      "items": {
        "$ref": "#/$defs/Step"
      }
    },
    "upgrade": {
      "type": "array",
      "description": "Steps to execute when running the upgrade action.",
      "items": {
        "$ref": "#/$defs/Step"
      }
    },
    "uninstall": {
      "type": "array",
      "description": "Steps to execute when running the uninstall action.",
      "items": {
        "$ref": "#/$defs/Step"
      }
    },
    "custom": {
      "type": "object",
      "description": "Custom actions defined beyond the standard install, upgrade, and uninstall CNAB actions.",
      "additionalProperties": {
        "$ref": "#/$defs/CustomAction"
      }
    },
    "images": {
      "type": "object",
      "description": "Container images referenced by the bundle for relocation to air-gapped environments.",
      "additionalProperties": {
        "$ref": "#/$defs/BundleImage"
      }
    },
    "required": {
      "type": "array",
      "description": "Names of extensions required by this bundle.",
      "items": {
        "type": "string"
      }
    }
  },
  "$defs": {
    "Maintainer": {
      "type": "object",
      "description": "A bundle maintainer with contact information.",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the maintainer."
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "Email address of the maintainer."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL for the maintainer's website or profile."
        }
      }
    },
    "MixinDeclaration": {
      "description": "Declaration of a mixin used in the bundle, optionally with version and configuration.",
      "oneOf": [
        {
          "type": "string",
          "description": "Simple mixin name without version pinning.",
          "examples": ["exec", "kubernetes", "helm3", "terraform"]
        },
        {
          "type": "object",
          "description": "Mixin declaration with version and optional configuration.",
          "minProperties": 1,
          "maxProperties": 1,
          "additionalProperties": {
            "type": "object",
            "properties": {
              "version": {
                "type": "string",
                "description": "Version of the mixin to use."
              },
              "clientVersion": {
                "type": "string",
                "description": "Version of the client tool the mixin wraps."
              }
            }
          }
        }
      ]
    },
    "Parameter": {
      "type": "object",
      "description": "A configurable parameter that can be passed to the bundle at execution time.",
      "properties": {
        "description": {
          "type": "string",
          "description": "Human-readable description of the parameter."
        },
        "type": {
          "type": "string",
          "description": "JSON Schema type of the parameter.",
          "enum": ["string", "integer", "number", "boolean", "object", "array"]
        },
        "required": {
          "type": "boolean",
          "description": "Whether a value must be provided for this parameter. Defaults to false."
        },
        "default": {
          "description": "Default value used when the parameter is not supplied."
        },
        "sensitive": {
          "type": "boolean",
          "description": "If true, the parameter value is treated as sensitive and masked in logs."
        },
        "enum": {
          "type": "array",
          "description": "List of allowed values for this parameter.",
          "items": {}
        },
        "minimum": {
          "type": "number",
          "description": "Minimum value for numeric parameters."
        },
        "maximum": {
          "type": "number",
          "description": "Maximum value for numeric parameters."
        },
        "minLength": {
          "type": "integer",
          "description": "Minimum string length for string parameters.",
          "minimum": 0
        },
        "maxLength": {
          "type": "integer",
          "description": "Maximum string length for string parameters.",
          "minimum": 0
        },
        "applyTo": {
          "type": "array",
          "description": "List of actions this parameter applies to. If omitted, applies to all actions.",
          "items": {
            "type": "string"
          }
        },
        "path": {
          "type": "string",
          "description": "File path inside the bundle container where the parameter value is written."
        },
        "env": {
          "type": "string",
          "description": "Environment variable name inside the bundle container where the parameter value is set."
        }
      }
    },
    "Credential": {
      "type": "object",
      "description": "A secret or credential required by the bundle for accessing external resources.",
      "properties": {
        "description": {
          "type": "string",
          "description": "Description of what this credential is used for."
        },
        "required": {
          "type": "boolean",
          "description": "Whether this credential must be provided. Defaults to true."
        },
        "path": {
          "type": "string",
          "description": "File path inside the bundle container where the credential is written."
        },
        "env": {
          "type": "string",
          "description": "Environment variable name inside the bundle container for the credential."
        },
        "applyTo": {
          "type": "array",
          "description": "List of actions this credential applies to.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "Output": {
      "type": "object",
      "description": "A value produced and written by the bundle during an action execution.",
      "required": ["type"],
      "properties": {
        "description": {
          "type": "string",
          "description": "Description of what this output represents."
        },
        "type": {
          "type": "string",
          "description": "JSON Schema type of the output value.",
          "enum": ["string", "integer", "number", "boolean", "object", "array", "file"]
        },
        "sensitive": {
          "type": "boolean",
          "description": "If true, the output value is treated as sensitive and masked in logs."
        },
        "path": {
          "type": "string",
          "description": "File path inside the bundle container where the output value is written by the bundle."
        },
        "applyTo": {
          "type": "array",
          "description": "List of actions that produce this output.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "StateVariable": {
      "type": "object",
      "description": "A state variable that persists values between bundle action runs.",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the state variable."
        },
        "description": {
          "type": "string",
          "description": "Description of the state variable's purpose."
        },
        "mixin": {
          "type": "string",
          "description": "Name of the mixin that manages this state variable."
        },
        "path": {
          "type": "string",
          "description": "File path inside the bundle container where the state is stored."
        }
      }
    },
    "Dependencies": {
      "type": "object",
      "description": "Dependencies on other bundles that must be installed before or alongside this bundle.",
      "properties": {
        "requires": {
          "type": "array",
          "description": "List of required bundle dependencies.",
          "items": {
            "$ref": "#/$defs/Dependency"
          }
        }
      }
    },
    "Dependency": {
      "type": "object",
      "description": "A dependency on another Porter bundle.",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Alias for the dependency, used to reference it in steps."
        },
        "bundle": {
          "type": "string",
          "description": "OCI reference to the dependent bundle.",
          "examples": ["ghcr.io/getporter/examples/mysql:v0.1.0"]
        },
        "version": {
          "type": "string",
          "description": "Version constraint for the dependency."
        },
        "parameters": {
          "type": "object",
          "description": "Parameter mappings to pass from this bundle to the dependency.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "credentials": {
          "type": "object",
          "description": "Credential mappings to pass from this bundle to the dependency.",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "Step": {
      "type": "object",
      "description": "A single step in a bundle action, invoking a mixin with specific configuration.",
      "minProperties": 1,
      "maxProperties": 1,
      "additionalProperties": {
        "type": "object",
        "description": "Mixin-specific step configuration keyed by mixin name.",
        "properties": {
          "description": {
            "type": "string",
            "description": "Human-readable description of what this step does."
          },
          "outputs": {
            "type": "array",
            "description": "Outputs to capture from this step's execution.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Output name as defined in the bundle outputs."
                }
              }
            }
          }
        }
      }
    },
    "CustomAction": {
      "type": "object",
      "description": "A custom action definition beyond the standard CNAB install, upgrade, and uninstall actions.",
      "properties": {
        "description": {
          "type": "string",
          "description": "Description of what this action does."
        },
        "modifies": {
          "type": "boolean",
          "description": "If true, the action modifies the installation and its state is tracked."
        },
        "stateless": {
          "type": "boolean",
          "description": "If true, the action can run without an existing installation."
        },
        "steps": {
          "type": "array",
          "description": "Steps to execute when this action is invoked.",
          "items": {
            "$ref": "#/$defs/Step"
          }
        }
      }
    },
    "BundleImage": {
      "type": "object",
      "description": "A container image referenced by the bundle for air-gapped environment support.",
      "required": ["repository"],
      "properties": {
        "repository": {
          "type": "string",
          "description": "OCI repository of the image."
        },
        "tag": {
          "type": "string",
          "description": "Tag of the image."
        },
        "digest": {
          "type": "string",
          "description": "OCI digest of the image for content-addressable references.",
          "pattern": "^sha256:[a-f0-9]{64}$"
        },
        "description": {
          "type": "string",
          "description": "Description of the image's purpose within the bundle."
        },
        "imageType": {
          "type": "string",
          "description": "Type of the image.",
          "enum": ["oci", "docker"]
        }
      }
    }
  },
  "examples": [
    {
      "schemaType": "Bundle",
      "schemaVersion": "1.0.1",
      "name": "hello",
      "version": "0.2.0",
      "description": "A very simple bundle that demonstrates Porter's capabilities.",
      "registry": "ghcr.io/getporter/examples",
      "mixins": ["exec"],
      "parameters": {
        "name": {
          "type": "string",
          "description": "Name to greet.",
          "default": "World"
        }
      },
      "install": [
        {
          "exec": {
            "description": "Install Hello World",
            "command": "bash",
            "flags": {
              "c": "echo Hello ${bundle.parameters.name}"
            }
          }
        }
      ],
      "upgrade": [
        {
          "exec": {
            "description": "World Hello",
            "command": "bash",
            "flags": {
              "c": "echo World ${bundle.parameters.name}"
            }
          }
        }
      ],
      "uninstall": [
        {
          "exec": {
            "description": "Uninstall Hello World",
            "command": "bash",
            "flags": {
              "c": "echo Goodbye ${bundle.parameters.name}"
            }
          }
        }
      ]
    }
  ]
}