App Studio
Export Bundle Structure
The export bundle is a single JSON document with a well-defined schema. Understanding the structure helps with manual editing for tenant customization, git diff review during code review, and CI/CD pipeline integration.
Top-Level Structure
{
"schemaVersion": "1.0", // Bundle schema version — used by importer for compatibility
"version": "1.4.2", // App version label (advisory)
"exportedAt": "2026-05-25T14:30:00Z",
"exportedBy": "user-abc",
"changelog": "Added approval widget",
"app": { ... }, // App metadata
"pages": [ ... ], // AppPage definitions
"panes": [ ... ], // Pane configs
"widgets": [ ... ], // Widget placements
"navigation": { ... }, // Sidebar navigation config
"variables": [ ... ], // App variable declarations
"permissions": { ... } // App and page access config
}
app Section
"app": {
"appId": "crm",
"name": "CRM Application",
"description": "Internal CRM for sales team",
"tenantId": null, // null in export — set by importer
"homePageId": "dashboard",
"theme": "default",
"locale": "en-US"
}
pages Section
"pages": [
{
"pageId": "dashboard",
"title": "Dashboard",
"route": "/",
"isHome": true,
"breadcrumbParent": null,
"requiredRoles": [],
"showBreadcrumb": false
},
{
"pageId": "lead-detail",
"title": "Lead: {{ route.id }}",
"route": "/leads/:id",
"isHome": false,
"breadcrumbParent": "leads-list",
"requiredRoles": ["sales", "admin"]
}
]
widgets Section
"widgets": [
{
"widgetId": "leads-grid",
"pageId": "leads-list",
"paneId": "main-pane",
"type": "DataGrid",
"position": { "col": 0, "row": 0, "colSpan": 12, "rowSpan": 4 },
"config": {
"dataSource": "GetLeads",
"columns": [
{ "field": "name", "header": "Name", "sortable": true },
{ "field": "status", "header": "Status" }
],
"rowAction": {
"type": "navigate",
"target": "/leads/{{ row.id }}"
}
},
"visibilityExpression": null,
"visibleTo": []
}
]
navigation Section
"navigation": {
"sidebar": {
"collapsible": true,
"defaultCollapsed": false,
"items": [
{ "type": "item", "label": "Dashboard", "icon": "gauge", "targetPageId": "dashboard" },
{ "type": "divider" },
{
"type": "group",
"label": "Sales",
"items": [
{ "type": "item", "label": "Leads", "icon": "users", "targetPageId": "leads-list" }
]
}
]
}
}
variables Section
"variables": [
{ "name": "statusFilter", "type": "string", "defaultValue": "active", "syncToUrl": false },
{ "name": "selectedLeadId", "type": "string", "defaultValue": null, "syncToUrl": false },
{ "name": "grandTotal", "type": "number", "defaultValue": 0, "syncToUrl": false }
]
permissions Section
"permissions": {
"allowedRoles": ["admin", "sales", "sales-manager"],
"pageRoles": {
"admin-panel": ["admin"],
"reports": ["manager", "admin"]
}
}