A data package doesn’t just install package metadata — it can also create real content the first time it installs, so users get working sample or reference data instead of an empty instance. The data asset is where that content is declared. Only valid on packages with "type": "data".

Property description

data is an array of scopes. One scope covers one space: the space itself, the application whose objects live there, the condition that decides whether its content installs, and the objects placed into it.

A package covering three spaces declares three scopes, one per space, each with its own install condition. One scope can install its objects while another is skipped.

Tip

Every scope must name exactly one of space (the package creates the space) or spaceRef (the space already exists). Every scope must also name a dataInstall.targetApplicationKey. Scope keys must be unique regardless of case.

Minimal JSON

{
    "space": {
        "key": "",
        "spacePath": "",
        "name": "",
        "workflowKey": ""
    },
    "dataInstall": {
        "condition": "",
        "targetApplicationKey": ""
    },
    "objects": []
}
{
    "assets": {
        "data": [
            {
                "space": {
                    "key": "sales",
                    "spacePath": "Sales",
                    "name": "Sales",
                    "workflowKey": "core#default"
                },
                "dataInstall": {
                    "condition": "targetSpaceApplicationEmpty",
                    "targetApplicationKey": "core_data_catalog#core_data_catalog_app"
                },
                "objects": [
                    {
                        "key": "customer_db",
                        "objectTypeKey": "core_data_catalog#database",
                        "name": "Customer DB"
                    }
                ]
            },
            {
                "spaceRef": "Business Glossary",
                "dataInstall": {
                    "condition": "always",
                    "targetApplicationKey": "core#core_business_glossary_app"
                },
                "objects": []
            }
        ]
    }
}

Nested properties

PropertyDescriptionValuesMandatory
dataInstallDecides whether this scope’s content installs. See dataInstall. Mandatory on every scope.nested propertyYes
objectImagesImages for objects of this scope.arrayNo
objectRelationsRelations between objects of this scope. Relations that cross scopes are declared at assets.objectRelations instead.arrayNo
objectsArray of objects placed into this scope’s space. See Objects.arrayNo
spaceThe space this scope creates. See Space. Mutually exclusive with spaceRef — declare exactly one.nested propertyNo
spaceRefPath of an existing space to install objects into, instead of creating one. Must already be bound to dataInstall.targetApplicationKey, otherwise the package fails validation. Mutually exclusive with space.stringNo

When content installs

Each scope’s condition is checked once — the first time the package installs for real — and the outcome is permanent: every later version of the same package reuses it without re-checking, so a scope that was skipped stays skipped through every upgrade, and a scope that installed its content keeps it.

The package’s overall state rolls the per-scope outcomes up: every scope that installed shows as Data seeded, every scope skipped as Data seeding skipped, and a mix as Data partially seeded. The reason shown for a skipped scope names the target application and how many objects were already there; a scope skipped by targetSpaceApplicationEmpty also names the space.