> ## Documentation Index
> Fetch the complete documentation index at: https://openmetadata-docs-release-watchers.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 2.0 Release | OpenMetadata

> Explore all OpenMetadata releases with detailed changelogs, new features, bug fixes, and upgrade guides. Stay updated with the latest versions and improvements.

# 2.0 Release Notes

<Tip>
  The OpenMetadata community is on a monthly release cadence. At every 4-5 weeks
  we will be releasing a new version.
</Tip>

<CardGroup>
  <Card icon="party-horn" title="Upgrade OpenMetadata" href="/v2.1.x-SNAPSHOT/deployment/upgrade">
    Learn how to upgrade your OpenMetadata instance to 2.0.1!
  </Card>
</CardGroup>

<Update label="2.0.1 Release" description="2nd September 2026">
  You can find the GitHub release [here](https://github.com/open-metadata/OpenMetadata/releases/tag/2.0.1-release).

  ## Changelog

  OpenMetadata 2.0.1 is a maintenance release focused on connector reliability, UI polish across Context Center and Explore, data governance and quality correctness, search and lineage fixes, MCP hardening, and a broad security dependency cleanup.

  ### 🔌 Connectors & Ingestion

  * **MLflow: Unity Catalog model version resolution and search were broken** [#30856](https://github.com/open-metadata/OpenMetadata/pull/30856), [#31387](https://github.com/open-metadata/OpenMetadata/pull/31387): Model versions now resolve correctly, and the search filter is properly escaped.
  * **MLflow 3.x model signatures were not extracted and the registry listing was unpaginated** [#32093](https://github.com/open-metadata/OpenMetadata/pull/32093): Extracts 3.x model signatures and paginates the registry listing.
  * **BigQuery: GCP service account impersonation not applied to policy tag reads** [#31249](https://github.com/open-metadata/OpenMetadata/pull/31249): Policy tag reads now honour the configured impersonation, matching the rest of the connector.
  * **Tableau: mirrored upstream columns duplicated in data models** [#30928](https://github.com/open-metadata/OpenMetadata/pull/30928): Mirrored upstream columns are collapsed instead of appearing twice.
  * **DB2: sqlalchemy-ibmi dialect incompatible with SQLAlchemy 2.0** [#30731](https://github.com/open-metadata/OpenMetadata/pull/30731): Adapts the dialect so DB2 ingestion works on SQLAlchemy 2.0.
  * **DB2: CLI driver reinitialized on every query** [#32151](https://github.com/open-metadata/OpenMetadata/pull/32151): The driver now initializes once per process.
  * **Trino: unnamed and quoted ROW fields mishandled during reflection** [#31402](https://github.com/open-metadata/OpenMetadata/pull/31402): Reflection now correctly handles unnamed and quoted ROW fields.
  * **REST API: array-root schemas failed to parse** [#31698](https://github.com/open-metadata/OpenMetadata/pull/31698): Schemas with an array at the root now parse correctly.
  * **Glue: duplicate columns caused partition keys to drop the whole table** [#32105](https://github.com/open-metadata/OpenMetadata/pull/32105): Columns are deduplicated so partition keys no longer cause a full table drop.
  * **Glue: a custom databaseName dropped every schema** [#32399](https://github.com/open-metadata/OpenMetadata/pull/32399): Custom `databaseName` values no longer wipe out schema ingestion.
  * **OpenLineage: Kafka SSL and password handling was missing on 2.0** [#32089](https://github.com/open-metadata/OpenMetadata/pull/32089): Backports SSL and password handling for Kafka-backed OpenLineage events.
  * **dbt: results with a null message failed to ingest** [#31138](https://github.com/open-metadata/OpenMetadata/pull/31138): Null-message results now ingest, and compile-only stubs no longer shadow executed results.
  * **Doris: unofficial driver caused ingestion issues** [#32163](https://github.com/open-metadata/OpenMetadata/pull/32163): Ingestion now uses the official pydoris driver.
  * **Looker: trailing slash in hostPort broke SDK URL concatenation** [#31761](https://github.com/open-metadata/OpenMetadata/pull/31761): The trailing slash is stripped before the SDK builds request URLs.
  * **Ingestion pipeline deploys re-parsed the whole DAG folder every time** [#32101](https://github.com/open-metadata/OpenMetadata/pull/32101): Stops the full re-parse on every deploy and scales the deploy-pipelines deadline accordingly.

  ### 📊 Data Quality

  * **Migration: tableDiff `supportedServices` migrated on upgrade** [#31715](https://github.com/open-metadata/OpenMetadata/pull/31715): Existing tableDiff test definitions carry their supported services forward automatically.
  * **BigQuery `uniqueCount` emitted invalid SQL for nested STRUCT subfield columns** [#31501](https://github.com/open-metadata/OpenMetadata/pull/31501): The metric now generates valid SQL for nested STRUCT subfields.
  * **Column values compared against `''` even when the column type couldn't hold it** [#31130](https://github.com/open-metadata/OpenMetadata/pull/31130): The empty-string comparison only runs when the column type supports it.
  * **Profiler data survived table hard deletes, and the orphan sweep deleted live column profiles** [#31556](https://github.com/open-metadata/OpenMetadata/pull/31556): Profiler data is now purged on hard delete, and the orphan sweep no longer touches live profiles.
  * **Time-series data was destroyed on every delete, not just hard deletes** [#31842](https://github.com/open-metadata/OpenMetadata/pull/31842): Time-series destruction is now bound specifically to hard delete.
  * **Dynamic Assertion control shown where it doesn't apply** [#31996](https://github.com/open-metadata/OpenMetadata/pull/31996): OpenMetadata now hides the control, since it's a Collate-only feature.
  * **No way to search within test suite details** [#32176](https://github.com/open-metadata/OpenMetadata/pull/32176): Adds search to the test suite details view.

  ### 🔍 Search & Discovery

  * **Domain tree search failures rejected the request instead of surfacing the error** [#31823](https://github.com/open-metadata/OpenMetadata/pull/31823): Search failures in the domain tree are now surfaced instead of silently rejected.
  * **No way to filter Explore by Data Product** [#31940](https://github.com/open-metadata/OpenMetadata/pull/31940): Adds Data Product as a top-level Explore filter.
  * **Reindex jobs reported success even when the search cluster was degraded** [#32001](https://github.com/open-metadata/OpenMetadata/pull/32001): Reindex status now fails when the cluster is degraded.
  * **`columnDescriptionStatus` ignored nested columns** [#32203](https://github.com/open-metadata/OpenMetadata/pull/32203): The status now recurses into nested columns.
  * **Natural-language search bypassed RBAC and query filters** [#31727](https://github.com/open-metadata/OpenMetadata/pull/31727): Applies RBAC, `queryFilter`, and `deleted` to the NLQ happy path.
  * **Hybrid search defaulted keyword and semantic weighting incorrectly** [#32300](https://github.com/open-metadata/OpenMetadata/pull/32300): Swaps the default hybrid-search weighting for keyword vs. semantic.
  * **AI Governance Studio assets were not searchable via vector search** [#31738](https://github.com/open-metadata/OpenMetadata/pull/31738): AI Governance Studio assets are now vector-searchable.

  ### 🛡️ Data Governance & Quality

  * **Glossary: system-defined relation types could be edited through the generic settings PUT** [#31944](https://github.com/open-metadata/OpenMetadata/pull/31944): Field edits to system-defined relation types are now rejected.
  * **ODCS (Open Data Contract Standard) passthrough was stripped by non-ODCS updates, and element attributes weren't round-tripped** [#31145](https://github.com/open-metadata/OpenMetadata/pull/31145): Preserves the ODCS passthrough on unrelated updates and round-trips element attributes correctly.
  * **Data Products couldn't be assigned across domains from the UI** [#32220](https://github.com/open-metadata/OpenMetadata/pull/32220): Assigning a Data Product across domains now works from the UI.
  * **Context Center pages ignored the requested entity status on creation** [#31728](https://github.com/open-metadata/OpenMetadata/pull/31728): The requested `entityStatus` now carries onto the created page.
  * **PII scanner missed separated Aadhaar numbers** [#31900](https://github.com/open-metadata/OpenMetadata/pull/31900): Recognizes Aadhaar numbers written with separators.
  * **PII scanner ties among equally weighted classifications were unresolved** [#31961](https://github.com/open-metadata/OpenMetadata/pull/31961): The NER (named entity recognition) scanner now breaks weighted-score ties by confidence.
  * **Incident Manager listing didn't enforce caller policies** [#32017](https://github.com/open-metadata/OpenMetadata/pull/32017): The listing now enforces the caller's policies.
  * **Masked secrets were overwritten during configuration updates** [#31989](https://github.com/open-metadata/OpenMetadata/pull/31989): Masked secrets are now preserved when a configuration is updated.
  * **User patch requests bypassed the expected permission checks** [#32323](https://github.com/open-metadata/OpenMetadata/pull/32323): Fixes user patch permission enforcement.
  * **Ingestion pipeline actions bypassed permission checks** [#32321](https://github.com/open-metadata/OpenMetadata/pull/32321): Ingestion pipeline actions now enforce the expected permissions.

  ### 🔗 Lineage

  * **Lineage canvas scrolling broke when the filters panel was expanded** [#32036](https://github.com/open-metadata/OpenMetadata/pull/32036): Scrolling on the lineage canvas now works correctly with the filters panel open.
  * **Impact analysis table content was clipped instead of scrolling** [#32201](https://github.com/open-metadata/OpenMetadata/pull/32201): The lineage card now uses a flex layout with a scrollable content region.

  ### 🤖 MCP Server / Automations

  * **MCP tool surface was expensive to call and unclear about what it returned** [#32019](https://github.com/open-metadata/OpenMetadata/pull/32019): Makes the MCP tool surface cheaper to call and more explicit about its return values.
  * **MCP error responses leaked a full Java stack trace on unauthenticated requests** [#31875](https://github.com/open-metadata/OpenMetadata/pull/31875): A 401 from an unauthenticated MCP call no longer serializes the underlying exception's stack trace.

  ### ⚙️ Platform

  * **Migration: AutoPilotWorkflow BPMN (Business Process Model and Notation) redeploy and task supersede fallback for 2.0** [#32162](https://github.com/open-metadata/OpenMetadata/pull/32162): Adds the v2.0.1 migration that redeploys the AutoPilotWorkflow BPMN definition and adds a task supersede fallback.
  * **OIDC login handler and MCP callback auth relied on an EOL pac4j line** [#32380](https://github.com/open-metadata/OpenMetadata/pull/32380): Upgrades pac4j from 5.7.10 to 6.5.6 and adapts `AuthenticationCodeFlowHandler` and the MCP callback servlet to its API changes.
  * **Alerts offered event types a resource can't actually deliver** [#30587](https://github.com/open-metadata/OpenMetadata/pull/30587): Alerts now only offer the event types each resource can deliver.

  ### 🎛️ UI

  * **A URL with no tab segment didn't render the tab already on screen** [#31448](https://github.com/open-metadata/OpenMetadata/pull/31448): The current tab renders correctly when the URL omits the tab segment.
  * **Selected persona reset to the default on page refresh** [#32201](https://github.com/open-metadata/OpenMetadata/pull/32201): The active persona now persists across a refresh via sessionStorage.
  * **Domain and Data Product rows were only partly clickable** [#31876](https://github.com/open-metadata/OpenMetadata/pull/31876): The whole row is now clickable.
  * **Persona customization pages crashed when a page was null** [#32034](https://github.com/open-metadata/OpenMetadata/pull/32034): Null persona customization pages are now handled gracefully.
  * **Explore filter typography regressed** [#32141](https://github.com/open-metadata/OpenMetadata/pull/32141): Restores the expected Explore filter typography.
  * **Modals and the right panel reopened immediately after being closed** [#32124](https://github.com/open-metadata/OpenMetadata/pull/32124): Closing a modal or right panel now stays closed.
  * **Sample Data tab crashed when a column was named `children`** [#31500](https://github.com/open-metadata/OpenMetadata/pull/31500): The Sample Data tab no longer crashes on a column literally named `children`.
  * **Dialog content clipped instead of scrolling when it overflowed** [#32224](https://github.com/open-metadata/OpenMetadata/pull/32224): Dialog content now scrolls instead of being clipped.
  * **`/my-data` redirect instead of rendering at `/`** [#32229](https://github.com/open-metadata/OpenMetadata/pull/32229): MyData renders at `/` directly instead of redirecting.
  * **Severity translations used hardcoded strings instead of generic i18n keys** [#32194](https://github.com/open-metadata/OpenMetadata/pull/32194): Severity labels now use generic translations.
  * **Icons and images rendered based on regex pre-validation instead of the real load outcome, with a cached-image race and misapplied icon classes** [#31982](https://github.com/open-metadata/OpenMetadata/pull/31982), [#32067](https://github.com/open-metadata/OpenMetadata/pull/32067), [#32110](https://github.com/open-metadata/OpenMetadata/pull/32110): Icon rendering now reflects the actual load outcome across tags, classification, and certification pages.
  * **Context Center "Dashboard" renamed to "Overview"** [#32125](https://github.com/open-metadata/OpenMetadata/pull/32125): Updates the surface name and route for consistency.
  * **AI-memory prompt used an inconsistent translation key** [#32140](https://github.com/open-metadata/OpenMetadata/pull/32140): Renames the key so the "what should AI remember" prompt translates correctly.
  * **ER diagram drawer wasn't full width, and the column panel could double-close** [#32337](https://github.com/open-metadata/OpenMetadata/pull/32337): The drawer now renders full width, and the column panel no longer double-closes.
  * **Login video gradient was hardcoded** [#32388](https://github.com/open-metadata/OpenMetadata/pull/32388): The login video gradient is now driven from `LoginClassBase`, so it can be customized.

  ### 🔒 Security

  #### JVM / Backend

  * **`micrometer` → 1.16.7** for CVE-2026-59296 [#31927](https://github.com/open-metadata/OpenMetadata/pull/31927).
  * **Spring → 7.0.9** for CVE-2026-47886, CVE-2026-59282, and CVE-2026-59283 [#32222](https://github.com/open-metadata/OpenMetadata/pull/32222).
  * **`httpclient5` → 5.6.4** and **`jsoup` → 1.23.2** [#32293](https://github.com/open-metadata/OpenMetadata/pull/32293).
  * **Apache Jena and Fuseki → 6.2.0** for CVE-2026-61372 [#32274](https://github.com/open-metadata/OpenMetadata/pull/32274).
  * **Reactor moved to the 2026.0 train** to clear reactor-core/netty CVEs [#32393](https://github.com/open-metadata/OpenMetadata/pull/32393).

  #### UI

  * **`fast-uri` → 3.1.6** [#32139](https://github.com/open-metadata/OpenMetadata/pull/32139).

  #### Ingestion Images

  * **Airflow → 3.3.1** (CVE-2026-67587 / CVE-2026-54183) and **`expat` → 2.8.3** (CVE-2026-72522) [#31890](https://github.com/open-metadata/OpenMetadata/pull/31890).
  * **OpenSSL refreshed** [#32215](https://github.com/open-metadata/OpenMetadata/pull/32215).
  * **`pyathena` → 3.35.4** [#32167](https://github.com/open-metadata/OpenMetadata/pull/32167).
  * **`linux-libc-dev` upgraded** to clear kernel CVE scan findings [#32169](https://github.com/open-metadata/OpenMetadata/pull/32169).
  * **CVE-2026-68082 cleared** in the trixie images [#32259](https://github.com/open-metadata/OpenMetadata/pull/32259).
</Update>

<Update label="2.0.0 Release" description="24th August 2026">
  You can find the GitHub release [here](https://github.com/open-metadata/OpenMetadata/releases/tag/2.0.0-release).

  ## Features

  ### Data Quality Revamp

  * **Dynamic Sampling by default**: The Profiler now defaults to Dynamic Sampling instead of scanning 100% of rows, significantly reducing query cost and execution time on large tables.
  * **Cardinality distribution removed from defaults**: Cardinality metrics are no longer collected on every run. If your workflows depend on distinct-value counts (classification, tagging, custom rules), explicitly add cardinality distribution to the relevant profiler configuration.
  * Existing profiler configs are preserved — only pipelines using the default agent config are affected.

  ### Governance — Custom Intake Forms & OWL Import

  * **Custom Intake Forms**: Define custom forms for governance intake workflows — asset certification, ownership assignment, data classification, or any structured intake process. Forms are configurable per entity type and feed into the existing task and workflow system.
  * **OWL Import**: Import OWL (Web Ontology Language) files to load existing ontologies and classification taxonomies directly into OpenMetadata, reusing industry-standard or enterprise-specific taxonomy assets.

  ### Context Center

  Knowledge Center has been replaced by **Context Center** — the single destination for reference content in your catalog. Existing pages are automatically migrated as **Articles** on upgrade. New content types include **Documents** (freeform rich-text attached to assets or teams) and a **Dashboard view** for discovering and managing content across your organisation.

  ### Activity Feed, Tasks, Workflows, and Announcements

  Activity Feed, Tasks, Workflows, and Announcements are fully compatible with 2.0 data models. Migrated assets, in-flight tasks, and announcements carry over automatically — no manual action required.

  ### Ingestion — Connectors

  * **Databricks Pipeline**: Authentication updated from a bare `token` field to a structured `authType` object supporting Personal Access Token, DatabricksOAuth, and Azure AD. Stored connection configs are migrated automatically.
  * **Python 3.12**: Ingestion images now run on Python 3.12 (`python:3.12-slim-trixie`; Airflow upgraded to `apache/airflow:3.3.0-python3.12`). This change first shipped in 1.13.4 — skip if already on 1.13.4.
  * Additional connector stability improvements and bug fixes across the connector library.

  ### MCP (Model Context Protocol)

  OpenMetadata's MCP server exposes catalog metadata to AI assistants and agents through the Model Context Protocol — any MCP-compatible client (Claude, Cursor, IDE plugins) can query your catalog without custom integrations.

  * **Enabled by default**: Starts ready on upgrade; no manual activation needed.
  * **`nextCursor` pagination**: MCP read tools can return a `nextCursor` value alongside results. Pass it as `cursor` on the next call to continue; cursor behavior varies by tool. Existing `from`/`size` offset parameters continue to work.

  ### Inbox

  Inbox notifications have been updated to reduce noise across 2.0 workflows — task notifications are grouped and filtered consistently, announcements are correctly scoped to relevant entities, and activity items from the 2.0 migration are correctly attributed.

  ### Landing Page

  The landing page has been redesigned with an updated navigation structure and cleaner entry points into asset discovery, lineage, governance, and data quality — reducing the clicks required to reach the most-used workflows.

  ***

  ## Breaking Changes

  ### MCP — Cursor Paging Available (Offset Still Supported)

  MCP read tools can return a `nextCursor` value when another page is available. Pass it as `cursor` on the next call to continue. Cursor semantics vary by tool, so do not rely on it for concurrent-write consistency.

  The existing `from` and `size` offset parameters **continue to work** — the cursor only takes effect when explicitly passed. No migration is required for existing MCP clients.

  ***

  ### Semantic Search — Embedding Configuration Moved

  Embedding settings and provider credentials have moved out of `elasticsearch.naturalLanguageSearch`. In 2.0, keep `semanticSearchEnabled` there, select the embedding provider and model under `llmConfiguration.embeddings`, and configure that provider's credentials in the matching `llmConfiguration` provider block.

  **Before (1.13):**

  ```yaml theme={null}
  elasticsearch:
    naturalLanguageSearch:
      semanticSearchEnabled: ${SEMANTIC_SEARCH_ENABLED:-false}
      embeddingProvider: ${EMBEDDING_PROVIDER:-bedrock}
      maxConcurrentRequests: ${MAX_CONCURRENT_EMBEDDING_REQUESTS:-10}
      bedrock:
        awsConfig:
          enabled: ${BEDROCK_AWS_IAM_AUTH_ENABLED:-false}
          region: ${AWS_BEDROCK_REGION:-""}
          accessKeyId: ${AWS_BEDROCK_ACCESS_KEY:-""}
          secretAccessKey: ${AWS_BEDROCK_SECRET_KEY:-""}
          sessionToken: ${AWS_BEDROCK_SESSION_TOKEN:-""}
        embeddingModelId: ${AWS_BEDROCK_EMBED_MODEL_ID:-""}
        embeddingDimension: ${AWS_BEDROCK_EMBEDDING_DIMENSION:-""}
  ```

  **After (2.0):**

  ```yaml theme={null}
  elasticsearch:
    naturalLanguageSearch:
      semanticSearchEnabled: ${SEMANTIC_SEARCH_ENABLED:-false}

  llmConfiguration:
    bedrock:
      awsConfig:
        enabled: ${BEDROCK_AWS_IAM_AUTH_ENABLED:-true}
        region: ${AWS_DEFAULT_REGION:-""}
        accessKeyId: ${AWS_ACCESS_KEY_ID:-""}
        secretAccessKey: ${AWS_SECRET_ACCESS_KEY:-""}
        sessionToken: ${AWS_SESSION_TOKEN:-""}
    embeddings:
      provider: ${EMBEDDING_PROVIDER:-bedrock}
      maxConcurrentRequests: ${MAX_CONCURRENT_EMBEDDING_REQUESTS:-10}
      bedrock:
        embeddingModelId: ${AWS_BEDROCK_EMBED_MODEL_ID:-"amazon.titan-embed-text-v2:0"}
        embeddingDimension: ${AWS_BEDROCK_EMBEDDING_DIMENSION:-512}
  ```

  **Action required:**

  1. Remove `embeddingProvider`, `maxConcurrentRequests`, and the provider sub-blocks from `elasticsearch.naturalLanguageSearch`.
  2. Move provider credentials to the matching `llmConfiguration` block, and keep the embedding provider and model settings under `llmConfiguration.embeddings`.
  3. Set `SEMANTIC_SEARCH_ENABLED=true` to enable semantic search. `LLM_ENABLED` and `LLM_PROVIDER` configure the platform completion client; they do not enable vector embeddings.

  | Provider              | 1.13 location                             | 2.0 location                         |
  | --------------------- | ----------------------------------------- | ------------------------------------ |
  | Bedrock               | `naturalLanguageSearch.bedrock.awsConfig` | `llmConfiguration.bedrock.awsConfig` |
  | OpenAI / Azure OpenAI | `naturalLanguageSearch.openai`            | `llmConfiguration.openai`            |
  | Google                | `naturalLanguageSearch.google`            | `llmConfiguration.google`            |
  | DJL                   | `naturalLanguageSearch.djl`               | `llmConfiguration.embeddings.djl`    |

  **Credential environment variables renamed:**

  | Old (1.13)                  | New (2.0)                |
  | --------------------------- | ------------------------ |
  | `AWS_BEDROCK_REGION`        | `AWS_DEFAULT_REGION`     |
  | `AWS_BEDROCK_ACCESS_KEY`    | `AWS_ACCESS_KEY_ID`      |
  | `AWS_BEDROCK_SECRET_KEY`    | `AWS_SECRET_ACCESS_KEY`  |
  | `AWS_BEDROCK_SESSION_TOKEN` | `AWS_SESSION_TOKEN`      |
  | `OPENAI_API_KEY`            | `LLM_OPENAI_API_KEY`     |
  | `OPENAI_API_ENDPOINT`       | `LLM_OPENAI_ENDPOINT`    |
  | `OPENAI_DEPLOYMENT_NAME`    | `LLM_OPENAI_DEPLOYMENT`  |
  | `OPENAI_API_VERSION`        | `LLM_OPENAI_API_VERSION` |
  | `GOOGLE_API_KEY`            | `LLM_GOOGLE_API_KEY`     |
  | `GOOGLE_API_ENDPOINT`       | *(removed)*              |

  Environment variables `EMBEDDING_PROVIDER`, `MAX_CONCURRENT_EMBEDDING_REQUESTS`, `DJL_EMBEDDING_MODEL`, and every `*_EMBEDDING_MODEL_ID` / `*_EMBEDDING_DIMENSION` variable are **unchanged**.

  ***

  ### Profiler — Default Sampling Change

  The Profiler now defaults to **Dynamic Sampling** instead of scanning 100% of rows. Cardinality distribution metrics are **no longer collected by default**.

  **Action required:** If any workflows depend on cardinality/distinct-value data — custom rules, classification agents, or analytics built on column-level distinct counts — explicitly add cardinality distribution to the affected profiler configuration.

  ***

  ### Connectors — Databricks Pipeline Auth

  The `databricksPipelineConnection` schema drops the top-level `token` string in favour of a structured `authType` object (Personal Access Token, DatabricksOAuth, or Azure AD).

  **Before (1.13):**

  ```yaml theme={null}
  connection:
    config:
      type: DatabricksPipeline
      hostPort: adb-xxxx.azuredatabricks.net:443
      token: dapi...
  ```

  **After (2.0):**

  ```yaml theme={null}
  connection:
    config:
      type: DatabricksPipeline
      hostPort: adb-xxxx.azuredatabricks.net:443
      authType:
        token: dapi...
  ```

  **Action required:** Stored configs are migrated automatically. External YAML files (CI pipelines, custom configurations) must be updated manually.

  ***

  ### Ingestion Images — Python 3.12

  Ingestion images have moved from Python 3.10 to **Python 3.12** (`python:3.12-slim-trixie`; Airflow upgraded to `apache/airflow:3.3.0-python3.12`).

  **Action required:**

  * Rebuild any custom ingestion Docker images against Python 3.12.
  * Remove or replace `cp310` binary wheels — they will fail to import on 3.12 images.
  * If running a custom Airflow environment, upgrade to the 3.12-based Airflow image.

  **Note:** This change first shipped in 1.13.4. If you are upgrading from 1.13.4, no action is needed.

  ***

  ### Chrome Plugin — Trusted Redirect URIs

  The Chrome plugin now requires trusted redirect URIs to be explicitly declared. Previously the plugin accepted redirects to any origin.

  **Action required:** `additionalTrustedRedirectUris` requires the **full redirect URI** — including scheme, host, port, and path. For the Chrome plugin, add the extension's callback URI:

  ```yaml theme={null}
  additionalTrustedRedirectUris: ["https://<your-extension-id>.chromiumapp.org/auth0"]
  ```

  Replace `<your-extension-id>` with the actual Chrome extension ID. Setting only the origin will not satisfy the redirect check and the login flow will fail with a redirect mismatch error.

  ***

  ### Context Center — Knowledge Center Removed

  Knowledge Center no longer exists as a standalone section. All existing pages are automatically migrated to **Articles** inside Context Center on upgrade — no manual content migration is needed.

  Any hard-coded links or bookmarks to Knowledge Center URLs (e.g. `/knowledge-center/...`) will break after upgrade, as the URL structure has changed.

  **Action required:** Update any internal documentation, wikis, or automation that references Knowledge Center URLs to point to the equivalent Article in Context Center.

  ***

  ### Great Expectations 0.x — Support Removed

  Support for Great Expectations 0.x has been **removed** in 2.0.

  **Action required:** Migrate to Great Expectations `~=1.3` before upgrading. See the [Great Expectations migration guide](https://docs.greatexpectations.io/docs/guides/miscellaneous/migration_guide).

  ***

  ### Airflow as Internal Orchestrator — Deprecated in 2.1

  Airflow will be deprecated as the **internal** orchestration system in 2.1, in favour of the native Kubernetes Orchestrator introduced in 1.12. External Airflow installations are unaffected. Begin evaluating the Kubernetes Orchestrator now — documentation and migration guides will be published ahead of the 2.1 release.

  ***

  ## Upgrade Actions Summary

  | Area                         | Action Required                                                                                                                                           |
  | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | MCP clients                  | No migration required — pass `cursor` when a tool returns `nextCursor`; `from`/`size` offset still works                                                  |
  | Semantic search / embeddings | Move provider credentials and embedding config from `naturalLanguageSearch` to the matching `llmConfiguration` blocks; set `SEMANTIC_SEARCH_ENABLED=true` |
  | Profiler config              | Explicitly add cardinality distribution if downstream features depend on it                                                                               |
  | Databricks YAML              | Update `token: dapi...` to `authType: { token: dapi... }` in external pipeline YAMLs                                                                      |
  | Custom ingestion images      | Rebuild against `python:3.12-slim-trixie`; remove `cp310` wheels. Skip if upgrading from 1.13.4.                                                          |
  | Chrome plugin                | Set `additionalTrustedRedirectUris` to the full Chrome callback URI (e.g. `https://<extension-id>.chromiumapp.org/auth0`)                                 |
  | Knowledge Center links       | Update bookmarks and internal links to Context Center → Articles                                                                                          |
  | Great Expectations           | Migrate from 0.x to `~=1.3` before upgrading                                                                                                              |

  **[View the full changelog](https://github.com/open-metadata/OpenMetadata/compare/1.13.4-release...2.0.0-release)**

  ***

  ## Changelog

  ### Platform

  * SCIM Provisioning configuration has moved to **Settings → Team and Users → Provisioning**. No configuration data is lost; only the navigation path changes.

  ### Alerts

  * Fixed alert filters (Entity FQN, Owner, Domain, Entity Id, Source) not applying correctly to conversations and replies. Previously, an alert scoped to a specific entity received conversation notifications from every entity in the catalog. If an alert goes quiet after upgrading, widen or remove filters that were previously being ignored.
</Update>
