What OpenMetadata data contracts do and when teams need them
OpenMetadata data contracts record what a producer promises about a table, topic or data product: its schema, its owner, its quality expectations and its freshness or SLA target. The platform can then track whether those expectations hold, so the contract stays a current reference for both sides. Data platform and governance leads usually need one when producers and consumers describe the same asset differently, for example when a column type changes without notice, a dashboard reads a table that nobody clearly owns, or a finance report assumes data is loaded by a certain hour.
A contract is worth writing when the cost of a disagreement is higher than the cost of agreeing on terms. Lineage is the first check. OpenMetadata supports table, column, dashboard, pipeline and metric lineage with OpenLineage event integration, so you can see which downstream assets depend on a candidate table before you set its expectations. Quality tests and freshness checks then give the contract something measurable to enforce. Start with assets that have several consumers or feed regulated or customer-facing reporting, and get the producing team to name an owner who accepts schema and SLA changes in writing.
OpenMetadata is released under the Apache License 2.0, so teams can review the code and self-host the service in their own infrastructure. The REST APIs and Python SDK let engineers create and update contract definitions from the same repositories and pipelines that build the tables, so changes can go through the same review as pipeline code. Before you commit to a design, confirm how contracts are exchanged in the ODCS format and how execution results appear in the version you deploy. OpenMetadata 2.0.0 was released on August 24, 2026, with maintenance releases 2.0.1 to 2.0.5 following, so check the 2.0 release notes and your target patch level before you write a standard.
Not every table needs a contract. Each one adds an owner to maintain it, checks that run on every load, and a review step when the schema changes, so the decision is a trade-off. Ask each proposed owner who responds when a check fails and how long consumers have to object to a breaking change. Teams that set up a maintained glossary and clear domain ownership first usually find the owner question easier to answer. A practical first step is a pilot on a small set of assets, with a written record of each contract breach, its cause and the team that resolved it.
Contract scope and configuration choices that change the build
This table compares the choices that shape an OpenMetadata data contract program: what a contract covers, which expectations it holds, how results are reviewed, whether ODCS is exchanged, and how contracts are authored. Read each row for when the option fits and what it asks of your owners and engineers. Confirm which features are open source and which are Collate commercial features before you fix the design.
| Decision | When it fits | Ownership effort |
|---|---|---|
| Scope: table | Fits a small set of critical tables with clearly named producers and consumers. | Lowest effort, but consumers of untracked tables stay exposed to upstream changes. |
| Scope: topic | Fits streaming producers where message schemas change and consumers depend on them. | Each topic needs a named owner who signs off schema changes and reviews failures. |
| Scope: data product | Fits domain teams that publish a bounded set of assets as one unit to other teams. | Highest coordination cost, since domain owners must agree on expectations across several assets. |
| Expectations: schema and ownership | Fits producers that change columns often and consumers that break on silent drift. | Moderate effort to keep schema definitions and owners current after each source change. |
| Expectations: quality tests and freshness | Fits consumers that depend on completeness or recency, with pipeline timing that supports checks. | Thresholds need business sign-off, and tests need tuning as data volumes and patterns change. |
| Execution results review | Fits teams that run contract tests on a schedule and route failures to named owners. | Ongoing triage time. Confirm alerting and notification options in open source and in Collate features. |
| ODCS import and export | Fits contracts that must move to or from other tools or be shared with external parties. | Field mapping and testing. Confirm the ODCS version supported and which fields round-trip before committing. |
| Authoring: UI | Fits small contract counts and business owners who edit expectations directly. | Low setup effort, but review and version history are manual and harder to audit at scale. |
| Authoring: REST API and Python SDK | Fits contracts generated from source repositories or pipeline code and kept under version control. | Engineers build and maintain scripts. Pin SDK versions to the server release and retest after each upgrade. |
How a data contract is checked against live data
A data contract in OpenMetadata is a set of expectations attached to a table, topic or data product. The checking itself does not happen inside the contract object. OpenMetadata evaluates those expectations against metadata and test results it already holds for the asset. That metadata arrives through connectors that read schemas and ownership from your sources, through data quality tests and profiling that measure the data, and through freshness checks that show when the data last changed. Before go-live, your team should map each contract clause to the source of evidence that will prove it, such as a schema comparison, a named quality test or a freshness signal. A clause with no evidence source will never show a pass or a fail.
Confirm the trigger model before you commit to any service levels. Ask the vendor and test in your own environment how often contract checks evaluate, which events trigger them (a scheduled ingestion run, a completed test suite, or a manual action), and how far results lag behind the data they describe. Those answers decide whether a freshness expectation can meaningfully detect a late load. Also confirm whether a failed expectation changes the state of the contract only, notifies people, or stops downstream work. In most catalog-centric setups it reports, and any blocking has to be built separately in your orchestration or deployment tooling. Treat that as an open question until your own test shows otherwise.
Results are visible in the OpenMetadata user interface on the contract and on the asset it governs, and they can be read programmatically through the REST APIs and SDKs. Because the platform is open source and self-hosted, your team controls who can view and edit contracts, which is set by the roles and authentication model you deploy. Plan who reviews a failing expectation. The ownership assigned to the table or data product is the natural first recipient, so confirm that owners are set on every governed asset, that owner records are current, and that the notification path (in-app, email or an integration you build) reaches a person who can act within your incident process.
A practical test before production is to take one table with a known defect, such as a missing column or a stale load, and follow it end to end. Record which metadata or test result changed, how long the contract took to reflect it, who was notified and whether anything downstream was affected. Repeat with a passing case so you know the baseline. This exercise gives you the evidence needed to set expectations for data owners and to decide whether any failure should move from reporting to enforcement. Quality work is usually the largest effort driver here, because each expectation needs a maintained test behind it, and that work recurs as schemas and pipelines change.
How to set up data contracts on one pilot asset first
This sequence takes one table from a connected source to a data contract that is tracked, executed and exchanged in ODCS format. Working on a single pilot asset lets your team check the contract model, ownership and test results before extending the pattern. Each step closes with a check you can run yourself.
Confirm version and deployment target
Check the OpenMetadata version you plan to run against the prerequisites for your deployment target. For bare metal, that means Java 21, MySQL 8.0.42 or later or PostgreSQL 15 or later, and Elasticsearch 9.x or OpenSearch 3.x, along with the minimum sizing in the deployment documentation. If you are moving from a 1.x release to 2.0.0 or later, review the breaking changes first, including migrating Great Expectations to 1.3 before upgrading. Docker is suited to a local trial, not a production target. Done when your team has a written record of the version, the platform and each prerequisite marked as met or open.
Connect the source system through its connector
Confirm in the connector list that OpenMetadata supports your source system, its version and the authentication method you plan to use. Create a service connection with a read-only account scoped to the schema that holds the pilot table. Store credentials in the secrets mechanism your platform team approves, and keep them out of plain configuration files. Done when the connection test passes in the OpenMetadata interface and the service appears in the catalog with only the pilot schema in scope for ingestion.
Assign owners and domains
Set an owner and a domain on the pilot table and its schema so the contract has an accountable party. Use the domain structure your governance team has agreed, and confirm with them whether the pilot belongs under an existing domain or a new one. Owners should be named teams or individuals who can approve schema changes and changes to quality expectations. Done when the table page shows the owner and domain, and a user from the owning team can open the asset and edit its metadata.
Author a contract on the pilot table
Create a data contract on the single pilot table. Declare the expected schema, the owner and the consuming teams who rely on the table. Limit the first version to the columns consumers depend on most, so the team can review every declared field. Confirm which contract states your version supports before you save. Done when the contract is saved and the declared columns match the table as ingested, with no declared column missing from the source.
Attach quality tests and freshness expectations
Add a small set of data quality tests to the contract, such as required-value or uniqueness checks on key columns, and set a freshness expectation that matches how often the upstream process loads the table. Agree the thresholds with the consuming team in writing before you enable them. Check that each test refers to a column or table the contract declares. Done when every test and freshness expectation appears in the contract with an owner, and the consuming team has signed off on the thresholds.
Run ingestion and confirm execution results
Run metadata ingestion for the pilot service, then run the profiler or test execution that feeds the contract. Open the contract's execution history and confirm that each test records a result, a timestamp and a status. If a test has no result, check the ingestion logs and the connection before changing any thresholds. Done when results appear in the contract view for at least one complete run, and you can trace each result to the job that produced it.
Round-trip the contract through ODCS export and import
Export the pilot contract in Open Data Contract Standard (ODCS) format, then import that file into a second environment or a clean test instance. Compare schema, ownership, quality expectations and freshness settings in the imported contract with the original. Confirm which fields survive the round trip in your version, since the export format may not carry every OpenMetadata-specific setting, and record any gaps. Done when the two contracts match on every field the pilot relies on and the gap list is written down for the team to decide on before any expansion.
Who can change a contract and how that change is controlled
A data contract is only as trustworthy as the controls around it. Who authors, approves and edits a contract, how users sign in, where connector secrets live, and how every change is recorded all determine whether the contract can serve as evidence. Decide these points before the first contract goes live.
Authoring and approval roles
Decide who can create a contract, who must approve it, and who may edit one after it becomes active. Contracts attach to tables, topics and data products, so the owners of those assets are the natural authors, while a separate reviewer group should approve changes to schema, quality or SLA expectations. Map these roles to your existing ownership model instead of building a parallel one. Confirm in your OpenMetadata version which permissions govern creation, approval and editing, and test each role with a non-admin account before go-live.
Identity model chosen before rollout
OpenMetadata documents SSO with providers such as Okta, Azure, Google, Keycloak and custom OIDC, but it does not support running SSO and basic authentication at the same time. Choose the identity model before rollout, because switching later means moving existing local accounts, bot identities and integrations onto the new scheme. Confirm how the service accounts used by ingestion and contract automation will authenticate under SSO, and document an administrator break-glass path for when the identity provider is unavailable.
Secrets for source connectors
Connectors that profile data or run contract checks need credentials for warehouses, pipelines and other source systems. Keep these credentials in a secrets store you operate, scope each one to read-only access where the source supports it, and rotate them on a schedule your security team sets. Confirm which secrets backends your deployment supports and who may view or change connector credentials, since a contract author should not automatically be able to read them.
Recording contract edits and results
Contract edits, ODCS files and execution results are the evidence that auditors and data owners will ask for. Decide where each one is kept: OpenMetadata's stored versions, exported ODCS files in your version control system, and the results of each contract run. Require a review step for changes to thresholds, owners or SLA terms, and record who approved each one. Confirm which events the audit trail captures in your version before relying on it as evidence.
Exporting history before a 2.0 upgrade
OpenMetadata 2.0.0 was released on August 24, 2026, and its breaking changes can affect ingestion and credentials. Among them are moving embedding credentials into an llmConfiguration block, a new Databricks auth format, and rebuilt custom ingestion images for Python 3.12. Export contract definitions and their history before upgrading, and store the export outside the environment being changed. Test the upgrade on a non-production copy and confirm that connector credentials still resolve afterwards.
Who keeps data contracts accurate after go-live
Data contracts drift from reality the moment a producer changes a table, renames a column or moves a pipeline, so the operating question is who is accountable for each contract after go-live. Decide this before the first contract is published. Each contract needs a named owner, normally the producing team, who is responsible for updating the schema, quality expectations and SLA terms when the underlying asset changes. In OpenMetadata, the contract sits on a table, topic or data product, and that asset already carries an owner, a domain and glossary terms. Treat those existing assignments as the starting point for contract ownership rather than inventing a parallel list that someone must keep in sync.
Schema changes need a defined path from the pipeline to the contract. When a producer alters a column, the contract's schema section no longer matches the asset unless someone edits it. Confirm whether your change process requires the owner to update the contract in the same change request as the schema migration, and whether a failed schema validation blocks deployment or only raises a notice. Ask the platform team who receives those notices and whether they land in a shared channel or a personal inbox. Teams often find that the producer owns the change but a platform engineer sees the failure first, so write the handoff down.
Quality and SLA breaches need a named reviewer and a response window. Test results from data quality tests and freshness checks are recorded against the contract, but recording a failure does not decide who acts on it. Confirm which role triages a breach, whether that is the contract owner, the domain steward or an on-call data engineer, and how the breach is routed to them. Agree on the review cadence for accepted breaches, such as whether a sustained freshness miss triggers a formal review of the SLA itself. Verify these settings in your own environment, including how your notification channels are configured, because alert routing depends on your chosen integrations and cannot be assumed from the product documentation alone.
Expired and orphaned contracts are the quietest failures. A contract outlives a team reorganization, a deprecated table or a departed owner, and it keeps reporting status that nobody reads. Set a rule that every contract has an active owner and a review date, and assign a domain steward to reassign or retire contracts when an owner leaves. Use the domain and glossary structure to find contracts whose owners no longer hold the domain role. The steward should also decide what happens to contracts on deprecated assets, since consumers may still depend on them.
The recurring workload is the part most often left unstaffed. Plan for a named steward per domain, time for owners to review contract changes and breaches, and someone who runs periodic checks for orphaned or stale contracts. The effort grows with the number of contracted assets and with how often those assets change, so ask your team to estimate both figures for the first year. Those inputs, not the initial build, usually set the ongoing staffing level. Ask any implementation partner to show how they will size this workload and who inside your organization will perform each recurring task after handover.
Limits to confirm before you commit to data contracts
Data contracts depend on details that vary by release, connector and edition, so some features you plan around may not be available to you. The cards below list what to verify before you commit, from asset coverage and exchange formats to enforcement and licensing.
Asset types that accept contracts
Contracts attach to tables, topics and data products, but the list of entity types that accept a contract in your OpenMetadata version may be narrower. Check each asset type your teams publish, such as dashboards, pipelines or ML models if you plan to contract them, against the release you will run. Ask for a test contract on each type during the proof of concept, and record which ones fail to save or validate.
ODCS version for import and export
Contracts exchanged in the Open Data Contract Standard format depend on which ODCS version your release reads and writes. Confirm the version for import and for export separately, since a file exported by one tool may not import cleanly into another. Run a round trip on a representative contract, including its schema, quality and SLA sections, and compare what comes back with what went in.
SLA expectations enforced or reported
Confirm whether an SLA expectation in a contract blocks anything, alerts an owner, or only appears as a status in the catalog. If the release does not enforce SLAs, pausing pipelines or failing a publish becomes an engineering decision you must design and test yourself. Write down which SLA checks produce a notification, who receives it, and what happens after a breach is recorded.
Connector coverage for your stack
The project lists more than 130 connectors. Treat that count as a starting point for coverage checks, and map each warehouse, transformation tool, orchestrator and streaming system you run to a specific connector. Then check that connector's documented scope and stage, and confirm it supplies the metadata and quality signals your contracts depend on, such as schema, freshness and test results.
Open source and commercial boundaries
OpenMetadata is released under the Apache License 2.0 and maintained by Collate, which also offers commercial enterprise capabilities and premium support. Before you design contract workflows around a feature, confirm whether it sits in the open-source release or in Collate's commercial offering. Request the feature list, support terms and licensing that apply to your deployment in writing.
What data contracts cost to implement and what the work needs from us
How much does it cost to implement OpenMetadata data contracts?
No price applies without a written scope, because DeployOpen does not publish a price list and a quote follows from the agreed work. The main cost drivers are the number of contracted assets, the number of source systems feeding them, how deep the quality tests go, how complex the governance workflow is, and how ownership is divided. OpenMetadata is released under the Apache License 2.0, so the software itself carries no license fee from the project, but infrastructure, internal staff time and implementation effort are costs you still carry. Ask any partner to price one-time work (design, connector setup, contract authoring, testing and cutover) separately from recurring work (hosting, upgrades, contract maintenance and support).
What makes a data contracts project take longer to deliver?
Duration grows with the number of contracted assets, the number of source systems, and how many owners must agree on each contract before it is enforced. Quality test depth matters too: schema and freshness checks move faster than profiling-based rules that need tuning against your own data. Governance workflow complexity adds review cycles, approval steps and role design. Dependencies on your platform team, such as provisioning hosts or a Kubernetes cluster, database and search services, and identity integration, often set the pace at the start. Ask for a schedule with milestones tied to named owners and written acceptance criteria, and make sure each driver appears as a visible line item in the scope.
What does the work need from our data owners and platform team?
Data owners need to define each contract's schema, quality expectations, SLA targets and business meaning, and to approve changes to those terms. The platform team needs to provide hosts or cluster capacity, network paths to source systems, database and search services, identity provider configuration, secrets handling and backup targets. Owners should expect review sessions and formal sign-off on contract terms. Agree early on who handles access requests and who receives alerts when a contract check fails. Request a written responsibility matrix in the scope document that lists each deliverable, the person who signs it off, and the date their input is due.
Can our internal team implement OpenMetadata data contracts alone?
Yes, an internal team can do the work if it has the skills and time, because OpenMetadata is open source and documents REST APIs, a Python SDK, TypeScript packages and Java libraries. The harder parts are infrastructure operations, connector configuration across many sources, contract design that data owners will accept, and upgrades. OpenMetadata 2.0 includes breaking changes, such as a new credential layout for embedding settings and a Great Expectations migration to 1.3 before upgrading, so an upgrade needs a tested plan. Many teams build the platform in-house and bring in outside help for specific connectors, testing or upgrade planning. Write down the split of work and confirm who will own the platform after go-live.
What infrastructure does OpenMetadata need before a data contracts rollout?
Start from the documented bare metal prerequisites: Java 21, MySQL 8.0.42 or later or PostgreSQL 15 or later, and Elasticsearch 9.x or OpenSearch 3.x. The documented minimum server sizing is 2 vCPUs, 4 GB RAM and 20 GB storage, and the database and search services each need at least 2 vCPUs, 2 GB RAM and 30 GB storage. These figures are minimums, not sizing for your contract volume, so confirm capacity with the vendor documentation and your own load tests. OpenMetadata also documents production deployments on Kubernetes (AWS EKS, Azure AKS, Google GKE and on-premises clusters) and on bare metal. Plan backups, single sign-on and network access to your sources before go-live.
What recurring work follows go-live for OpenMetadata data contracts?
After go-live, recurring work includes reviewing failed contract checks, updating contracts when schemas or SLA targets change, onboarding new assets, and handling access and ownership changes. The platform also needs regular upgrades. OpenMetadata 2.0.0 was released on August 24, 2026, with maintenance releases 2.0.1 to 2.0.5 following about every one to two weeks, so plan a patch cadence and keep a test environment for each release. Connector updates, identity configuration, database and search maintenance, and backup checks also recur. Ask the partner for the support model in writing, whether ongoing work is a retainer or billed per request, and what is excluded.
Which points should a written scope cover for data contracts work?
The scope should list the contracted asset set, the source systems and connectors in use, the quality test scope, the governance workflow steps, the ownership model, and the OpenMetadata version and deployment target assumed. It should also state explicit exclusions, client inputs with due dates, acceptance tests, handover documentation and recurring support terms. Ask how cost is split between one-time build and recurring operations, and how change requests are priced. Confirm who holds administrator credentials at handover and whether runbooks are included. DeployOpen works on fixed-scope engagements agreed in writing before work starts, so the scope document is where these points should be settled.
How DeployOpen scopes, delivers and supports OpenMetadata contracts
DeployOpen plans, builds and supports OpenMetadata data contracts inside infrastructure you control, so schema, ownership, quality and SLA expectations are defined, tested and tracked where your data already lives. Work starts from a written scope that names the tables, topics and data products in play, and it ends with contracts your owners can maintain without us.
How we scope
- Inventory the tables, topics and data products that need a contract, and name an accountable owner for each.
- Agree which schema, quality and freshness expectations become contract terms, and which stay as documentation.
- Confirm the OpenMetadata deployment model, versions and connectors the contracts depend on before build starts.
How we build
- Define contract schemas and expectations in OpenMetadata, then map each one to the test cases that check it.
- Connect contract checks to your pipelines and document the expected behavior when a check fails.
- Test contract execution and status reporting in a non-production environment before any production rollout.
How we hand over
- Deliver a runbook covering contract authoring, review, change approval and how results are read.
- Provide an export of contract definitions in ODCS format, with a short note on how it is exchanged.
- Walk your data owners and platform team through the contracts and the procedure for updating them.
How we support
- Offer ongoing support, upgrades and continuous testing as a retainer, separate from the fixed-scope build.
- Plan OpenMetadata upgrades with a review of contract-related changes in each release before rollout.
- Ask any support provider to confirm response expectations and coverage in writing before you sign.

