App Bundle Specification

bundle.yaml Reference

Every app submitted to the Torizon App Hub includes a bundle.yaml file that acts as the single source of truth for the submission. It describes who made the app, what it does, which hardware it supports, and how it is deployed. App Hub reads this file to validate submissions, populate app cards, and power the app detail page.

This reference page is automatically generated from the JSON Schema at schemas/app-bundle.schema.json so it always reflects the current spec. The annotated example at the bottom of this page is the same template shown in the submission editor.

Submit an app →

Field Reference

All top-level fields are required unless marked Optional.

schemaVersion

required

Version of the bundle.yaml schema format.

publisher

required

Publisher metadata shown in app discovery and support surfaces.

FieldTypeRequiredDescription
namestringyesPublisher or company display name.
websitestringyesPublisher website URL.
contactEmailstringyesPrimary support contact email.
supportUrlstringyesSupport page URL for users.

compatibility

required

Compatibility constraints for hardware and optional OS versions.

FieldTypeRequiredDescription
hardwareobjectyesHardware compatibility declarations.

Nested fields

machineIdsstring arraySupported machine IDs for this bundle.
torizonOSobjectnoOptional Torizon OS compatibility constraints.

Nested fields

minVersionstring– optionalMinimum supported Torizon OS version.
maxVersionstring– optionalMaximum supported Torizon OS version.
ostreeRefstring– optionalOptional required OSTree reference.

bundle

required

App identity metadata and deployment targets.

FieldTypeRequiredDescription
metaobjectyesApp identity and discovery metadata.

Nested fields

idstringStable, globally-unique identifier (reverse-DNS recommended).
namestringHuman-readable app name.
versionstringBundle release version (SemVer recommended).
summarystringShort markdown summary.
descriptionobjectReference to a customer-provided file artifact.
licensestring– optionalSPDX identifier (recommended) or a license expression.
tagsstring array– optionalOptional discovery tags for filtering and search.
linksobject– optionalOptional external links presented in app details.
targetsobjectyesDeployment targets packaged with this bundle.

Nested fields

osobject– optionalOS customization deployment target.
applicationobject– optionalApplication deployment target based on Docker Compose.
subsystemsobject array– optionalOptional subsystem payload targets.

Complete Field List

Every property in bundle.yaml at every nesting level, including nested objects and array item fields. Array items appear as field[]. Pattern-keyed map entries appear as field.<keyId>.

PropertyTypeRequiredDescription
schemaVersionstringyesVersion of the bundle.yaml schema format.
Pattern: ^2\.\d+\.\d+$
publisherobjectyesPublisher metadata shown in app discovery and support surfaces.
publisher.namestringyesPublisher or company display name.
publisher.websitestringyesPublisher website URL.
publisher.contactEmailstringyesPrimary support contact email.
publisher.supportUrlstringyesSupport page URL for users.
compatibilityobjectyesCompatibility constraints for hardware and optional OS versions.
compatibility.hardwareobjectyesHardware compatibility declarations.
compatibility.hardware.machineIdsstring arrayyesSupported machine IDs for this bundle.
compatibility.hardware.machineIds[]stringnoOne supported machine identifier.
compatibility.torizonOSobjectnoOptional Torizon OS compatibility constraints.
compatibility.torizonOS.minVersionstringnoMinimum supported Torizon OS version.
compatibility.torizonOS.maxVersionstringnoMaximum supported Torizon OS version.
compatibility.torizonOS.ostreeRefstringnoOptional required OSTree reference.
bundleobjectyesApp identity metadata and deployment targets.
bundle.metaobjectyesApp identity and discovery metadata.
bundle.meta.idstringyesStable, globally-unique identifier (reverse-DNS recommended).
Pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
bundle.meta.namestringyesHuman-readable app name.
bundle.meta.versionstringyesBundle release version (SemVer recommended).
Pattern: ^[0-9]+(\.[0-9]+){1,2}([\-+][0-9A-Za-z.-]+)?$
bundle.meta.summarystringyesShort markdown summary.
bundle.meta.descriptionobjectyesReference to a customer-provided file artifact.
bundle.meta.description.pathstringyesMust be a Markdown filename (no directory segments).
Default: description.md
Pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*\.md$
bundle.meta.licensestringnoSPDX identifier (recommended) or a license expression.
bundle.meta.tagsstring arraynoOptional discovery tags for filtering and search.
bundle.meta.tags[]stringnoOne tag label.
bundle.meta.linksobjectnoOptional external links presented in app details.
bundle.meta.links.homepagestringnoProduct homepage URL.
bundle.meta.links.documentationstringnoDocumentation URL.
bundle.meta.links.sourcestringnoSource repository URL.
bundle.meta.links.changelogstringnoRelease notes or changelog URL.
bundle.targetsobjectyesDeployment targets packaged with this bundle.
bundle.targets.osobjectnoOS customization deployment target.
bundle.targets.os.tcbuildobjectyesReference to a customer-provided file artifact.
bundle.targets.os.tcbuild.pathstringyesMust be a YAML filename (no directory segments).
Pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*\.(ya?ml)$
bundle.targets.os.gitReposobject arrayyesGit repositories to shallow-clone for tcbuild.yaml context.
bundle.targets.os.gitRepos[]objectnoGit repository source included for OS customization context.
bundle.targets.os.gitRepos[].urlstringyesGit repository URL (https://... or ssh://... etc).
bundle.targets.os.gitRepos[].refstringnoOptional git ref (branch/tag/commit). If absent, default branch is used.
bundle.targets.os.gitRepos[].depthintegernoShallow clone depth. Default is 1 (shallow).
Default: 1
bundle.targets.os.gitRepos[].submodulesbooleannoWhether git submodules should be fetched.
Default: false
bundle.targets.os.notesstringnoOptional notes about OS customization behavior.
bundle.targets.applicationobjectnoApplication deployment target based on Docker Compose.
bundle.targets.application.composeobjectyesReference to the main docker-compose.yml and optional machine-specific overrides.
bundle.targets.application.compose.typestringyesLiteral file reference marker.
Values: "file"
bundle.targets.application.compose.pathstringyesMain Docker Compose YAML filename (no directory segments).
Pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*\.(ya?ml)$
bundle.targets.application.compose.sha256stringnoSHA-256 checksum encoded as 64 hexadecimal characters.
Pattern: ^[A-Fa-f0-9]{64}$
bundle.targets.application.compose.sizeBytesintegernoOptional file size in bytes.
bundle.targets.application.compose.overridesobject arraynoOptional per-machine compose override files.
bundle.targets.application.compose.overrides[]objectnoPer-machine Docker Compose override file reference.
bundle.targets.application.compose.overrides[].pathstringyesCompose override filename (must end with .override.yml).
Pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*\.override\.yml$
bundle.targets.application.compose.overrides[].machineIdsstring arrayyesMachine IDs targeted by this override.
bundle.targets.application.compose.overrides[].machineIds[]stringnoOne machine ID value targeted by this compose override.
bundle.targets.application.compose.overrides[].sha256stringnoSHA-256 checksum encoded as 64 hexadecimal characters.
Pattern: ^[A-Fa-f0-9]{64}$
bundle.targets.application.compose.overrides[].sizeBytesintegernoOptional file size in bytes.
bundle.targets.application.configOverridesobjectnoReference to the app configuration override file and configurable keys.
bundle.targets.application.configOverrides.typestringyesLiteral file reference marker. App Hub currently supports only file-based overrides.
Values: "file"
bundle.targets.application.configOverrides.pathstringyesConfiguration filename (no directory segments).
Default: config.txt
Pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
bundle.targets.application.configOverrides.keysobjectyesMap of configuration key definitions keyed by stable key IDs.
bundle.targets.application.configOverrides.keys.<keyId>objectnoOne configuration override key exposed by App Hub.
bundle.targets.application.configOverrides.keys.<keyId>.typestringyesSupported key types for App Hub configuration overrides.
Values: "boolean" · "list"
bundle.targets.application.configOverrides.keys.<keyId>.namestringyesDisplay name shown in App Hub configuration UI.
bundle.targets.application.configOverrides.keys.<keyId>.descriptionstringyesUser-facing explanation shown in App Hub configuration tooltips.
bundle.targets.application.configOverrides.keys.<keyId>.defaultanyyesDefault value for this key (`true|false` for boolean, one item from `valuesList` for list).
bundle.targets.application.configOverrides.keys.<keyId>.valuesListstring arraynoAllowed values for `type: list` keys.
bundle.targets.application.configOverrides.keys.<keyId>.valuesList[]stringnoOne selectable list value.
bundle.targets.application.registryCredentialsobject arraynoOptional registry credentials for TCB to login and pull private images.
bundle.targets.application.registryCredentials[]objectnoCredential entry used to authenticate against a container registry.
bundle.targets.application.registryCredentials[].registrystringyesRegistry hostname (e.g., ghcr.io, registry.example.com).
bundle.targets.application.registryCredentials[].usernamestringnoUsername for basic auth.
bundle.targets.application.registryCredentials[].passwordstringnoPassword for basic auth (prefer secrets reference in future).
bundle.targets.application.registryCredentials[].tokenstringnoToken-based auth (alternative to username/password).
bundle.targets.application.registryCredentials[].authstringnoBase64-encoded Docker auth field (alternative form).
bundle.targets.application.registryCredentials[].notestringnoOptional note for maintainers about this credential.
bundle.targets.application.notesstringnoOptional notes about application deployment behavior.
bundle.targets.subsystemsobject arraynoOptional subsystem payload targets.
bundle.targets.subsystems[]objectnoAdditional subsystem payload target definition.
bundle.targets.subsystems[].namestringyesHuman-readable subsystem name.
bundle.targets.subsystems[].subsystemIdstringyesMandatory subsystem identifier (mapping handled by app logic later).
Pattern: ^[A-Za-z0-9._-]{1,64}$
bundle.targets.subsystems[].payloadobjectyesReference to a customer-provided file artifact.
bundle.targets.subsystems[].payload.typestringyesLiteral file reference marker.
Values: "file"
bundle.targets.subsystems[].payload.pathstringyesFilename in the bundle artifact set (no directory segments).
Pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
bundle.targets.subsystems[].payload.sha256stringnoSHA-256 checksum encoded as 64 hexadecimal characters.
Pattern: ^[A-Fa-f0-9]{64}$
bundle.targets.subsystems[].payload.sizeBytesintegernoOptional file size in bytes.
bundle.targets.subsystems[].kindstringnoOptional human hint (mcu-firmware, fpga-bitstream, etc).
bundle.targets.subsystems[].notesstringnoOptional notes about subsystem deployment behavior.

Annotated Example

The complete app-bundle.example.yaml — same template used in the submission editor. Inline comments explain every field.

# Full field reference and documentation: see /docs/bundlespec in the App Hub.
#
# Schema version — identifies the bundle.yaml format version.
schemaVersion: "2.0.0"

# Publisher contact metadata shown in cards/details and used for support.
publisher:
  # Public name of the app publisher.
  name: "Acme Vision Ltd."
  # Main website for this publisher.
  website: "https://acmevision.example"
  # Support contact email.
  contactEmail: "support@acmevision.example"
  # URL where users can request support.
  supportUrl: "https://acmevision.example/support"

# Hardware and optional OS compatibility declarations.
compatibility:
  hardware:
    # Supported Torizon machine IDs.
    machineIds:
      - "verdin-imx8mm"
  torizonOS:
    # Optional min/max supported Torizon OS versions.
    minVersion: "7.2.0"
    maxVersion: "7.99.0"
    # Optional OSTree ref constraint.
    ostreeRef: "torizon/torizon-core-docker"

# App identity/discovery metadata and deployment targets.
bundle:
  # App identity and discovery metadata.
  meta:
    # Stable unique app identifier (reverse-DNS style recommended).
    id: "io.torizon.apphub.smart-camera"
    # Human-readable app name shown in UI.
    name: "Smart Camera Bundle"
    # Bundle release version (SemVer recommended).
    version: "1.2.0"

    # Short markdown summary shown in compact views.
    summary: |
      ## Smart Camera
      Edge camera pipeline with AI inference.

    # Long markdown description reference.
    description:
      # Keep literal value "file" for artifact references.
      type: file
      # Markdown filename included with this submission.
      path: "description.md"

    # SPDX identifier or license expression.
    license: "Proprietary"

    # Optional discovery tags.
    tags:
      - "vision"

    # Optional reference links shown in app details.
    links:
      homepage: "https://acmevision.example/products/smart-camera"
      documentation: "https://acmevision.example/docs/smart-camera"
      source: "https://git.example/acme/smart-camera"
      changelog: "https://acmevision.example/docs/smart-camera/changelog"

  # Deployment targets. Keep only sections your app uses.
  targets:
    # Optional OS customization target.
    os:
      tcbuild:
        # Keep literal value "file" for artifact references.
        type: file
        # YAML filename included with this submission.
        path: "tcbuild.yaml"
        # Optional checksum and file size metadata.
        sha256: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
        sizeBytes: 1846
      # Git repositories cloned as tcbuild context.
      gitRepos:
        - url: "https://git.example/acme/device-configs.git"
          ref: "main"
          depth: 1
          submodules: false
      notes: "OS update built using tcbuild and bundled repos."

    # Optional application deployment target.
    application:
      compose:
        # Keep literal value "file" for artifact references.
        type: file
        # YAML filename included with this submission.
        path: "docker-compose.yml"
        # Optional checksum and file size metadata.
        sha256: "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
        sizeBytes: 932
        # Optional per-machine compose overrides.
        overrides:
          - path: "docker-compose.imx8.override.yml"
            machineIds:
              - "verdin-imx8mp"
              - "colibri-imx8x"
          - path: "docker-compose.am62.override.yml"
            machineIds:
              - "verdin-am62"
      # Optional app configuration override contract (App Hub specific).
      configOverrides:
        # Keep literal value "file" for artifact references.
        type: file
        # Config filename declared in docker-compose.yml `configs`.
        path: "config.txt"
        # Map of configurable keys (object key is the stable ID).
        keys:
          enableTelemetry:
            type: boolean
            name: "Enable telemetry"
            description: "Enables anonymous runtime telemetry reporting."
            default: true
          logLevel:
            type: list
            name: "Log level"
            description: "Selects the runtime log verbosity."
            default: "info"
            valuesList:
              - "debug"
              - "info"
              - "warn"
              - "error"
      # Optional credentials to pull private container images.
      registryCredentials:
        - registry: "ghcr.io"
          token: "${GITHUB_TOKEN}"
          note: "Token resolved by App Hub pipeline at publish time."
      notes: "Single-compose application deployment."

    # Optional extra subsystem payload artifacts.
    subsystems:
      - name: "Aux MCU Firmware"
        subsystemId: "mcu0"
        payload:
          # Keep literal value "file" for artifact references.
          type: file
          # Artifact filename included with this submission.
          path: "mcu_firmware.bin"
          # Optional checksum and file size metadata.
          sha256: "1111111111111111111111111111111111111111111111111111111111111111"
          sizeBytes: 262144
        kind: "mcu-firmware"
        notes: "Installed onto the device's MCU secondary."

Ready to submit?

Use the submission editor to create your bundle.yaml from the annotated template or convert an existing Docker Compose file.

Submit New App