1.13 Release Notes
21st August 2026
You can find the GitHub release here.
Changelog
OpenMetadata 1.13.4 is a maintenance release focused on connector reliability, search and lineage correctness, governance and MCP fixes, and a broad security cleanup across ingestion and platform dependencies.🔌 Connectors & Ingestion
- Hive: test connection failed when no metastore was selected #30380: The metastore step is optional again, restoring the pre-1.13 behaviour for Hive services that don’t front a metastore.
- Oracle: view definitions truncated by bulk LONG fetch #30319: Falls back to a per-view fetch when the bulk LONG read truncates, recovering full view DDL for downstream lineage.
- BigQuery: dataset and table object caches collide across schemas #30973: Caches are keyed per schema, preventing cross-schema object collisions on large projects.
- Fivetran: lineage lost when service names are unset; Table → Topic edges missing #31265: Falls back cleanly when service names are missing and adds Table → Topic lineage support.
- KafkaConnect: Debezium lineage broken on single-database services #31280: Debezium source lineage now resolves against single-database KafkaConnect services.
- BurstIQ: invalid system wallet failing silently #29727: Test connection surfaces an invalid system wallet with an actionable error.
- Table-owner extraction using the inspector instead of the dialect #31479: The owner extractor now dispatches on the SQL dialect, matching how the rest of the connector routes queries.
- Lineage parser: rows without a table name reaching the DB #31523: Parsed table references with no table name are skipped rather than persisted as broken rows.
🔍 Search & Discovery
- Inherited domain lost on descendants when an asset is moved #30678: Moving an asset now propagates the inherited domain to all descendants in search.
- Search connection pool starvation #31658: Bounds
httpclient5connection-request timeouts so the search client stops starving under load.
🛡️ Data Governance & Quality
- Read authorization depending on the requested fields projection #29835: Read authorization is now independent of the
fieldsquery parameter, closing a projection-based bypass. - Orphan test case 404s the whole test case listing #31379: A single stale test case no longer breaks paginated test-case listings.
- Any-language recognizer normalization #28883: Recognizers behave consistently regardless of source language.
🤖 MCP Server
- CORS headers, unused capability, and OAuth
issparameter #30673: Fixes MCP CORS headers, removes the unused resources capability, and populates the OAuthissparameter. - Null
protected_resource_metadatain the discovery response #30642: Omits the field entirely when unset instead of returningnull.
⚙️ Platform
/metadata/types/customPropertiesreturning non-custom properties #31171: The endpoint returns only custom properties, matching its name.- Container re-parenting via PATCH #24294: Containers can be re-parented through PATCH like other hierarchical assets.
- Data Product reference indexing #30387: Search stays consistent after linked-entity updates on Data Products.
🎛️ UI
- Related terms
+Nbadge not expandable #31009: The+Nbadge on glossary related terms is clickable to reveal the full list. - Query Tab: UI backend integration #30688: UI-side backend calls for the Query Tab align with the current API surface.
- Queries tab: badge count skeleton while loading #31688: The Queries tab shows a skeleton in the badge while the count fetches, instead of flashing
0.
🔒 Security
31st July 2026
You can find the GitHub release here.
Changelog
OpenMetadata 1.13.3 is a maintenance release delivering data contract and governance workflow fixes, alert delivery fixes, a Snowflake foreign-key reflection fix, and UI fixes.🔌 Connectors & Ingestion
- Snowflake: foreign-key collisions across tables sharing a constraint name #30473: Foreign-key reflection is now keyed on
(fk_name, table_name), so cloned tables that reuse a constraint name no longer merge into a single constraint referencing another table’s columns and getting rejected with400 Invalid column name.
🛡️ Data Governance & Quality
- Data contracts stuck at
Runningafter a Data Quality pipeline completes #30531: ThetestSuite→dataContractreverse relationship is now persisted on contract create/update, so contract status resolves when the pipeline finishes instead of sitting atRunningindefinitely. Regression from 1.13.0. - Sanitize poisoned governance trigger filters
5963637b: Event-based workflow trigger filters stored as an empty or placeholder value ("",{}) are now ignored instead of rejecting every event, and a 1.13.3 migration repairs affectedworkflowDefinitionsrows in place. - Hide soft-deleted owners on the Test Suite detail page #30520: Editing owners on a logical Test Suite no longer fails with
array item index is out of range;TestSuiteResource.getByNamenow honoursincludeRelations, matching every other detail page. - Intake form
formFieldssupport #30614: Added aformFieldsarray with a per-fieldrequiredflag to theIntakeFormschema, along with a migration that backfills it from the legacyrequiredFields. Backend only in this release.
⚙️ Platform
- Skip notification recipients without contact information #30518: A team or user with no email address or webhook no longer discards every other recipient of the same alert; recipients are now resolved individually, matching the webhook path.
🎛️ UI
- Tag and Glossary dropdowns not selectable in the Column Bulk Operations edit drawer #30634: The tag and glossary dropdowns now render inside the edit drawer, so options can be selected instead of having clicks swallowed by the drawer’s focus containment.
30th July 2026
You can find the GitHub release here.
Changelog
OpenMetadata 1.13.2 is a maintenance release delivering MCP tool enhancements, search and reindexing reliability fixes, security patches, connector improvements, data governance and quality updates, lineage fixes, and UI enhancements.🔒 Security
- Jackson, Logback, Postgres & Calcite dependency pins #30396: Aligned Jackson, Logback, Postgres, and Calcite dependency pins with main to clear Inspector high findings.
- Log4j CVE-2026-49844 #30311: Bumped
log4jfrom 2.25.4 to 2.25.5 to patch CVE-2026-49844. - Trivy ingestion image CVEs #30516: Resolved Trivy-flagged CVEs by upgrading Airflow to 3.2.2, updating Spark Hive jars, and patching perl/nss packages.
- Trim vulnerable apt packages from ingestion Docker images #30024 #30454: Removed CVE-flagged apt packages from ingestion Docker base images and hardened apt-get security.
- PyArrow IPC use-after-free CVEs #30146: Bumped
pyarrowpast the IPC use-after-free CVEs. - mlflow-skinny Snyk findings #30046: Bumped
mlflow-skinnyto clear critical/high Snyk findings. - Ingestion dependency CVE bumps #30034: Bumped 6 CVE-flagged ingestion dependencies to patched versions.
- No reviewer authz shortcut on CREATE #30026: Fixed a security gap where reviewer authorization shortcut was incorrectly granted on entity CREATE operations.
- Stop exposing app bot JWT and private secrets #29793: App bot JWT tokens and
privateConfigurationsecrets are no longer exposed in API responses.
🤖 MCP (Model Context Protocol)
- New
get_user_contexttool #30384: Added aget_user_contextMCP tool that returns the calling user’s profile, roles, and team memberships for context-aware AI interactions. - Tool metadata annotations #30105: MCP tools are now annotated with
title,readOnly,destructive, andopenWorldhints to help LLM clients make safer tool-selection decisions. - Unified read-tool pagination with
nextCursor#29800: All MCP read tools now share a unified opaquenextCursorpagination contract, replacing ad-hoc page parameters for consistent multi-page traversal. - Structured content and soft-error signaling #29799: MCP tools now emit
structuredContentalongside text and flag non-fatal issues viaisErrorfor better LLM error handling. - Read-tool size cap via item paging #29732: Read tools now page items rather than truncate content when a response approaches the size cap, ensuring no data is silently dropped.
- Paginate
get_entity_detailscolumns #29707 #29713:get_entity_detailsnow paginates column lists for wide entities to stay within LLM context limits. - Authorize
get_entity_detailsagainst resolved entity #30011 #30043: Fixedget_entity_detailsto perform authorization checks against the fully resolved entity, preventing unauthorized access via FQN aliases.
🔍 Search & Reindexing
- Migrate stale owner aggregation field #29691: A 1.13.2 migration corrects stale owner aggregation field references in stored search settings to prevent broken search filters after upgrade.
- Column bulk operations search at scale #29695: Fixed column bulk operations search returning no results on large datasets.
- Index
testSuiteon tables during selective reindex #29688: Selective reindex now includestestSuiteassociations on table documents. - Durable realtime column indexing #29653: Realtime column index updates now await the bulk write to complete before acknowledging, preventing silent index lag.
- Index all body chunks for semantic retrieval #29850: All body text chunks are now indexed for semantic retrieval, fixing incomplete hybrid search results.
- ES/OS document rejection hardening #28671: Engine-native mapping hardening prevents Elasticsearch/OpenSearch from rejecting index documents due to type mismatches.
- Index domain parent for sub-domain counts #29118: Domain parent is now indexed so the Sub Domains tab correctly counts child domains after a full reindex.
mlModelServicesearch index routing fix #30574: Fixedsearch index=mlModelServiceincorrectly returning ML Model assets from other indexes.- Promote every staged index in distributed reindex #30519: All staged indexes are now promoted atomically in a distributed reindex, preventing partial promotion failures.
customPropertiesTypednested mapping #30501: Added missing nestedcustomPropertiesTypedfield mapping to 5 entity indexes to enable custom property aggregations in search.- Restore dropped table reindex fields #30177: Restored
schemaDefinitionand ER diagram fields that were inadvertently dropped from the table search index in 1.13. - Populate service for stored procedures on reindex #30127: The service field is now correctly populated for stored procedures during reindex.
- Preserve search preview ranking order #30083: Search preview results now preserve the intended best-match ranking order across all hit pages.
- Unwedge reindex orchestrator on crash #28699: The reindex orchestrator now recovers from a crash by unwedging itself and cleaning up stale Quartz jobs.
- Stop falsely abandoning healthy reindex jobs #29547: Fixed the orchestrator incorrectly abandoning reindex jobs that hold a live lock, causing premature failure.
- Remove DB-backed search index mapping settings #30218: Removed the legacy database-backed search index mapping settings page and its UI entry, simplifying search configuration.
- Search cluster fitness diagnostic #28447: Added a REST endpoint and ops CLI command for diagnosing search cluster fitness (shard health, index sizes, replication lag).
- Resilient embeddings and reindex auto-tune #29833: Search embedding generation, reindex auto-tuning, and audit log export now recover gracefully on any pod size rather than failing the entire run.
- Bind BoundedListFilter params in TestSuite reads #30219: Fixed unbound query parameters in TestSuite keyset pagination that could cause full-table scans.
- Self-heal custom-property registry on cache miss #30044: Custom-property type registry now self-heals on a cache miss across replicas instead of returning stale type mappings.
🔌 Connectors & Ingestion
- Kafka Connect: EventRouter/RegexRouter lineage #29980: Kafka Connect now generates lineage for topics routed via
EventRouterandRegexRouterSMTs. - dbt Cloud: column-level lineage from compiled SQL #29731: dbt Cloud connector now extracts column-level lineage directly from compiled SQL in addition to the manifest.
- Databricks partner User-Agent #30222: Set the Databricks partner User-Agent header for telemetry attribution in Databricks ingestion.
- OpenLineage: Glue symlink & multi-catalog dataset lineage #30272: Resolved OpenLineage lineage for Glue symlink tables and multi-catalog datasets that previously failed FQN resolution.
- ADLS: respect
bucketNameduring container discovery #30271: Azure Data Lake Storage ingestion now respects the configuredbucketNamefilter during container discovery. - Redshift Spectrum: map Hive types #29910: Redshift Spectrum now maps Hive-compatible types (
string,double,char,tinyint) instead of reportingUNKNOWN. - Delta Lake: parse struct field names with colons #30080: Fixed Delta Lake schema parser to correctly handle struct field names containing colons.
- MSSQL: BigInteger identity reflection on SQLAlchemy 2.0 #29639: Fixed MSSQL
BigIntegeridentity column reflection under SQLAlchemy 2.0. - MSSQL: Query Store for lineage & usage #29719: MSSQL query and stored-procedure lineage and usage now use the Query Store for improved reliability, with hardened fault-tolerance and warnings on query-log truncation.
- BigQuery: GCP service account impersonation #29683: Fixed GCP service account impersonation across BigQuery ADC and SQLAlchemy paths.
- Ingestion engines: AUTOCOMMIT to release AccessShareLock #29658: Ingestion engines now use AUTOCOMMIT mode to release
AccessShareLockpromptly, preventing lock buildup on busy PostgreSQL instances. - Data quality: use sample config for sample data ingestion #29907: Data quality sample data ingestion now uses the correct sample configuration instead of the full profiler config.
- Add
pkg-configto ingestion-base images #30264: Addedpkg-configto ingestion-base Docker images somysqlclientcompiles correctly from source. - Oracle: preserve CTAS
sqlQueryon lineage patch #29646: Oracle connector now preserves thesqlQueryon CTAS lineage patches and correctly parses stored procedure names. - dbt: populate
TestCaseResult.resultwith test message #29650:TestCaseResult.resultis now populated with the dbt test failure message for better observability. - Lineage: dedup queries and treat conflicts as warnings #28757: Duplicate lineage queries are deduplicated and already-present query conflicts are now logged as warnings instead of errors.
📖 Glossary
- Parse glossary CSV
entityStatuscase-insensitively #29510: Glossary CSV bulk import now acceptsentityStatusvalues in any case (e.g.,DRAFT,Draft,draft). - Paginate glossary term relation settings #30372: The glossary term relation settings page is now paginated to prevent timeouts on glossaries with many related terms.
🛡️ Data Governance & Quality
- Validate DI chart formulas via formula evaluator #30073: Data Insights chart formula validation now uses
DataInsightFormulaEvaluatorinstead of the policy validator to correctly flag invalid formulas. - Return 400 for chart metrics with no function or formula #29890: Data Insights chart preview returns HTTP 400 (not 500) when a chart metric is missing both a function and a formula.
- Custom property filter and aggregation in Data Insights #29643: Data Insights charts now support filtering and grouping by custom properties.
- Mark superseded approval runs as SUPERSEDED #29868: When a new approval workflow supersedes a running one, the previous run is now marked as
SUPERSEDEDinstead ofFAILURE. - Data Contract: fix NOT_IN JsonLogic multivalue fields #29003: Data Contract
NOT_INoperator now emits correct JsonLogic multivalue field expressions. - Fix
Table.schemaDefinitionsilently dropped on PUT #29441:Table.schemaDefinitionis no longer silently dropped when a full PUT update is performed. - Preserve
autoClassificationConfigon classification PUT #29735: A classificationPUTnow preserves the existingautoClassificationConfiginstead of resetting it. - Data Contract alert filter search #30007: Fixed broken search on the Data Contract alert filter panel.
- Auto-classification: break sibling-tag score ties #29989: Auto-classification now breaks ties between sibling tags using a deterministic secondary sort to prevent unstable classification results.
🧬 Lineage
- Fix
fitViewnot centering the lineage DAG #30163: ThefitViewcall on lineage page load now correctly centers the DAG in the viewport. - Render query-lineage SQL on the edge drawer #29651: The lineage edge drawer now renders the underlying SQL query for query-level lineage edges.
⚙️ Platform
- Content-based ETag to prevent stale votes/followers #30497: ETags are now computed from entity content rather than version, preventing browsers from serving stale votes and follower counts via 304 responses.
- Harden entity pagination, multi-owner authz, and cursor charset #29750: Hardened keyset pagination, enforced authorization checks for multi-owner assignments, and fixed cursor encoding for non-ASCII entity names.
- Paginate
GET /v1/eventsto prevent Java heap OOM #29958: The events endpoint now supports cursor-based pagination with an optionalendTsbound to prevent out-of-memory errors on large event backlogs. - Avoid Out-of-sort-memory on entity list pagination #29898: Entity list queries no longer trigger MySQL’s
Out of sort memoryerror on large tables by switching to indexed keyset pagination. - Prevent circular team hierarchy #30063: Team create and update operations now validate for circular parent-child references and reject them with a 400 error.
- Reclaim orphaned ingestion pipelines #30030: A migration backport reclaims ingestion pipelines that became orphaned due to partial deletes.
- Enable impersonation for custom bots with RBAC #29029: Custom bots can now use service account impersonation with RBAC-scoped control for fine-grained delegation.
- Preserve inherited domains in CSV bulk edit #30013: Bulk CSV edit now preserves inherited domain assignments instead of clearing them when a domain column is absent.
- Compare email domains case-insensitively #30285: Principal domain enforcement now compares email domains case-insensitively, fixing login failures for users with mixed-case email domains.
- Validate legacy feed task payloads #29582: Legacy feed task payloads are now validated before processing to prevent ingestion pipeline failures on malformed historical records.
- Expose
Triggerin ingestionPipeline descriptor #29530: The ingestion pipelineTriggerfield is now exposed in the pipeline descriptor, andEditAllpermission is required to kill a running pipeline. - Bypass domain enforcement for OM-internally-issued tokens #29433: Service and bot tokens issued by OpenMetadata itself now bypass principal domain enforcement to prevent breakage during startup and migrations.
- Cap Titan Bedrock embedding input #30021: Input to Titan Bedrock embedding models is now capped to avoid
ValidationExceptionon oversized payloads. - Retry Bedrock 429 throttling with backoff #29938: Bedrock API calls now retry on HTTP 429 (Too Many Requests) with exponential backoff.
- Fix missing
ownerNamefield #29899: Restored theownerNamefield that was missing from entity responses after a prior refactor. - RDF: exclude unsupported entity types #29381: Entity types not supported by the RDF knowledge graph are now excluded at index time to prevent serialization errors.
- Record failed webhook events on non-2xx delivery #29808: Event subscription delivery failures are now recorded when the webhook returns any non-2xx status code, not just network errors.
- Default pipeline patch version when
zcomponent is missing #29787: Pipeline version patching now defaults thezcomponent to 0 when it is absent, preventingNullPointerExceptionon version-less pipelines. - Fix stale description source badge #29843: Clearing a nested field’s description no longer leaves a stale source badge in the UI.
- Bound memory in bulk recursive hard delete #29322: Bulk recursive hard delete now bounds memory usage and skips work already covered by ancestor deletes to prevent OOM on large hierarchies.
- Backport orphaned column-doc cleanup #29549: Orphaned column documentation entries from deleted columns are now cleaned up during migration.
🎛️ UI
- Multi-owner avatar stack with hover popover #29612: Entity header now stacks multiple owner avatars with a hover popover showing all owners, replacing a truncated list.
- Migrate service icons from PNG to WebP #29105: All service connector icons have been migrated from PNG to WebP for faster page loads and better visual quality.
PaginationCardWithControlscomponent #30379: Backported thePaginationCardWithControlscomponent to 1.13 for consistent paginated card layouts.- Fix
is_not_setsemantics for Owner/Domain/DataProduct filters #30439: Corrected theis_not_setfilter semantics for Owner, Domain, and Data Product fields in the Explore page filters. - Table version page shows historical columns #29411: The table version history page now correctly shows the column state at that version instead of the current live API columns.
- Handle test suite tab loading race #29561: Fixed a race condition that could leave the test suite tab in a perpetual loading state.
- Hide data product lifecycle stage badge #29290: The lifecycle stage badge is now hidden on data product pages where it is not applicable.
- Lazy loading for enum select in advanced search #29736: Enum select fields in the advanced search query builder now load options lazily to prevent UI freezes on large enumerations.
- Column tag filtering in advanced search #28871: Advanced search now supports filtering by column-level tags.
- Permissions for run/deploy buttons #29527: Run and deploy buttons on ingestion pipelines now correctly reflect the user’s permissions and are disabled when the user lacks the required role.
- Column grid alphabetical sort #29751: Column bulk-edit grid now sorts columns alphabetically by default for easier navigation.
- Fix Certification icon rendering #29830: Resolved a rendering issue that caused the Certification icon to display incorrectly in entity headers.
- Total asset count for filtered Explore results #28873: The Explore page now shows the correct total asset count when advanced search filters are active.
27th June 2026
You can find the GitHub release here.
Changelog
OpenMetadata 1.13.1 is a maintenance release delivering MCP tool improvements, search and reindexing fixes, security patches, connector updates, glossary and governance enhancements, and UI fixes.🔒 Security
- Netty CVE-2026-44249 #28880: Bumped
netty-bomto 4.1.135.Final. - Jackson-databind CVE-2026-54512/513/514 #29389: Bumped
jackson-databindfrom 2.18.7 to 2.18.8. - Spring, Micrometer & OpenTelemetry CVE patches #29111: Spring 6.2.18 → 6.2.19, Micrometer upgraded, and OpenTelemetry pinned to patch reported CVEs.
- ws CVE-2026-48779 #29122: Bumped
wsto 8.21.0. - handlebars CVE-2026-55760 #29221: Bumped
handlebarsto 4.5.2 to patch a path-traversal vulnerability. - sudo CVE-2026-35535 #29343: Upgraded
sudoin the ingestion Docker image. - UI dependency vulnerability fixes #29223 #29241: Bumped
undici6.25.0 → 6.27.0,form-data,dompurify,markdown-it, andjs-yaml. - form-data bumped #29349: Updated the
form-datapackage to address reported vulnerabilities.
🤖 MCP (Model Context Protocol)
- MCP Registry publishing #27982: Added
server.jsonfor publishing openmetadata-mcp to the official MCP Registry, enabling discovery across aggregators like PulseMCP. - MCP tool usage analytics #28352: MCP tool calls now track usage metrics including per-tool latency percentiles, ok/fail counts, and client classification (VS Code, Claude CLI, etc.) with reservoir sampling.
- Cap search_metadata response size #28383: Capped
search_metadataresponse size to prevent LLM context overflow and guides LLM clients to use smaller page sizes. - Map MCP error responses to correct HTTP status codes #28622: MCP tool error responses now return the correct HTTP status codes instead of generic errors.
- Slim get_entity_lineage payload #28618: Optimized
get_entity_lineageMCP tool payload with a slim transform to reduce response size. - Compact create tool responses #28633:
create_metric,create_test_case, andcreate_glossary_termtools now return compact entity representations. - Slim root_cause_analysis payload #28632: Slimmed the
root_cause_analysistool payload to fit within LLM context limits. - Return similarityScore in search_metadata #28512:
search_metadataresults now include_scoreassimilarityScorefor relevance ranking. - Fix entityType filtering in search_metadata #28698: Resolved index routing by
entityTypeto prevent cross-type result leaks and hardened parameter validation. - Search test cases and test suites via search_metadata #28743:
search_metadatanow supports searching test cases and test suites. - Shared trim util and global response size-budget #28764: Introduced shared response-trim utilities and a global size-budget net across all MCP tools.
- Trim wide-table payload in get_entity_details #28776:
get_entity_detailsnow trims wide-table payloads (column descriptions, schema/model SQL) to stay within size budgets. - MCP OAuth login fix #29228: Fixed
/mcp/callbackhandling of the active-session shortcut and implicit-flowid_tokenreturned in the URL fragment by SSO. - Fix OAuth state double-encoding #28952: OAuth state is now echoed without double-encoding in the redirect URI.
🔍 Search & Reindexing
- Vectorize testSuite/testCase for hybrid search #28669: Test suites and test cases are now vectorized, enabling hybrid (keyword + semantic) search over data quality entities.
- Make users and admins searchable by email #28800: Users and admins are now searchable by their email address.
- Recreate all indexes on major/minor version upgrade #28885: All search indexes are now recreated on major or minor version upgrades to pick up mapping changes.
- Reindex-drift and index health checks #28856: Added reindex-drift detection and index health checks in
/system/validate. - Fix reindex OOM on wide tables #28888: Switched to a covering cursor query and added entity name indexes to prevent out-of-sort-memory errors during reindex.
- Re-add —recreate-indexes flag #29087: Restored the
--recreate-indexesflag to the reindex CLI for backward compatibility. - Staged-index rescue uses index_total #29108: Uses
index_totalinstead ofdocs.countfor staged-index rescue so a failed reindex doesn’t delete a populated index. - Never apply refresh_interval=-1 as live serving value #29153: Prevents
refresh_interval=-1from being applied as a live serving value on index promote. - Cap oversized dataModel column tree at index time #29212: Containers/tables with pathologically large dataModel schemas now have nested column children stripped at index time to prevent OOM.
- Regenerate embeddings on dimension change #29437: Embeddings are regenerated when vector dimensions change instead of reusing stale vectors.
- Backfill name indexes for distributed reindex pagination #29361: Name indexes are backfilled to support distributed reindex pagination.
- Bound column-index fan-out #29377: Bounded table column-index fan-out to prevent reindex OOM on wide tables.
- Surface exact/prefix matches first in QuickFilter #29231: QuickFilter aggregations now surface exact and prefix matches first.
- Extend best-match ordering to sourceFields/topHits #29296: Extended the best-match ordering logic to sourceFields and topHits requests.
- My Data defaults to dataAsset index #29209: Changed the My Data page from the
allindex todataAssetfor more relevant results. - Stop time-series field propagation #29499: Stopped time-series field propagation to prevent stale data in downstream indexes.
🔌 Connectors & Ingestion
- PowerBI datamarts support #28896: Added support for Power BI datamarts.
- Fivetran improvements #27270: Various improvements to the Fivetran connector.
- Athena: pass catalogId for S3 Tables enumeration #28929: Passes
catalogIdtoget_tablesfor Athena S3 Tables enumeration. - Athena: ingest Iceberg table properties #27715: Ingests Iceberg table properties from the
$propertiesmetatable. - Athena: remove Trino stats #29446: Removed Trino-specific stats from the Athena table profiler.
- MySQL: refresh RDS IAM auth token per connection #28730: IAM auth tokens are now refreshed per connection instead of reusing stale tokens.
- MySQL: default stored-procedure language to SQL #28898: Unknown stored-procedure languages now default to SQL instead of
None. - MySQL: parameterize routines query #29077: Parameterized the MySQL routines query to avoid SQL string interpolation.
- Metabase: StarRocks SQL dialect for lineage #29033: StarRocks connections now route to the StarRocks SQL dialect so StarRocks-specific syntax parses correctly for lineage.
- Metabase: strip optional clause blocks #29390: Strips
[[...]]optional clause blocks before lineage parsing. - Datalake: parse array type nested structures in JSON #27798: Fixed parsing of array type nested structure fields inside JSON files.
- Iceberg/Delta: ingest metadata.json with real table columns #28422: Iceberg/Delta
metadata.jsonfiles are now ingested with real table columns instead of placeholder schema. - Upgrade collate-sqllineage #27413: Upgraded
collate-sqllineageto ≥2.1.1 with regression tests. - OpenLineage: reset Kinesis poll inactivity timer #29276: Resets the Kinesis poll inactivity timer per shard to prevent premature stream abandonment.
- OpenLineage: de-aggregate KPL records #29037: De-aggregates KPL (Kinesis Producer Library) records in the Kinesis source.
- SAP HANA: profiler fix #27483: Fixed
CREATE_TIMElookup to useSYS.TABLESwith uppercase catalog matching. - Unity Catalog: incremental extraction flag #28906: Added the missing
supportsIncrementalMetadataExtractionflag. - dbt Cloud: stale FQN and null timestamp #29525: Fixed dbt Cloud pipeline status using stale FQN and null timestamp.
- Secret serialization fixes #28625 #29198 #29216: Preserved
secret:prefix during Python SDK serialization, handled empty connection passwords withCustomSecretStr, and hardened serialization for null secrets. - Fix lineage script_exception in ADD_UPDATE_LINEAGE: Fixed script exceptions during lineage add/update operations.
📖 Glossary
- Cascade glossary rename to child terms in search index #29159: Renaming a glossary now updates the denormalized
glossary.name/glossary.fullyQualifiedNameon every child term’s search-index doc. - Keep approvals valid after move #29214: Approvals remain valid after a glossary term is moved.
- Skip move consolidation #29266: Fixes glossary term move operations by skipping unnecessary consolidation.
- Preserve domains through CSV import/export #29509: Glossary term domains are now preserved during CSV bulk import/export, and a
domainscolumn is added to the CSV format. - Show approve/reject buttons after Expand All #29295: The Expand-All tree fetch now requests the
reviewersfield so nested In-Review terms retain their approve/reject buttons.
🛡️ Data Governance & Quality
- ODPS Support for Data Products #29154: Added ODPS support for data products with custom intake forms.
- Data product support in Observability #28713: Added data product support in the Observability UI and backend.
- Preserve data products across domain deletes #29137: When a data product’s domain is changed and the original domain is hard-deleted, the stale relationship is now removed so data products are preserved.
- Delete orphaned test cases + guard test-definition deletion #29081: Orphaned test cases can now be hard-deleted, and test-definition deletion is guarded against missing relationships.
- Redeploy workflow BPMN on upgrade #29465: Workflow BPMN definitions are redeployed on upgrade so moved or renamed approvals resolve correctly.
- Allow bare function references in SpEL conditions #28946: Governance policy SpEL conditions now allow bare references to approved functions.
- Snapshot entityStatus for Data Insights #29313: Snapshots
entityStatusso Data Insights charts can filter by lifecycle status. - Project tags to DI snapshot #29382: Projects
classificationTagsandglossaryTagsto the Data Insights snapshot. - Add documentation panel to test definition form #29430: Added a documentation panel to the test definition creation form.
🔔 Alerts & Notifications
- Match Entity FQN filter against descendants #28833: Entity FQN filters now match against both the entity and its descendants.
- Dedup successful change events #28827: Deduplicates successful change events to prevent Postgres
ON CONFLICTabort errors. - Observability triggers skip thread events #29112: Observability status triggers no longer fire on thread events.
- Owner/user name filters match dotted usernames #29523: Owner and user name filters now correctly match usernames containing a dot.
🔐 Authentication
- OIDC/SAML self-signup persists mapped email claim #29227: Self-signup now persists the mapped email claim from OIDC/SAML.
🧬 Lineage
- Render traced edges and nodes #29195: Lineage now visually renders traced edges and nodes.
- Restore edges in lineage PNG export #29250: Edges are restored after canvas re-render in the lineage PNG export.
- Fix PNG lineage export download #29362: Fixed PNG lineage export download and late loading spinner.
- Correct nodeDepth for fetched nodes #27477: Updates
nodeDepthon fetched nodes using the basenodeDepth. - Drop nodeDepth partitioning for ELK #29224: Dropped
nodeDepthpartitioning so ELK derives lineage layers from edges.
⚙️ Platform
- Re-arm audit log consumer trigger on startup #28821: The audit log consumer trigger is now re-armed on startup instead of being skipped when the Quartz job already exists, preventing silent audit event loss after restarts.
- Validate Flowable pool connections for DB failover #28835: Enabled MyBatis pool-ping validation (SELECT 1) on the Flowable runtime engine so connections idle past 30 seconds are validated and replaced before reuse, surviving Aurora/RDS failovers and maintenance restarts.
- Defer row fetch in audit logs list query #28851: Avoids a full-row scan when listing audit logs.
- AuditLogConsumer offset gap resilience #29252: The audit log consumer no longer skips events when
change_event.offsetgaps appear under concurrent writes. - Concatenate multi-line SSE data fields #28945: Multi-line SSE
data:fields are now concatenated instead of overwritten. - Force UTF-8 decoding in SSE #29532: Forces UTF-8 decoding in SSE streams to prevent JSON truncation on multibyte characters.
- Persist nested column changes on PATCH #28837: Nested column changes are now persisted on optimistic-locking PATCH operations.
- Sync IngestionPipeline schedule on app changes #28702: When an app’s schedule changes, the backing
IngestionPipeline.scheduleIntervalis now synced so K8s/Argo/Hybrid runners pick up the new schedule. - Support double-quotes in FQN #28697: Fully qualified names now support double-quoted segments, with guard and repair logic for corrupt FQNs.
- Surface external secret read failures #28767: External secret read failures are now surfaced instead of being misrouted to create.
- Fix SocketAddressFilter NPE #29263: Fixed NPE on WebSocket handshake without a query string.
- Fix RDF Fuseki bulk write timeouts #28564: Fixed bulk write timeouts in the RDF Fuseki integration.
- RDF: index additional entity types #29327: Dashboard, DashboardDataModel, Table, and StoredProcedure are now properly indexed in the knowledge graph.
- RDF glossary term filtering #29368: Added support for RDF glossary term filtering.
- Slow Data Retention cleanup fix #29363: Fixed slow, memory-bound Data Retention entity relationship cleanup.
- Backfill pipeline service edges #29529: Migration backfills pipeline service edges in 1.13.1.
- Disabled new sidebar items by default for existing personas #29032: New sidebar items are disabled by default for existing personas to avoid unexpected navigation changes.
- Remove content/column name split for classification #29203: Removed the content/column name split for classification processing.
🎛️ UI
- Prevent ontology graph crash on large glossaries #29270: Prevented the ontology relations graph from crashing on large glossaries.
- Block-editor link modal in drawers #29374: Kept the link modal usable inside focus-trapping drawers.
- Preserve Persona navigation ordering #29353: Saved Persona navigation ordering is now preserved on reload.
- Scope “between” operator to numeric custom properties #29335: The
betweenoperator now correctly sends the upper bound for numeric custom properties only. - Tag column filter on nested tables #29075: Tag column filter on nested schema/column tables now shows only matching fields.
- Hide disabled Tiers from dropdown #29466: Disabled Tiers are now hidden from the Tier selection dropdown.
- Data product filter in Data Quality #29456: Included data product filter in Data Quality parameters.
- Data Quality pagination #29512: Forwarded
showPaginationto the DataQualityTab component. - FQN double-quote support in UI #28697: Added double-quoted name support in the UI FQN utility.
- Untitled-UI dropdowns for Add Assets drawer #29168: Replaced quick-filters in the Add Assets drawer with Untitled-UI dropdowns.
8th June 2026
You can find the GitHub release here.
What’s New
MCP Services
MCP (Model Context Protocol) is now a first-class service category with service entities, server entities, execution logs, test-connection support, REST resources, and UI pages.- Usage analytics expose summary, history, tool breakdown, user breakdown, and current-user usage
- MCP OAuth now supports SAML SSO authentication
- Client secrets are not issued to public clients
get_entity_detailsnow surfaces custom properties in responses
Knowledge Graph and RDF
Requires Apache Jena. Run the RDF Knowledge Graph Index App after upgrade for first-time users.- Distributed RDF indexing with state tables for jobs, partitions, locks, and server stats
- Glossary membership scoping, relation cleanup, distributed mode, and compaction
- Revamped graph with custom nodes, relation details, and distributed indexing status
Search Index Performance and Live Indexing
- Tunable settings: refresh interval, replica count, translog durability, sync interval, and per-entity overrides
- Per-stage reindex timing metrics for reader, process, sink, and vector stages
- Live indexing retries on failure with a dead-letter queue for failed items
- Search results can be exported to CSV from the Explore page under Tools
Ontology Explorer
New first-class governance page at/governance/ontology with graph filters, layout controls, side-panel entity details, and export controls.Typed Glossary Term Relations
New relation types:relatedTo, synonym, antonym, broader, narrower, partOf, hasPart, calculatedFrom, usedToCalculate, seeAlso- New governance settings page to manage relation types
- Relation badges, filters, and graph views throughout Glossary UI
- Concept mappings for external IRIs and SKOS-style relation types
- APIs for relation usage counts, asset counts, batch fetch, add/remove, and relation graph
Data Marketplace
- New sidebar and routes at
/data-marketplace,/data-marketplace/domains,/data-marketplace/data-products - Customizable landing page with widgets for domains, data products, announcements, and search
AI and Hybrid Search
- Google Gemini embedding provider with configurable dimensions and endpoint override
- OpenAI NLQ:
modelId, request timeouts, max tokens, and temperature now configurable - Hybrid search tuning: keyword/semantic weights, RRF settings, semantic score threshold, highlight fragment size
textToLLMContextand vector body-text extension hooks
Data Quality and Profiler
- Dynamic and static sampling via
profileSampleConfig - Explicit metrics selection per profiler run
- Top-dimension controls for dimensional test cases
- Bulk add and select-all for logical and bundle test suites
- Dashboard widgets and filters: data products, certification, incident status, tiers, entity health
- Storage auto-classification for containers with language-aware recognizer selection
- Deterministic MySQL median behavior
Governance and Workflows
- Data-contract references across data assets and service entities
- Workflow triggers extended: data product, data contract, glossary terms, input ports, output ports
- Approval tasks show proposed changes with clickable entity links, domain stamped on creation
- Self-approval prevention for workflow change requests
- New Archived entity status
New Connectors
Connector Improvements
- Snowflake — opt-in
ACCESS_HISTORYlineage path; queries chunked by day to avoid timeouts - Unity Catalog — incremental metadata extraction, only fetching changed entities since last run
- SSRS — report-to-dataset lineage
- Metabase — chart-level lineage extraction
- OpenLineage — Glue, Kusto, Cosmos DB naming; symlinks facet for Iceberg; pipeline node for single-sided lineage
- Storage — compressed archive ingestion (ZIP, tar, gzip) in S3, ADLS, GCS; Redis caching for container ancestors
- MySQL —
queryHistoryTableoption; GCP Cloud SQL IAM support - Athena —
catalogIdfor S3 Tables and cross-account Glue - Oracle —
preserveIdentifierCaseanduseDBATableoptions - S3, ADLS, GCS — profiling capability flags; REST connector S3 and SSL config
Platform, Cache, and Operability
- Read-bundle prefetch and cache warmup for tags, certifications, relationships, containers, and ancestors
- Redis: cache metrics, distributed warmup, per-command timeout defaulting to 300 ms
- Deadlock retry handling and reduced write deadlocks
- JSON log format via
LOG_FORMAT=json, streamable logs, non-blocking handlers - QoS request admission enabled by default via
QOS_*settings - CSP nonce handling and web security headers: COEP, CORP, COOP
- Regenerate-bot-tokens for JWT key rotation
db-tuneops subcommand and production RDS runbook- Diagnostics v2 framework — legacy
ExecutionTimeTrackerremoved
Columns as Independent Entities
Columns are now indexed as independent entities. They appear in asset counts and are the default entity shown in Explore when selecting a database service.Upgrade Notes and Breaking Changes
Connector and Ingestion Changes
- Iceberg connector removed — services migrated to
CustomDatabase, pipelines hard-deleted. Update any YAML or automation referencingserviceType: Iceberg - Databricks/Unity Catalog scheme changed from
databricks+connectortodatabricks. Stored configs are migrated; external YAMLs must be updated manually - Profiler sampling changed to
profileSampleConfig. Old fieldsprofileSample,profileSampleType,samplingMethodType, andcomputeMetricsare removed randomizedSampledefaults now explicitlyfalsein migrated configs- Python ingestion targets 3.10, 3.11, 3.12. Key deps: SQLAlchemy 2.x, pandas 2.1.x, pyodbc 5.3.x, Airflow 3.2.1, Databricks SQLAlchemy 2.x
- Storage manifest
partitionColumnsuses a smaller partition-column shape
API and Schema Changes
- Feed APIs no longer accept
fromincreateThreadorcreatePost— remove it from client payloads - Search payloads removed the
semanticSearchboolean - Application schemas renamed
previewtoenabledwith inverted meaning — custom app manifests must useenabled - Webhook moved from
secretKeytoauthTypeobject (no auth / bearer / OAuth2) - Custom property names must start alphanumeric and cannot contain
/or~ - Glossary
relatedTermschanged to typedTermRelationobjects — existing data migrated torelatedTo entity_relationshipprimary key now includesrelationType- Logical-suite add endpoint deprecated — use
PUT /api/v1/dataQuality/testCases/logicalTestCases/bulk - Bulk Assets
dryRunnow enforced for tag, glossary, dataProduct, and team removes - New Archived entity status — update any hard-coded status enums
Operational Notes
- Postgres
fqnHashtext_pattern_opsindexes added or replaced — runbook included in the migration file if the build is interrupted - New tables for MCP services, servers, executions, RDF indexing jobs, partitions, locks, and server stats
SERVER_CHANGE_LOGhistorical gaps backfilled — missing entries caused data-insights timeline holes- Profiler pipeline cleanup force-executed on upgrade to clear stuck pre-1.13 state
LOG_FORMAT=jsonnow supported — review any custom Dropwizard logging config- QoS admission enabled by default — check
QOS_*settings if adjustment needed - Redis per-command timeout defaults to 300 ms — tune for slow Redis deployments
Bug Fixes
Search and Reindexing
- Fixed nested children causing Elasticsearch/OpenSearch mapping-depth failures
- Fixed stale file-extension aggregation on v1.13.0 upgrade causing 500 errors on file search
- Fixed stale flattened-children highlight field on v1.13.0 upgrade causing 500 errors on container search
- Fixed
search_aftersilently dropping entities when sort value contains a comma - Fixed query, worksheet, and file reindexing missing relationship fields
- Fixed search-index alias resolution for entity-specific and OpenSearch cluster prefixes
- Fixed batch-prefetch of upstream lineage leaking Hikari connections during bulk reindex
- Fixed soft-delete propagation to time-series child aliases
- Fixed clean reindex jobs incorrectly marked failed when only warnings existed
- Fixed text-field sorting and aggregation
.keywordresolution - Fixed user index searches on nested owners queries
- Fixed advanced-search Contains and Not Contains operators for description field
Glossary, Tags, and Governance
- Fixed glossary relation rendering for multiple relation types between the same term pair
- Fixed related-term tooltip sanitization and relation badge colors and icons
- Fixed tag rename and relationship cache invalidation
- Fixed
TagLabelserver fields lost when saving tags - Fixed certification tags leaking into regular tags and missing
appliedByaudit trail - Fixed soft-deleted users appearing in experts and reviewers selectors
- Fixed hyperlink workflow rules and Tags/Tier field ambiguity
Data Quality and Profiler
- Fixed test-case suite search membership preservation
- Fixed tier and certification filter queries in Data Quality dashboard
- Fixed incident manager status and severity chip behavior
- Fixed
TableColumnCountToBeBetweenAPI responses - Fixed column profile percentages showing 0% for zero proportions
- Fixed
tableCustomSQLQueryignoringcomputePassedFailedRowCountflag - Fixed orphan test cases breaking search indexing
- Fixed sample randomization at 100% sample
Ingestion and Connectors
- Fixed single bad table aborting entire schema ingestion run
- Fixed Snowflake and OpenMetadata socket waits causing silent hangs
- Fixed Power BI lineage buffer flushing, TSQL
Sql.Databaseparsing, and workspace cache scope - Fixed Databricks nested column descriptions and SQLAlchemy 2.x compatibility
- Fixed Databricks and Unity Catalog valueless tags being silently dropped
- Fixed Datalake JSON columns typed as string for empty dict values
- Fixed MySQL profiler median query quoting and deterministic behavior
- Fixed Redshift interval, numeric, and timestamp precision parsing, view definition, IAM auth, and LISTAGG errors
- Fixed Oracle, MSSQL, Athena, and Redshift profiler under SQLAlchemy 2.0
- Fixed dbt column tags, snapshot model patching, compiled-only test results, and test entity links
- Fixed SQL Server temporal-table period columns classified as PII
- Fixed SQLAlchemy engine resource leak on multi-database source iteration
- Fixed ADLS object counts scoped to configured sub-path
- Fixed PII recognizer selection based on configured language
- Fixed runtime spaCy model loading for non-root containers
UI and UX
- Fixed unknown service categories returning 404
- Fixed Explore page column icon display, search term warnings, and text overflow
- Fixed lineage edge misalignment, edge hover, temporary lineage table nodes, and service nodes
- Fixed table constraints UI and cluster-key constraint display and editing
- Fixed dotted custom-property names display
- Fixed custom relation badge color handling and overlapping badges
- Fixed activity feed, task notification refresh, and approval task rendering
- Fixed MSAL and SAML token renewal and Safari SSO session loss
- Fixed copy-to-clipboard in non-secure contexts
- Fixed charts not deleted when parent dashboard or service is deleted
- Fixed
column.extensionvalues silently dropped on entity creation
Security and Dependencies
- AWS SDK pinned to 2.41.30 — clears CloudFront CVE
- Airflow upgraded to 3.2.1 — clears 7 CVEs
- gnutls, libcap, openssh, and rsync CVEs closed in ingestion Docker images
- Test-connection workflow triggers now require authorization
- Python ingestion: explicit
jsonifyat route level to break XSS taint chain - Axios, dompurify, follow-redirects, and related UI CVE fixes
- Jetty and pac4j upgraded for Java-side CVEs