AIVA logo
AIVA Developer DocumentationAIVA package manifest and archive contract
← Back to Documentation Hub
Developer Contract
AIVAPKG / Package Contract

AIVA Package Manifest Contract

Technical specification for the .aivapkg format: package layout, manifest.json, Blueprint packaging rules, data file placement, schema constraints, and examples.

Last Updated 2026-06-23

AIVA Package Manifest Contract

1. Overview

An AIVA Package is a single distributable .aivapkg file containing the files required to import a log visualisation project into AIVA. The package bundles a manifest, a Blueprint, and the data files referenced by that Blueprint.

The package is a ZIP archive that uses the .aivapkg extension. It is intended to be self-contained: data files referenced by the Blueprint should be included in the package rather than resolved from external locations at import time.

This document describes the package contract: archive structure, manifest.json structure, property names, data types, defaults, validation constraints, examples, and how packaged Blueprint paths should reference data files.

The package guide intentionally documents packaging rules only. For the full blueprint.json contract, see the Blueprint Developer Contract.


2. Package Archive Structure

A valid Blueprint package has a root-level manifest, a root-level Blueprint file, and one or more data files under data/.

example-project.aivapkg ├── manifest.json ├── blueprint.json └── data/ ├── well_001.las └── repeat_run.las

Only manifest.json and blueprint.json should be placed at the archive root. Data files should be placed inside data/, including any nested data folders.

Path rule: Blueprint data source paths in an .aivapkg should be relative paths from the archive root, for example data/well_001.las.


3. manifest.json

The manifest.json file sits at the root of every .aivapkg archive. It identifies the package manifest version and the type of content contained in the package.

The manifest object has two required top-level properties and one optional metadata object.

{
  "Version": "1",
  "PackageType": "Blueprint",
  "Metadata": {}
}
PropertyTypeRequiredDefaultConstraints / Description
VersionstringYes"1"Manifest schema version. Must be the string value "1"; numeric 1 is not valid. See Version.
PackageTypestring enumYes-Package content type. Only "Blueprint" is currently supported. See PackageType.
MetadataobjectNo{}Optional string-to-string metadata dictionary. Metadata keys and values are constrained. See Metadata and Metadata Key Format.

3.1 Version

Version declares the manifest schema version. It is required and must be the JSON string "1".

Do not emit Version as an unquoted number. The schema uses const: "1", so "Version": 1 does not validate.

3.2 PackageType

PackageType tells AIVA what kind of package is being imported. It is required and currently supports only "Blueprint".

ValueStatusDescription
BlueprintSupportedThe package contains a root-level blueprint.json and the data files referenced by that Blueprint.

The enum is intentionally explicit so that additional package types can be introduced later without changing the shape of the manifest object.

3.3 Metadata

Metadata is an optional string-to-string dictionary for package annotations. It can be used for non-rendering information such as author, environment, build, source system, or creation date.

ConstraintRule
TypeMetadata must be a JSON object.
RequiredNo. If omitted, AIVA treats it as an empty object.
KeysEach key must be a non-empty string using only letters, digits, dot, underscore, or hyphen: ^[A-Za-z0-9._-]+$.
ValuesEach value must be a JSON string. Numeric, boolean, object and array values are not valid.
UsageUse metadata for author, environment, build, source system, or other import context. It is not part of the rendering pipeline.

If a numeric or boolean value is useful as metadata, serialise it as a string.

{
  "Version": "1",
  "PackageType": "Blueprint",
  "Metadata": {
    "Build-Number": "2026.04.01",
    "Depth": "3450"
  }
}

3.4 Metadata Key Format

Metadata keys are user-defined, but they are still validated by the manifest schema.

Each metadata key must satisfy the following regular expression:

^[A-Za-z0-9._-]+$

This allows letters, digits, dot, underscore, and hyphen. Spaces and empty keys are not valid.

Example of invalid metadata:

{
  "Version": "1",
  "PackageType": "Blueprint",
  "Metadata": {
    "Build Number": "2026.04.01",
    "Depth": 3450
  }
}

4. blueprint.json

The blueprint.json file defines the visualisation project: project identity, source data files, colour maps, scenes, 2D tracks, optional 3D view configuration, scalar curves, array curves, synthetic curves, regions, statistics, and cross-sections.

For PackageType: "Blueprint", blueprint.json must be present at the archive root and must conform to the Blueprint Developer Contract.

Within an .aivapkg, data source paths in the Blueprint should resolve to files contained inside the package, normally under data/.

Important: Standalone Blueprint files may be authored independently, but packaged Blueprint files should not depend on absolute paths, UNC paths, local drive paths, or files outside the package archive.


5. Data Files

Data files are the physical source files referenced by blueprint.json. For LAS2 data sources, these are .las files referenced by the Blueprint data source configuration.

ConstraintDetail
LocationAll data files must be inside data/. Data files at the archive root are not permitted.
Minimum countAt least one data file must be present in data/.
Supported formats.las files are supported when referenced by Blueprint DataSources[].Type: "LAS2".
Path referencesEach data source should use a relative path from the archive root, such as data/well_001.las.
SubdirectoriesNested subdirectories under data/ are supported, provided the Blueprint path matches the archive entry.

Example valid package data paths:

data/well_001.las
data/repeat_run.las
data/run-01/main.las

Example invalid package paths:

Invalid package paths:
/data/well_001.las
C:\data\well_001.las
\\server\share\well_001.las
../external/well_001.las

6. Import Validation Rules

The package importer validates both the manifest and the packaged project structure. The manifest schema is strict and does not allow unknown top-level manifest properties.

AreaRule
Archive rootOnly manifest.json and blueprint.json should be placed at the archive root.
Manifestmanifest.json must validate against the AIVA Package Manifest schema. Unknown top-level manifest properties are rejected.
Blueprintblueprint.json must validate against the Blueprint Developer Contract.
Data pathsBlueprint data source paths must be relative and should point into data/. Absolute paths, drive-letter paths, and UNC paths are not valid package references.
Data availabilityEvery file referenced by the Blueprint should exist inside the package. Missing files will prevent the project from importing correctly.

7. JSON Schema

The following schema defines the manifest.json contract for an AIVA package manifest.

Schema FieldValue
$schemahttps://json-schema.org/draft/2020-12/schema
$idhttps://aiva-data.com/schemas/2026/04/aivapkg-manifest.json
titleAIVA Package Manifest
additionalPropertiesfalse
Required propertiesVersion, PackageType
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://aiva-data.com/schemas/2026/04/aivapkg-manifest.json",
  "title": "AIVA Package Manifest",
  "description": "Defines the manifest file used to describe an AIVA package.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "Version",
    "PackageType"
  ],
  "properties": {
    "Version": {
      "title": "Version",
      "type": "string",
      "const": "1",
      "description": "Required. The manifest schema version. Must be the string value \"1\"."
    },
    "PackageType": {
      "title": "Package Type",
      "type": "string",
      "enum": [
        "Blueprint"
      ],
      "description": "Required. The type of package being described. Only \"Blueprint\" is currently supported."
    },
    "Metadata": {
      "title": "Metadata",
      "description": "Optional arbitrary metadata for the package. Keys are user-defined. All values must be strings.",
      "type": "object",
      "default": {},
      "propertyNames": {
        "type": "string",
        "minLength": 1,
        "pattern": "^[A-Za-z0-9._-]+$",
        "description": "Metadata key. Must be a non-empty string using letters, digits, dot, underscore, or hyphen."
      },
      "additionalProperties": {
        "type": "string",
        "description": "Metadata value. Must be a string."
      },
      "examples": [
        {
          "Author": "EV Offshore Ltd",
          "Environment": "Production",
          "Build": "2026.04.01"
        }
      ]
    }
  },
  "examples": [
    {
      "Version": "1",
      "PackageType": "Blueprint",
      "Metadata": {
        "Author": "EV Offshore Ltd",
        "Environment": "Production",
        "Build": "2026.04.01"
      }
    }
  ]
}

8. Minimum Usable Example

The smallest valid manifest for a Blueprint package contains only the required fields.

{
  "Version": "1",
  "PackageType": "Blueprint"
}

A package using this minimum manifest still requires a root-level blueprint.json and at least one referenced data file under data/.


9. Rich Example

The following example uses all currently supported manifest properties and mirrors the schema example.

{
  "Version": "1",
  "PackageType": "Blueprint",
  "Metadata": {
    "Author": "EV Offshore Ltd",
    "Environment": "Production",
    "Build": "2026.04.01"
  }
}

The corresponding archive layout could be:

sycamore-22-4a.aivapkg ├── manifest.json ├── blueprint.json └── data/ ├── well_001.las └── repeat_run.las

10. Empty Template JSON

The following template can be used as a starting point when authoring a new package manifest. Replace placeholder metadata keys and values, or omit Metadata entirely if no annotations are needed.

{
  "Version": "1",
  "PackageType": "Blueprint",
  "Metadata": {
    "<KEY>": "<VALUE>"
  }
}