InstallHub
Artifact Serialization
Each artifact type has a defined JSON serialization format. Every artifact file includes a standard envelope with type metadata, followed by the artifact's complete definition.
Common Serialization Envelope
Every artifact JSON file begins with the same envelope fields, regardless of artifact type:
{
"_type": "ProcessDefinition", // required — matches manifest type
"_version": "2.1.0", // required — artifact's SemVer
"_exportedAt": "2026-05-25T09:00:00Z", // required — UTC timestamp
"_schemaVersion": "1.0", // required — artifact schema version
// ... artifact-specific fields follow
}
ProcessDefinition Serialization
// File: artifacts/workflows/proc-1001.json
{
"_type": "ProcessDefinition",
"_version": "2.1.0",
"_exportedAt": "2026-05-25T09:00:00Z",
"_schemaVersion": "1.0",
"id": "proc-1001",
"name": "EmployeeOnboarding",
"description": "Multi-step onboarding with approval",
"status": "Published",
"tags": ["hr", "onboarding"],
"nodes": [
{
"nodeId": "n1",
"nodeType": "StartNode",
"label": "Start",
"position": { "x": 100, "y": 100 },
"config": {}
},
{
"nodeId": "n2",
"nodeType": "FormDisplayNode",
"label": "Show Employee Form",
"position": { "x": 300, "y": 100 },
"config": {
"formId": "form-2005",
"displayMode": "modal",
"submitLabel": "Submit"
}
},
{
"nodeId": "n3",
"nodeType": "ApprovalNode",
"label": "Manager Approval",
"position": { "x": 500, "y": 100 },
"config": {
"approverRole": "Manager",
"ruleSetId": "rule-305",
"timeoutHours": 48
}
},
{
"nodeId": "n4",
"nodeType": "EndNode",
"label": "Complete",
"position": { "x": 700, "y": 100 },
"config": {}
}
],
"connections": [
{ "from": "n1", "to": "n2", "label": "" },
{ "from": "n2", "to": "n3", "label": "Submitted" },
{ "from": "n3", "to": "n4", "label": "Approved" }
],
"variables": [],
"guardRails": [],
"createdAt": "2025-03-01T10:00:00Z",
"updatedAt": "2026-05-20T14:30:00Z"
}
AtlasForm Serialization
// File: artifacts/forms/form-2005.json
{
"_type": "AtlasForm",
"_version": "1.3.0",
"_exportedAt": "2026-05-25T09:00:00Z",
"_schemaVersion": "1.0",
"id": "form-2005",
"name": "EmployeeForm",
"title": "New Employee Information",
"status": "Published",
"fields": [
{
"fieldId": "f1",
"fieldType": "TextInput",
"label": "First Name",
"name": "firstName",
"required": true,
"order": 1,
"validation": {
"minLength": 1,
"maxLength": 100,
"pattern": null
}
},
{
"fieldId": "f2",
"fieldType": "TextInput",
"label": "Last Name",
"name": "lastName",
"required": true,
"order": 2,
"validation": { "maxLength": 100 }
},
{
"fieldId": "f3",
"fieldType": "Dropdown",
"label": "Department",
"name": "department",
"required": true,
"order": 3,
"dataSource": {
"type": "EntityQuery",
"entityId": "ent-44",
"field": "departments",
"labelField": "name",
"valueField": "code"
}
}
],
"actions": [
{ "actionId": "submit", "type": "FormSubmit", "label": "Submit", "order": 1 },
{ "actionId": "cancel", "type": "FormCancel", "label": "Cancel", "order": 2 }
],
"validationRules": [],
"layout": {
"type": "SingleColumn",
"columns": 1
}
}
RuleSet Serialization
// File: artifacts/rules/rule-305.json
{
"_type": "RuleSet",
"_version": "1.0.0",
"_exportedAt": "2026-05-25T09:00:00Z",
"_schemaVersion": "1.0",
"id": "rule-305",
"name": "ApprovalRules",
"rules": [
{
"ruleId": "r1",
"name": "AutoApproveUnder500",
"priority": 1,
"condition": "amount < 500",
"action": "APPROVE",
"isActive": true
},
{
"ruleId": "r2",
"name": "RequireManagerApproval",
"priority": 2,
"condition": "amount >= 500",
"action": "REQUIRE_APPROVAL",
"isActive": true
}
]
}
EntitySchema Serialization
// File: artifacts/entities/ent-44.json
{
"_type": "EntitySchema",
"_version": "1.0.0",
"_exportedAt": "2026-05-25T09:00:00Z",
"_schemaVersion": "1.0",
"id": "ent-44",
"name": "EmployeeSchema",
"fields": [
{ "fieldName": "employeeId", "dataType": "string", "required": true, "isPrimaryKey": true },
{ "fieldName": "firstName", "dataType": "string", "required": true },
{ "fieldName": "lastName", "dataType": "string", "required": true },
{ "fieldName": "department", "dataType": "string", "required": true },
{ "fieldName": "startDate", "dataType": "date", "required": true },
{ "fieldName": "salary", "dataType": "decimal", "required": false }
],
"indexes": [
{ "fields": ["employeeId"], "isUnique": true },
{ "fields": ["department"], "isUnique": false }
]
}
Serialization Rules
- All JSON object keys are sorted alphabetically for deterministic output
- Null fields are omitted (not written as
null) - Empty arrays are written as
[](not omitted) - Dates and datetimes use ISO 8601 with UTC timezone (
Zsuffix) - Decimal numbers do not include trailing zeros (
1.5not1.50) - No circular references in the serialized JSON
Reference IDs are Source-Tenant IDs
Note that
formId: "form-2005" in a ProcessDefinition refers to the source tenant's ID. The import engine's ID remapping layer translates all these references to the target tenant's IDs during installation.