Changelog
OpenMetadata 1.12.8 is a maintenance release focused on hardening the platform against newly disclosed CVEs, eliminating long-standing database hotspots in the search and tag pipelines, and tightening connector behavior across Databricks, Unity Catalog, Athena, Datalake, and OpenLineage. The release also lands several quality-of-life UI fixes around governance approvals, advanced search, and custom properties.
⚠️ Backward Incompatible / Notable Behavior Changes
- Notification alerts —
Locationsource removed #27683: The deprecatedLocationentity has been removed from the list of supported sources in notification alerts.DomainandData Productare now first-class sources. Existing alerts configured againstLocationwill need to be re-created against a supported source. ContainerResourcedefault fields trimmed (#27894 follow-up):childrenis no longer returned by default onGET /v1/containerslist responses; clients that depended on the implicit inclusion must request it explicitly via thefieldsquery parameter. This restores the documented behavior and unblocks the batched data-model column tag retrieval below.- Soft-deleted users excluded from Experts/Reviewers #27120: Users marked
deletedno longer appear in the Experts/Reviewers selector across entities. Workflows that relied on soft-deleted users remaining visible (for example, restoring an entity to its previous reviewer) must restore the user first.
🔒 Security (Vulnerability Remediation)
This release addresses the May 8 2026 Snyk scan against the 1.12.7 branch and additional CVEs picked up by AWS Inspector. Nine of the highest-severity findings are resolved through direct version bumps; one (libthrift) is force-pinned because upstream Jena has not yet rebased.
Backend / Java
- CRITICAL — Jetty HTTP Request Smuggling (CVE-2026-2332):
org.eclipse.jetty:jetty-httpbumped12.1.6 → 12.1.7#27996. - HIGH — Apache Thrift (CVE-2026-43869):
libthriftforce-pinned to0.23.0viadependencyManagementto override the vulnerable transitive shipped byapache-jena-libs#28010 / #28035. - HIGH — PostgreSQL JDBC SCRAM-SHA-256 DoS (CVE-2026-42198):
org.postgresql:postgresqlbumped42.7.7 → 42.7.11#27996. - HIGH — BouncyCastle Crypto Signature Bypass + Timing Attack (CVE-2026-5598):
bcprov-jdk18on/bcpkix-jdk18onpinned to1.84, also addressing CVE-2026-0636 and CVE-2026-5588 #27996. - HIGH — Apache Log4j (CVE-2026-34477, CVE-2026-34478, CVE-2026-34480):
log4jbumped2.25.3 → 2.25.4#27994. - MED — Jackson 3.x deserialization CVEs (GHSA-72hv-8253-57qq):
jackson-corebumped2.17.2 → 2.18.7.jsonschema2pojo-coreis now declared<scope>provided</scope>in thecommonmodule so the Jackson 3.x transitive is excluded from the runtime classpath, since the annotators it powers only run at build time #28010. - MED — jsonschema2pojo (CVE-2025-3588):
jsonschema2pojobumped1.2.2 → 1.3.0(later aligned to1.3.1to resolve a maven-plugin classpath issue) #27994. - MED/LOW — Logback (CVE-2025-11226, CVE-2026-1225):
logback-core/logback-classicbumped1.5.19 → 1.5.25#27996. - Netty:
netty-bombumped4.1.132 → 4.1.133.netty-transport-native-epollexcluded (Linux-only perf optimization flagged by an overly-broad GHSA range, not used at runtime) #27994 / #28010. - Azure Identity (CVE-2024-35255):
azure-identityaligned to1.15.2andazure-keyvaultbumped to remove vulnerable transitives #27994 / #28010. - Reactor Netty & Spring:
reactor-nettyandspringbumped to their current patched lines #27996 / #28010.
Frontend / UI
- axios upgraded to
1.15.2to clear reported CVEs in the UI bundle. - postcss pinned to
8.5.10with a Yarnresolutionsoverride inopenmetadata-ui-core-componentsto resolve the Dependabot advisory #27778. - postcss bumped in the main UI module as well #27729.
Ingestion / Container Images
- ImageMagick purged from the ingestion image — it was only a transitive of the Airflow base image, was never used by ingestion code, and continued to surface CVEs after Airflow upgrades. Removing it eliminates the surface entirely #27752.
🎨 UI Changes
Improvements
- Approvals show proposed changes inline #27201: Governance approval task threads now render a Proposed Changes section with clickable entity links, so reviewers can see exactly what changed before approving instead of opening the entity in a new tab.
- Description added to Advanced Search query builder #27913: The
descriptionfield is now a first-class searchable attribute withContains,Not Contains,Is Null, andIs Not Nulloperators. ThedescriptionStatuslabel was also corrected (previously rendered with the wrong key). - Service documentation panel: admonitions + code copy button #27732: The in-product service docs now render note/warning/tip admonitions and add a copy button to fenced code blocks.
Fixes
- Clipboard works on non-secure (HTTP) contexts #28003:
CodeBlockComponentnow uses theuseClipboardhook, which falls back todocument.execCommandwhen the modern Clipboard API is unavailable, fixing copy actions for users on self-hosted HTTP deployments. - Custom properties with dots in their name now display #27390: The UI was treating
.in custom-property names as a path separator, hiding the property entirely. Names with dots are now rendered correctly. - Tier/Certification tag matching uses FQN prefix, not substring #27700: Prevents unrelated tags whose FQN happened to contain a tier or certification tag's FQN from being mis-classified.
- Upvote/Downvote icon retains primary color after blur #27898: The vote indicator no longer reverts to a neutral color when the entity page loses focus.
- AdvancedSearch description option — translations #27961: Missing/incorrect i18n strings on the new description operator filled in across supported locales.
- Rich-text editor migration #26887: Removed
@toast-ui/react-editorand migrated remaining usages to the in-houseBlockEditor, reducing bundle size and eliminating the transitive CVE surface from the abandoned editor package. - ContainerPage tab counts now update reactively: Added
childrenCountto theuseMemodependency array so tab badges refresh when children load.
🔌 Connectors
Databases
- Databricks — nested column descriptions + SQLAlchemy 2.x #27766: Descriptions on STRUCT/MAP/ARRAY-typed nested columns are now captured during metadata ingestion. The connector is also compatible with
sqlalchemy-databricksrunning on SQLAlchemy 2.x. - Unity Catalog — missing
httpPath#27844: The connector no longer hard-fails whenhttpPathis omitted; it now produces a clear configuration error instead of an opaque stack trace. - Athena — Iceberg table properties #27715: Iceberg-on-Athena tables now ingest table properties from the
$propertiesmetatable, surfacing Iceberg-specific metadata (format-version, write.target-file-size-bytes, etc.) in OpenMetadata. - PostgreSQL / MSSQL — mutual TLS #27104: Both connectors now support client-certificate mTLS in addition to server-side SSL, matching enterprise PG/MSSQL hardening requirements.
- PostgreSQL — tag_usage seq-scan eliminated #27824: Backport of #27158. The certification tag query now uses the covering index instead of a sequential scan, removing a multi-second hotspot during Data Insights runs on large catalogs.
- SQLAlchemy 2.x row access #27643: Replaced old-style row indexing that emitted deprecation warnings on SQLAlchemy 2.x.
Datalake / Object Stores
- Datalake — nested arrays of structs in JSON #27798: Array-typed fields whose elements are nested structures are now parsed correctly and surface as proper nested column schemas.
Pipelines / Dashboards
- Power BI — additional lineage logging #27970: More granular diagnostic logs in the Power BI lineage extractor make customer-side debugging substantially faster.
OpenLineage
- AWS Glue, Kusto, and Cosmos DB dataset naming #27533: Adds dataset-naming support so OpenLineage events from these sources are resolved to the correct OpenMetadata entities.
- Namespace-based DB service resolution for
db_table#27005: OpenLineagedb_tablelookups now resolve to the right DB service by namespace, fixing cross-service lineage gaps. - Pipeline/job resolution by integration type #26821: OpenLineage pipelines and jobs are now mapped to their integration type so they show up under the correct pipeline service.
AI / Vector Embeddings
- OpenAI embedding concurrency control #26574: Adds a configurable concurrency cap on outbound OpenAI embedding HTTP requests, preventing rate-limit storms during bulk reindex.
Ingestion Runtime
- Bulk sink OOM under persistent flush failures #26838: The bulk sink no longer accumulates an unbounded retry buffer when downstream flushes keep failing; the buffer is now bounded and drops with a clear error.
- CronOMJob tolerations propagated #27955: Pod tolerations defined on a
CronOMJobare now copied to the scheduledOMJob, so taint-isolated nodes keep working after a restart. - PII recognizer language scoping #27919: PII recognizers are now included based on the configured language, eliminating false positives from recognizers loaded for unrelated locales.
dbt-extractorpinned>=0.5.0#27777: Prevents the ARM-on-pip resolver from falling back to a source distribution that fails to build inside the ingestion container.
🛠 API (Backend)
Improvements
- Reindex memory optimization for DatabaseSchema #27723 / #28061:
DatabaseSchemaIndexnow skips thetablesfan-out during reindex, reducing memory pressure on catalogs with very large schemas. All other entity indexes hydrate the full field set as before. - SearchUtils consolidated; fuzzy ngram removed #27636: Merged the duplicated SearchUtils classes into one and dropped the redundant fuzzy match on ngram-tokenized fields (fuzzy + ngram compounded false positives). Adds substantial unit-test coverage.
- Certification tag batch query — source filter + indexed hash prefix #27847: The
TagUsageDAO.getCertTagsInternalBatchquery previously did atagFQN LIKE 'Certification.%'scan and ran ~12s per call on heavy classification hierarchies. With asourcefilter and a hash-prefix predicate it now uses the covering index — eliminating ~19 hours of cumulative DB time per Data Insights run on a representative customer instance. - Container data-model column tags — batched #27894: Replaces per-column tag lookups with a single batched query.
IndexResourcelogs lowered to debug #27588: Reduces production log noise; verbose index lifecycle logs are now gated onDEBUG.
Fixes
DataContract400 on entities withoutdataProducts#27861: The endpoint now handles entities that don't carry adataProductsfield, instead of rejecting the request./searchendpoint for Roles #27335: Adds the missingGET /v1/roles/searchendpoint and aligns role selectors to use server-side search #27737.- MCP — SSE response when client negotiates
text/event-stream#27917: The MCP endpoint now correctly returns an SSE-framed response when the client'sAcceptheader asks fortext/event-stream. - MCP OAuth on Databricks #27922: Fixes the OAuth callback handling specific to Databricks-backed MCP clients.
- Time-series reindex — stale
parentOfis a warning, not a failure #27800: During time-series reindex, an orphanedparentOfreference no longer aborts the run; it's logged as a warning and the reindex continues. - Column bulk-ops search at scale #27216: Bulk operations on columns now return results consistently on large indices where the previous code path silently returned an empty set above a query-size threshold.
- OpenSearch HC5 transport — recoverable I/O reactor shutdown #27698: Transient
I/O reactor has been shut downerrors are now recovered automatically instead of leaving the client in a permanently failed state. - Vector embedding healthcheck #27616: The
/healthprobe now correctly reflects vector-embedding subsystem availability instead of always reporting healthy. - CSV import — recursive extension validation + row-count accounting #27593 / #27669: Recursive imports now validate
entityTypeper row correctly and the post-import row counts match the file. TableColumnCountToBeBetweenAPI response #27900: The Data Quality endpoint now returns the expected response shape for this test.- Hyperlink workflow rules —
.keywordsuffix + Tags/Tier disambiguation #27799: Workflow rule conditions referencing tags/tier no longer match on the analyzed text field; they bind to.keywordso prefix collisions between Tags and Tier are resolved.