Skip to content

App Manifest

The app manifest is a JSON file bundled into the OCI artifact as the the artifact's manifest.

The source of truth for what an app's manifest should look like can be found in the partner's API Documentation. The request body schema there is the app's manifest. It defines configuration, secrets, extension points (API and SSO), as well as SKUs to track usage.

App Configuration

App configuration is used to define user inputs required at app installation time: user input that the app needs to do its work.

Configuration is a subset of JSON schema, specifically the configuration portion of the manifest is a JSON schema object with properties and required.

Configuration is not required, use it if the app needs it. Skip it otherwise.

The title and description properties are shown to the user as form field labels and help text respectively.

App Configuration Example

{
  "configuration": {
    "properties": {
      "boolean": {
        "type": "boolean",
        "title": "This Should be a Checkbox"
      },
      "number_with_exclusive_min_max": {
        "type": "number",
        "exclusiveMinimum": 1,
        "exclusiveMaximum": 100,
        "title": "Number With Exclusive Min/Max"
      },
      "number_with_min_max": {
        "type": "number",
        "minimum": 1,
        "maximum": 100,
        "title": "Number With Min/Max"
      },
      "string_with_enum": {
        "type": "string",
        "enum": [
          "one",
          "two",
          "three"
        ],
        "title": "This Should be a Select"
      },
      "string_with_format": {
        "type": "string",
        "format": "duration",
        "title": "Some String With Format",
        "description": "This is a string with a format"
      },
      "string_with_lengths": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128,
        "title": "Some String With Lengths",
        "description": "a min and max length even!"
      },
      "string_with_pattern": {
        "type": "string",
        "pattern": "^[a-zA-Z0-9]+$",
        "title": "Some String With Pattern"
      }
    },
    "required": [
      "string_with_format",
      "string_with_pattern"
    ]
  }
}

Secrets

Secrets are meant to be names and types that are provisioned in the platform's infra. The actual secret values are not included in the manifest. Instead, the values in the manifest describe the secrets so they can be provided to extension point code (like API handlers) that are running in the platform.

The only supported secret type is string (as a static value). This may change in the future to support automatically generated credentials from certain types of secrets.

Like configuration secrets are optional.

Secrets Example

{
   "secrets": [{
        "name": "api_key",
        "description": "API Key to interact with a third party API.",
        "type": "string"
    }],
}

SKUs

SKUs are used to track consumption based usage of the app. These may power actual billing or simply be used to get a sense of usage in general even though the app has a flat, monthly fee.

For example, if the app consumes tokens in an upstream LLM, the app may track and ship back to Alli a SKU plus a number of tokens consumed.

Some integration points will provide usage tracking built in, but partners may post usage data back to Alli using the partners API.

Alli automatically tracks installed apps.

SKUs are also optional. If tracking the apps installation is enough, then Alli has you covered.

SKUs Example

{
  "skus": [
    {
      "sku": "tokensconsumed",
      "description": "track the number of llm tokens consumed"
    }
  ],
}

Extension Points

The rest of the configuration in the manifest file has to do with extension points for partners to hook into and provide functionality to the rest of the Alli platform.

See extension points for more.