App¶
OpenMetadata Applications - metadata consumers, governance automation, integrations, and platform extensions
Overview¶
The App entity represents applications that extend and integrate with the OpenMetadata platform. These are installable applications that can be:
- Internal Applications: Built-in OpenMetadata applications that run within the platform
- External Applications: Custom applications that integrate with OpenMetadata via external runners
- Scheduled Applications: Applications that run on a schedule (hourly, daily, weekly, etc.)
- Live Applications: Applications with custom trigger mechanisms
- Manual Applications: Applications that are triggered manually by users
- Agent Applications: AI-powered agents like CollateAI for automated metadata management
Hierarchy:
Relationships¶
App has relationships with entities across the OpenMetadata platform:
graph TD
subgraph App Layer
APP[App<br/>DataQualityApp]
end
subgraph Execution
APP --> PIPE1[Pipeline<br/>quality_checks_pipeline]
APP --> PIPE2[Pipeline<br/>profiling_pipeline]
APP --> RUNTIME[Runtime<br/>Execution Context]
end
subgraph Events
APP -.->|subscribes to| EVT1[EventSubscription<br/>entityCreated]
APP -.->|subscribes to| EVT2[EventSubscription<br/>entityUpdated]
end
subgraph Configuration
APP -.->|configured by| CONFIG[AppConfiguration<br/>quality_config]
APP -.->|private config| PCONFIG[PrivateConfiguration<br/>credentials]
APP -.->|schedule| SCHED[AppSchedule<br/>Daily 2AM]
end
subgraph Bot & Permissions
APP -.->|uses| BOT[Bot<br/>quality_bot]
APP -.->|permissions| PERM[Permission<br/>All]
end
subgraph Ownership
APP -.->|owned by| OWNER[Owner<br/>DataGovernanceTeam]
end
subgraph Domains
APP -.->|belongs to| DOM[Domain<br/>DataQuality]
end
subgraph Ingestion
APP -.->|uses| RUNNER[IngestionRunner<br/>ExternalRunner]
APP -.->|connects via| CONN[OpenMetadataConnection<br/>server_connection]
end
style APP fill:#4facfe,color:#fff,stroke:#4c51bf,stroke-width:3px
style PIPE1 fill:#f5576c,color:#fff
style PIPE2 fill:#f5576c,color:#fff
style RUNTIME fill:#00f2fe,color:#333
style EVT1 fill:#fa709a,color:#fff
style EVT2 fill:#fa709a,color:#fff
style CONFIG fill:#43e97b,color:#333
style PCONFIG fill:#43e97b,color:#333
style SCHED fill:#ffd700,color:#333
style BOT fill:#667eea,color:#fff
style PERM fill:#9b59b6,color:#fff
style OWNER fill:#43e97b,color:#fff
style DOM fill:#fa709a,color:#fff
style RUNNER fill:#764ba2,color:#fff
style CONN fill:#667eea,color:#fff Relationship Types:
- Solid lines (→): Direct containment (App contains Pipelines and Runtime)
- Dashed lines (-.->): References and associations (ownership, configuration, events)
Parent Entities¶
- Domain: Business domain grouping (optional, inherited if not set)
Child Entities¶
- Pipeline: Pipelines deployed for this app to execute metadata operations
- Runtime: Execution context (Live or Scheduled)
Associated Entities¶
- Owners: Teams or users owning this app (plural)
- Domains: Business domains this app belongs to (plural)
- Bot: Bot user associated with this app for authentication
- EventSubscriptions: Event subscriptions for the app
- IngestionRunner: External runner executing the app (if supported)
- AppConfiguration: Public configuration settings
- PrivateConfiguration: Private configuration (credentials, secrets)
- AppSchedule: Schedule configuration for scheduled apps
- OpenMetadataConnection: Connection to OpenMetadata server
Schema Specifications¶
View the complete Application schema in your preferred format:
Complete JSON Schema Definition
{
"$id": "https://open-metadata.org/schema/entity/applications/app.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "App",
"description": "This schema defines the applications for Open-Metadata.",
"type": "object",
"javaType": "org.openmetadata.schema.entity.app.App",
"definitions": {
"scheduleType": {
"description": "This schema defines the type of application.",
"type": "string",
"enum": ["Live", "Scheduled", "ScheduledOrManual", "NoSchedule", "OnlyManual"]
},
"scheduleTimeline": {
"description": "This schema defines the Application ScheduleTimeline Options",
"type": "string",
"enum": ["Hourly", "Daily", "Weekly", "Monthly", "Custom", "None"],
"default": "Weekly"
},
"appSchedule": {
"description": "This schema defines the type of application.",
"properties": {
"scheduleTimeline": {
"$ref": "#/definitions/scheduleTimeline"
},
"cronExpression": {
"description": "Cron Expression in case of Custom scheduled Trigger",
"type": "string"
}
},
"required": ["scheduleTimeline"]
},
"appType": {
"description": "This schema defines the type of application.",
"type": "string",
"enum": ["internal", "external"]
},
"agentType": {
"description": "This schema defines the type of application.",
"type": "string",
"enum": ["CollateAI", "CollateAITierAgent", "CollateAIQualityAgent", "Metadata"]
},
"permissions": {
"description": "This schema defines the Permission used by Native Application.",
"type": "string",
"enum": ["All"]
},
"executionContext": {
"description": "Execution Configuration.",
"oneOf": [
{"$ref": "./liveExecutionContext.json"},
{"$ref": "./scheduledExecutionContext.json"}
]
}
},
"properties": {
"id": {
"description": "Unique identifier of this application.",
"$ref": "../../type/basic.json#/definitions/uuid"
},
"name": {
"description": "Name of the Application.",
"$ref": "../../type/basic.json#/definitions/entityName"
},
"displayName": {
"description": "Display Name for the application.",
"type": "string"
},
"description": {
"description": "Description of the Application.",
"$ref": "../../type/basic.json#/definitions/markdown"
},
"features": {
"description": "Features of the Application.",
"$ref": "../../type/basic.json#/definitions/markdown"
},
"fullyQualifiedName": {
"description": "FullyQualifiedName same as `name`.",
"$ref": "../../type/basic.json#/definitions/fullyQualifiedEntityName"
},
"owners": {
"description": "Owners of this workflow.",
"$ref": "../../type/entityReferenceList.json",
"default": null
},
"version": {
"description": "Metadata version of the entity.",
"$ref": "../../type/entityHistory.json#/definitions/entityVersion"
},
"updatedAt": {
"description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
"$ref": "../../type/basic.json#/definitions/timestamp"
},
"updatedBy": {
"description": "User who made the update.",
"type": "string"
},
"impersonatedBy": {
"description": "Bot user that performed the action on behalf of the actual user.",
"$ref": "../../type/basic.json#/definitions/impersonatedBy"
},
"href": {
"description": "Link to the resource corresponding to this entity.",
"$ref": "../../type/basic.json#/definitions/href"
},
"changeDescription": {
"description": "Change that lead to this version of the entity.",
"$ref": "../../type/entityHistory.json#/definitions/changeDescription"
},
"deleted": {
"description": "When `true` indicates the entity has been soft deleted.",
"type": "boolean",
"default": false
},
"provider": {
"$ref": "../../type/basic.json#/definitions/providerType"
},
"developer": {
"description": "Developer For the Application.",
"type": "string"
},
"developerUrl": {
"description": "Url for the developer",
"type": "string"
},
"privacyPolicyUrl": {
"description": "Privacy Policy for the developer",
"type": "string"
},
"supportEmail": {
"description": "Support Email for the application",
"type": "string"
},
"className": {
"description": "Fully Qualified ClassName for the Schedule",
"type": "string"
},
"sourcePythonClass": {
"description": "Fully Qualified class name for the Python source that will execute the external application.",
"type": "string"
},
"appType": {
"description": "This schema defines the type of application.",
"$ref": "#/definitions/appType"
},
"agentType": {
"description": "This schema defines the type of the agent.",
"$ref": "#/definitions/agentType"
},
"scheduleType": {
"description": "This schema defines the Schedule Type of Application.",
"$ref": "#/definitions/scheduleType"
},
"permission": {
"description": "Permission used by Native Applications.",
"$ref": "#/definitions/permissions"
},
"bot": {
"description": "Bot User Associated with this application.",
"$ref": "../../type/entityReference.json",
"default": null
},
"runtime": {
"description": "Execution Configuration.",
"$ref": "#/definitions/executionContext"
},
"allowConfiguration": {
"description": "Allow users to configure the app from the UI. If `false`, the `configure` step will be hidden.",
"type": "boolean",
"default": true
},
"system": {
"description": "A system app cannot be uninstalled or modified.",
"type": "boolean",
"default": false
},
"appConfiguration": {
"description": "Application Configuration object.",
"$ref": "./configuration/applicationConfig.json#/definitions/appConfig"
},
"privateConfiguration": {
"description": "Application Private configuration loaded at runtime.",
"$ref": "./configuration/applicationConfig.json#/definitions/privateConfig"
},
"preview": {
"type": "boolean",
"description": "Flag to enable/disable preview for the application. If the app is in preview mode, it can't be installed.",
"default": false
},
"pipelines": {
"description": "References to pipelines deployed for this database service to extract metadata, usage, lineage etc..",
"$ref": "../../type/entityReferenceList.json"
},
"appSchedule": {
"description": "In case the app supports scheduling, list of different app schedules",
"$ref": "#/definitions/appSchedule"
},
"openMetadataServerConnection": {
"$ref": "../services/connections/metadata/openMetadataConnection.json"
},
"appLogoUrl": {
"description": "Application Logo Url.",
"type": "string",
"format": "uri"
},
"appScreenshots": {
"description": "Application Screenshots.",
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"domains": {
"description": "Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to.",
"$ref": "../../type/entityReferenceList.json"
},
"supportsInterrupt": {
"description": "If the app run can be interrupted as part of the execution.",
"type": "boolean",
"default": false
},
"eventSubscriptions": {
"description": "Event Subscriptions for the Application.",
"$ref": "../../type/entityReferenceList.json"
},
"supportsIngestionRunner": {
"description": "If the app support execution through the external runner.",
"type": "boolean",
"default": false
},
"ingestionRunner": {
"description": "The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service.",
"$ref": "../../type/entityReference.json"
},
"allowConcurrentExecution": {
"description": "If true, multiple instances of this app can run concurrently. This is useful for apps like QueryRunner that support parallel executions with different configurations.",
"type": "boolean",
"default": false
}
},
"required": ["id", "name", "appType", "className", "scheduleType", "permission", "runtime"]
}
RDF/OWL Ontology Definition
@prefix om: <https://open-metadata.org/schema/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
# App Class Definition
om:App a owl:Class ;
rdfs:subClassOf om:Entity ;
rdfs:label "App" ;
rdfs:comment "An OpenMetadata application that extends and integrates with the platform" ;
om:hierarchyLevel 1 .
# Core Properties
om:appName a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "name" ;
rdfs:comment "Name of the app" .
om:displayName a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "displayName" ;
rdfs:comment "Display name for the app" .
om:appDescription a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "description" ;
rdfs:comment "Description of the app" .
om:features a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "features" ;
rdfs:comment "Features of the app" .
om:fullyQualifiedName a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "fullyQualifiedName" ;
rdfs:comment "Fully qualified name same as name" .
# App Type Properties
om:appType a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range om:AppType ;
rdfs:label "appType" ;
rdfs:comment "Type of app (internal or external)" .
om:agentType a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range om:AgentType ;
rdfs:label "agentType" ;
rdfs:comment "Type of agent (CollateAI, Metadata, etc.)" .
om:scheduleType a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range om:ScheduleType ;
rdfs:label "scheduleType" ;
rdfs:comment "Schedule type (Live, Scheduled, ScheduledOrManual, NoSchedule, OnlyManual)" .
om:className a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "className" ;
rdfs:comment "Fully qualified class name for the schedule" .
om:sourcePythonClass a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "sourcePythonClass" ;
rdfs:comment "Fully qualified Python class for external app" .
# Developer Properties
om:developer a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "developer" ;
rdfs:comment "Developer of the app" .
om:developerUrl a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:anyURI ;
rdfs:label "developerUrl" ;
rdfs:comment "URL for the developer" .
om:privacyPolicyUrl a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:anyURI ;
rdfs:label "privacyPolicyUrl" ;
rdfs:comment "Privacy policy URL" .
om:supportEmail a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:string ;
rdfs:label "supportEmail" ;
rdfs:comment "Support email for the app" .
om:appLogoUrl a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:anyURI ;
rdfs:label "appLogoUrl" ;
rdfs:comment "Logo URL for the app" .
# Configuration Properties
om:allowConfiguration a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:boolean ;
rdfs:label "allowConfiguration" ;
rdfs:comment "Allow users to configure the app from UI" .
om:system a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:boolean ;
rdfs:label "system" ;
rdfs:comment "System app that cannot be uninstalled or modified" .
om:preview a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:boolean ;
rdfs:label "preview" ;
rdfs:comment "Preview mode flag; if true, app cannot be installed" .
om:supportsInterrupt a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:boolean ;
rdfs:label "supportsInterrupt" ;
rdfs:comment "If the app run can be interrupted during execution" .
om:supportsIngestionRunner a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:boolean ;
rdfs:label "supportsIngestionRunner" ;
rdfs:comment "If the app supports execution through external runner" .
om:allowConcurrentExecution a owl:DatatypeProperty ;
rdfs:domain om:App ;
rdfs:range xsd:boolean ;
rdfs:label "allowConcurrentExecution" ;
rdfs:comment "If true, multiple instances can run concurrently" .
# Object Properties - Relationships
om:hasOwners a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:EntityReference ;
rdfs:label "owners" ;
rdfs:comment "Owners of this app" .
om:belongsToDomains a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:EntityReference ;
rdfs:label "domains" ;
rdfs:comment "Domains the app belongs to" .
om:hasBot a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:Bot ;
rdfs:label "bot" ;
rdfs:comment "Bot user associated with this app" .
om:hasPipelines a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:Pipeline ;
rdfs:label "pipelines" ;
rdfs:comment "Pipelines deployed for this app" .
om:hasEventSubscriptions a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:EventSubscription ;
rdfs:label "eventSubscriptions" ;
rdfs:comment "Event subscriptions for the app" .
om:hasIngestionRunner a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:IngestionPipeline ;
rdfs:label "ingestionRunner" ;
rdfs:comment "Ingestion agent executing the pipeline" .
om:hasRuntime a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:ExecutionContext ;
rdfs:label "runtime" ;
rdfs:comment "Execution configuration context" .
om:hasAppSchedule a owl:ObjectProperty ;
rdfs:domain om:App ;
rdfs:range om:AppSchedule ;
rdfs:label "appSchedule" ;
rdfs:comment "Schedule configuration for the app" .
# Example Instance
ex:dataQualityApp a om:App ;
om:appName "DataQualityApp" ;
om:fullyQualifiedName "DataQualityApp" ;
om:displayName "Data Quality Application" ;
om:appDescription "Automated data quality checks and profiling" ;
om:appType "internal" ;
om:scheduleType "Scheduled" ;
om:className "org.openmetadata.service.apps.DataQualityApp" ;
om:developer "OpenMetadata" ;
om:developerUrl "https://open-metadata.org" ;
om:system true ;
om:allowConfiguration true ;
om:hasBot ex:dataQualityBot ;
om:belongsToDomains ex:dataQualityDomain .
JSON-LD Context and Example
{
"@context": {
"@vocab": "https://open-metadata.org/schema/",
"om": "https://open-metadata.org/schema/",
"rdfs": "http://www.w3.org/2000/01/rdf-schema#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"App": "om:App",
"name": {
"@id": "om:appName",
"@type": "xsd:string"
},
"displayName": {
"@id": "om:displayName",
"@type": "xsd:string"
},
"description": {
"@id": "om:appDescription",
"@type": "xsd:string"
},
"features": {
"@id": "om:features",
"@type": "xsd:string"
},
"fullyQualifiedName": {
"@id": "om:fullyQualifiedName",
"@type": "xsd:string"
},
"appType": {
"@id": "om:appType",
"@type": "@vocab"
},
"agentType": {
"@id": "om:agentType",
"@type": "@vocab"
},
"scheduleType": {
"@id": "om:scheduleType",
"@type": "@vocab"
},
"className": {
"@id": "om:className",
"@type": "xsd:string"
},
"sourcePythonClass": {
"@id": "om:sourcePythonClass",
"@type": "xsd:string"
},
"developer": {
"@id": "om:developer",
"@type": "xsd:string"
},
"developerUrl": {
"@id": "om:developerUrl",
"@type": "xsd:anyURI"
},
"privacyPolicyUrl": {
"@id": "om:privacyPolicyUrl",
"@type": "xsd:anyURI"
},
"supportEmail": {
"@id": "om:supportEmail",
"@type": "xsd:string"
},
"appLogoUrl": {
"@id": "om:appLogoUrl",
"@type": "xsd:anyURI"
},
"allowConfiguration": {
"@id": "om:allowConfiguration",
"@type": "xsd:boolean"
},
"system": {
"@id": "om:system",
"@type": "xsd:boolean"
},
"preview": {
"@id": "om:preview",
"@type": "xsd:boolean"
},
"supportsInterrupt": {
"@id": "om:supportsInterrupt",
"@type": "xsd:boolean"
},
"supportsIngestionRunner": {
"@id": "om:supportsIngestionRunner",
"@type": "xsd:boolean"
},
"allowConcurrentExecution": {
"@id": "om:allowConcurrentExecution",
"@type": "xsd:boolean"
},
"owners": {
"@id": "om:hasOwners",
"@type": "@id",
"@container": "@set"
},
"domains": {
"@id": "om:belongsToDomains",
"@type": "@id",
"@container": "@set"
},
"bot": {
"@id": "om:hasBot",
"@type": "@id"
},
"pipelines": {
"@id": "om:hasPipelines",
"@type": "@id",
"@container": "@set"
},
"eventSubscriptions": {
"@id": "om:hasEventSubscriptions",
"@type": "@id",
"@container": "@set"
},
"ingestionRunner": {
"@id": "om:hasIngestionRunner",
"@type": "@id"
},
"runtime": {
"@id": "om:hasRuntime",
"@type": "@id"
},
"appSchedule": {
"@id": "om:hasAppSchedule",
"@type": "@id"
}
}
}
Example JSON-LD Instance:
{
"@context": "https://open-metadata.org/context/app.jsonld",
"@type": "App",
"@id": "https://open-metadata.org/apps/DataQualityApp",
"name": "DataQualityApp",
"fullyQualifiedName": "DataQualityApp",
"displayName": "Data Quality Application",
"description": "Automated data quality checks and profiling for all data assets",
"features": "- Data profiling\n- Quality metrics\n- Anomaly detection\n- Automated testing",
"appType": "internal",
"scheduleType": "Scheduled",
"className": "org.openmetadata.service.apps.bundles.quality.DataQualityApp",
"developer": "OpenMetadata",
"developerUrl": "https://open-metadata.org",
"privacyPolicyUrl": "https://open-metadata.org/privacy",
"supportEmail": "support@open-metadata.org",
"appLogoUrl": "https://open-metadata.org/images/apps/data-quality.png",
"allowConfiguration": true,
"system": false,
"preview": false,
"supportsInterrupt": true,
"supportsIngestionRunner": false,
"allowConcurrentExecution": false,
"owners": [
{
"@id": "https://open-metadata.org/teams/data-governance",
"@type": "Team",
"name": "DataGovernanceTeam"
}
],
"domains": [
{
"@id": "https://open-metadata.org/domains/data-quality",
"@type": "Domain",
"name": "DataQuality"
}
],
"bot": {
"@id": "https://open-metadata.org/bots/data-quality-bot",
"@type": "Bot",
"name": "data-quality-bot"
},
"pipelines": [
{
"@id": "https://open-metadata.org/pipelines/quality-checks",
"@type": "Pipeline",
"name": "quality_checks_pipeline"
}
],
"eventSubscriptions": [
{
"@id": "https://open-metadata.org/events/entity-created",
"@type": "EventSubscription",
"name": "entityCreated"
}
],
"runtime": {
"@type": "ScheduledExecutionContext",
"scheduleTimeline": "Daily"
},
"appSchedule": {
"scheduleTimeline": "Daily",
"cronExpression": "0 2 * * *"
}
}
Use Cases¶
- Install and manage OpenMetadata platform applications
- Schedule automated metadata operations (profiling, quality checks, lineage)
- Configure AI-powered agents for metadata management (CollateAI)
- Deploy custom external applications that integrate with OpenMetadata
- Automate governance workflows and policy enforcement
- Subscribe to metadata events and trigger actions
- Execute data quality checks on schedules
- Run metadata ingestion pipelines through apps
- Manage application lifecycles (install, configure, schedule, uninstall)
- Control app permissions and bot user access
- Preview apps before installation
- Support concurrent execution for parallel processing apps
JSON Schema Specification¶
Core Properties¶
id (uuid)¶
Type: string (UUID format) Required: Yes (system-generated) Description: Unique identifier of this application
name (entityName)¶
Type: string Required: Yes Pattern: ^[^.]*$ (no dots allowed) Min Length: 1 Max Length: 256 Description: Name of the Application
displayName¶
Type: string Required: No Description: Display Name for the application
fullyQualifiedName (fullyQualifiedEntityName)¶
Type: string Required: No (system-generated) Pattern: ^((?!::).)*$ Description: FullyQualifiedName same as name
description (markdown)¶
Type: string (Markdown format) Required: No Description: Description of the Application
{
"description": "# Data Quality Application\n\nAutomated data quality checks and profiling for all data assets in OpenMetadata."
}
features (markdown)¶
Type: string (Markdown format) Required: No Description: Features of the Application
{
"features": "## Key Features\n- Automated data profiling\n- Quality metrics computation\n- Anomaly detection\n- Automated test case generation"
}
App Type Configuration¶
appType (AppType enum)¶
Type: string enum Required: Yes Allowed Values:
internal- Built-in OpenMetadata applicationexternal- Custom external application
agentType (AgentType enum)¶
Type: string enum Required: No Description: Type of the agent
Allowed Values:
CollateAI- CollateAI agentCollateAITierAgent- CollateAI Tier classification agentCollateAIQualityAgent- CollateAI Quality agentMetadata- Metadata agent
scheduleType (ScheduleType enum)¶
Type: string enum Required: Yes Description: Schedule Type of Application
Allowed Values:
Live- App with other trigger mechanismsScheduled- App with a schedule, cannot be run manuallyScheduledOrManual- App with a schedule, can be run manuallyNoSchedule- App with no schedule, cannot be run manuallyOnlyManual- App with no schedule but can be run manually
Execution Configuration¶
className¶
Type: string Required: Yes Description: Fully Qualified ClassName for the Schedule
sourcePythonClass¶
Type: string Required: No Description: Fully Qualified class name for the Python source that will execute the external application
permission (permissions enum)¶
Type: string enum Required: Yes Description: Permission used by Native Applications
Allowed Values:
All- Full permissions
runtime (executionContext)¶
Type: object Required: Yes Description: Execution Configuration (oneOf: LiveExecutionContext or ScheduledExecutionContext)
Developer Information¶
developer¶
Type: string Required: No Description: Developer For the Application
developerUrl¶
Type: string Required: No Description: Url for the developer
privacyPolicyUrl¶
Type: string Required: No Description: Privacy Policy for the developer
supportEmail¶
Type: string Required: No Description: Support Email for the application
UI and Branding¶
appLogoUrl¶
Type: string (URI format) Required: No Description: Application Logo Url
appScreenshots[]¶
Type: array of strings Required: No Description: Application Screenshots (unique items)
{
"appScreenshots": [
"https://example.com/screenshot1.png",
"https://example.com/screenshot2.png"
]
}
Configuration Options¶
allowConfiguration¶
Type: boolean Required: No Default: true Description: Allow users to configure the app from the UI. If false, the configure step will be hidden
system¶
Type: boolean Required: No Default: false Description: A system app cannot be uninstalled or modified
preview¶
Type: boolean Required: No Default: false Description: Flag to enable/disable preview for the application. If the app is in preview mode, it can't be installed
supportsInterrupt¶
Type: boolean Required: No Default: false Description: If the app run can be interrupted as part of the execution
supportsIngestionRunner¶
Type: boolean Required: No Default: false Description: If the app support execution through the external runner
allowConcurrentExecution¶
Type: boolean Required: No Default: false Description: If true, multiple instances of this app can run concurrently. This is useful for apps like QueryRunner that support parallel executions with different configurations
Scheduling¶
appSchedule (AppSchedule)¶
Type: object Required: No Description: In case the app supports scheduling, list of different app schedules
AppSchedule Properties:
| Property | Type | Required | Description |
|---|---|---|---|
scheduleTimeline | enum | Yes | Timeline: Hourly, Daily, Weekly, Monthly, Custom, None (default: Weekly) |
cronExpression | string | No | Cron Expression in case of Custom scheduled Trigger |
Example:
Relationships¶
owners[] (EntityReferenceList)¶
Type: array of EntityReference Required: No Default: null Description: Owners of this app (plural - note this is owners not owner)
{
"owners": [
{
"id": "team-uuid",
"type": "team",
"name": "data-governance-team",
"displayName": "Data Governance Team"
}
]
}
domains[] (EntityReferenceList)¶
Type: array of EntityReference Required: No Description: Domains the asset belongs to. When not set, the asset inherits the domain from the parent it belongs to (plural - note this is domains not domain)
{
"domains": [
{
"id": "domain-uuid",
"type": "domain",
"name": "DataQuality",
"fullyQualifiedName": "DataQuality"
}
]
}
bot (EntityReference)¶
Type: object Required: No Default: null Description: Bot User Associated with this application
{
"bot": {
"id": "bot-uuid",
"type": "bot",
"name": "data-quality-bot",
"fullyQualifiedName": "data-quality-bot"
}
}
pipelines[] (EntityReferenceList)¶
Type: array of EntityReference Required: No Description: References to pipelines deployed for this database service to extract metadata, usage, lineage etc.
{
"pipelines": [
{
"id": "pipeline-uuid",
"type": "pipeline",
"name": "quality_checks_pipeline",
"fullyQualifiedName": "DataQualityApp.quality_checks_pipeline"
}
]
}
eventSubscriptions[] (EntityReferenceList)¶
Type: array of EntityReference Required: No Description: Event Subscriptions for the Application
{
"eventSubscriptions": [
{
"id": "subscription-uuid",
"type": "eventsubscription",
"name": "entityCreated",
"fullyQualifiedName": "entityCreated"
}
]
}
ingestionRunner (EntityReference)¶
Type: object Required: No Description: The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service
{
"ingestionRunner": {
"id": "runner-uuid",
"type": "ingestionPipeline",
"name": "external-runner",
"fullyQualifiedName": "external-runner"
}
}
Configuration¶
appConfiguration (appConfig)¶
Type: object Required: No Description: Application Configuration object
privateConfiguration (privateConfig)¶
Type: object Required: No Description: Application Private configuration loaded at runtime
openMetadataServerConnection¶
Type: object Required: No Description: Connection to OpenMetadata server
{
"openMetadataServerConnection": {
"hostPort": "http://localhost:8585/api",
"authProvider": "openmetadata",
"securityConfig": {
"jwtToken": "token"
}
}
}
Metadata Properties¶
version (entityVersion)¶
Type: number Required: No Description: Metadata version of the entity
updatedAt (timestamp)¶
Type: number Required: No Description: Last update time corresponding to the new version of the entity in Unix epoch time milliseconds
updatedBy¶
Type: string Required: No Description: User who made the update
impersonatedBy¶
Type: object Required: No Description: Bot user that performed the action on behalf of the actual user
href (href)¶
Type: string Required: No Description: Link to the resource corresponding to this entity
changeDescription¶
Type: object Required: No Description: Change that lead to this version of the entity
incrementalChangeDescription¶
Type: object Required: No Description: Change that lead to this version of the entity
deleted¶
Type: boolean Required: No Default: false Description: When true indicates the entity has been soft deleted
provider (providerType)¶
Type: enum Required: No Description: Provider type
Complete Examples¶
Example 1: Data Quality App (Internal, Scheduled)¶
{
"id": "6f7a8b9c-0d1e-2f3a-4b5c-6d7e8f9a0b1c",
"name": "DataQualityApp",
"fullyQualifiedName": "DataQualityApp",
"displayName": "Data Quality Application",
"description": "Automated data quality checks and profiling for all data assets",
"features": "## Key Features\n- Data profiling\n- Quality metrics\n- Anomaly detection\n- Test case generation",
"appType": "internal",
"scheduleType": "Scheduled",
"permission": "All",
"className": "org.openmetadata.service.apps.bundles.quality.DataQualityApp",
"developer": "OpenMetadata",
"developerUrl": "https://open-metadata.org",
"privacyPolicyUrl": "https://open-metadata.org/privacy",
"supportEmail": "support@open-metadata.org",
"appLogoUrl": "https://open-metadata.org/images/apps/data-quality.png",
"allowConfiguration": true,
"system": false,
"preview": false,
"supportsInterrupt": true,
"supportsIngestionRunner": false,
"allowConcurrentExecution": false,
"runtime": {
"type": "ScheduledExecutionContext",
"scheduleTimeline": "Daily"
},
"appSchedule": {
"scheduleTimeline": "Daily",
"cronExpression": "0 2 * * *"
},
"owners": [
{
"id": "team-uuid",
"type": "team",
"name": "data-governance"
}
],
"domains": [
{
"id": "domain-uuid",
"type": "domain",
"name": "DataQuality"
}
],
"bot": {
"id": "bot-uuid",
"type": "bot",
"name": "data-quality-bot"
},
"pipelines": [
{
"id": "pipeline-uuid",
"type": "pipeline",
"name": "quality_checks_pipeline"
}
],
"eventSubscriptions": [
{
"id": "subscription-uuid",
"type": "eventsubscription",
"name": "entityCreated"
}
]
}
Example 2: CollateAI Agent (AI-Powered, Live)¶
{
"id": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
"name": "CollateAIAgent",
"fullyQualifiedName": "CollateAIAgent",
"displayName": "CollateAI Metadata Agent",
"description": "AI-powered metadata management and classification agent",
"features": "## Features\n- Automated tagging\n- Description generation\n- PII detection\n- Tier classification",
"appType": "internal",
"agentType": "CollateAI",
"scheduleType": "Live",
"permission": "All",
"className": "org.openmetadata.service.apps.bundles.ai.CollateAIApp",
"developer": "Collate",
"developerUrl": "https://getcollate.io",
"supportEmail": "support@getcollate.io",
"appLogoUrl": "https://getcollate.io/images/collate-ai-logo.png",
"allowConfiguration": true,
"system": true,
"preview": false,
"supportsInterrupt": false,
"supportsIngestionRunner": false,
"allowConcurrentExecution": true,
"runtime": {
"type": "LiveExecutionContext"
},
"owners": [
{
"type": "team",
"name": "platform-team"
}
],
"bot": {
"type": "bot",
"name": "collate-ai-bot"
},
"eventSubscriptions": [
{
"type": "eventsubscription",
"name": "entityCreated"
},
{
"type": "eventsubscription",
"name": "entityUpdated"
}
]
}
Example 3: Custom External App (External, Manual)¶
{
"id": "8b9c0d1e-2f3a-4b5c-6d7e-8f9a0b1c2d3e",
"name": "CustomMetadataExporter",
"fullyQualifiedName": "CustomMetadataExporter",
"displayName": "Custom Metadata Exporter",
"description": "Export metadata to external CMDB system",
"appType": "external",
"scheduleType": "OnlyManual",
"permission": "All",
"className": "org.openmetadata.service.apps.NativeApplication",
"sourcePythonClass": "custom_apps.metadata_exporter.MetadataExporterApp",
"developer": "Acme Corp",
"developerUrl": "https://example.com",
"supportEmail": "support@example.com",
"allowConfiguration": true,
"system": false,
"preview": false,
"supportsInterrupt": true,
"supportsIngestionRunner": true,
"allowConcurrentExecution": false,
"runtime": {
"type": "ScheduledExecutionContext",
"scheduleTimeline": "None"
},
"appConfiguration": {
"cmdbEndpoint": "https://cmdb.example.com/api",
"exportFormat": "json",
"includeLineage": true
},
"privateConfiguration": {
"apiKey": "${CMDB_API_KEY}",
"secretToken": "${CMDB_SECRET}"
},
"owners": [
{
"type": "team",
"name": "data-engineering"
}
],
"bot": {
"type": "bot",
"name": "metadata-exporter-bot"
},
"ingestionRunner": {
"type": "ingestionPipeline",
"name": "external-runner-1"
},
"openMetadataServerConnection": {
"hostPort": "http://openmetadata:8585/api",
"authProvider": "openmetadata"
}
}
Custom Properties¶
This entity supports custom properties through the extension field. Common custom properties for Apps include:
- Cost Center: Billing allocation for app execution
- SLA Requirements: Expected uptime and performance
- Approval Required: Whether app installation requires approval
- Execution Priority: Priority level for concurrent app execution
See Custom Properties for details on defining and using custom properties.
Related Documentation¶
- Ingestion Pipeline - Ingestion pipelines and external runners
- Domain - Business domains
- Governance - Governance policies and permissions