* Rename app 'preview' property to 'enabled' with inverted semantics The 'preview' property was confusing: preview=false meant the app CAN be used. Replace with 'enabled' where enabled=true means usable, which is much more intuitive. Changes across the full stack: - JSON schemas: preview (default false) → enabled (default true) - Java backend: isPreview/raisePreviewMessage → isEnabled/raiseNotEnabledMessage - TypeScript types: preview → enabled - Frontend component: isPreviewApp → isAppDisabled (checks enabled===false) - SQL migrations for 1.11.12: rename + invert boolean in apps_marketplace and installed_apps tables (MySQL and PostgreSQL) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update generated TypeScript types * format * improve deletion process for disabled apps * improve deletion process for disabled apps * improve deletion process for disabled apps * improve deletion process for disabled apps * format * fix tests * migration * migration --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2.7 KiB
How to Add a New Application
Create App Config
in openmetadata-spec/src/main/resources/json/schema/entity/applications/configuration define the json schema representing your application configuration.
- external: these are applications that will run externaly (e.g. Airflow). If your application has its execution logic defined in Python, this is where the code logic should live
- internal: these will application will be executed through the Qwartz scheduler form the application itself. The code logic for this application will be written in Java.
you can follow this naming convention AppConfig.json
Define default app config
in openmetadata-service/src/main/resources/json/data/app define the default setting of your application. Create a new json following this naming convention <youAppName>Application.json
Define your app in the Application Marketplace
In openmetadata-service/src/main/resources/json/data/appMarketPlaceDefinition, define the elements of your application as they will appear in the app marketplace.
Note that you can specify a "sourcePythonClass": “path.to.python.class” if your application code logic is defined in Python
Add the config to the UI
In openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas add the config for your application so it can be rendered from the UI. Follow this naming convention <yourAppName>Application.json
Implement Java class
In openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles implement the java class corresponding to your application.
Not that the value of the className from step 3 should match the class name / path defined at this stage
[Optional] Implement Python logic
If you have defined an external application, you need to create the relevant Python class that implements the logic. The path of the class needs to match the value of sourcePythonClass. You will need to inherit from the AppRunner class and at minimum implement the def run method.
e.g. ingestion/src/metadata/applications/observability_data_exporter/app.py
[Optional] Disabling the application
In openmetadata-service/src/main/resources/applications you can add private configuration to your application. You also have the possibility to disable the application by setting enabled: false so that users cannot install it. Below is an example of the configuration.
enabled: false
parameters:
instance: <instance>
token: <token?
omURL: <omURL>
Setting enabled: false will prevent users from being able to install the application. The private configuration parameters can be set at openmetadata-spec/src/main/resources/json/schema/entity/applications/configuration/private