FLUIDFLUID
  • Introduction
  • Quickstart
  • Why FLUID
  • FAQ
  • What FLUID Is
  • Core Principles
  • Agentic-Native Layer
  • FLUID vs ODCS / ODPS
  • Anatomy
  • Cheatsheet
  • Full Specification
  • Versions
  • JSON Schema 0.7.5 ↗
  • Reference (HTML) ↗
Examples
How-to
What's New
Deck
GitHub
GitHub
  • Introduction
  • Quickstart
  • Why FLUID
  • FAQ
  • What FLUID Is
  • Core Principles
  • Agentic-Native Layer
  • FLUID vs ODCS / ODPS
  • Anatomy
  • Cheatsheet
  • Full Specification
  • Versions
  • JSON Schema 0.7.5 ↗
  • Reference (HTML) ↗
Examples
How-to
What's New
Deck
GitHub
GitHub
  • Schema Reference

    • Schema Reference
    • Schema Anatomy
    • Schema Cheatsheet
    • Fluid Protocol Specification
    • Minimal Contract & FLUID at a Glance
    • Schema Versions
    • Changelog

Fluid Protocol Specification

Latest schema version

The latest published JSON Schema is 0.7.4. This page is the narrative protocol specification; for the version-specific, field-by-field reference see the Cheatsheet, the Anatomy, and the Versions index (raw JSON Schema + generated HTML per version).

This document provides the complete, official specification for the FLUID (Federated Layered Unified Interchange Definition) protocol. It is intended for data architects, platform engineers, and developers who are building the next generation of data infrastructure, as well as for vendors seeking to make their tools compliant with this open standard.

The Strategic Imperative: A Protocol for the Agentic Era

The contemporary enterprise is shifting from process automation to an Agentic Ecosystem, where autonomous AI agents drive operations with unprecedented speed and intelligence. This paradigm shift, enabled by communication standards like the Model Context Protocol (MCP), exposes a foundational vulnerability in modern data architecture: the lack of a common language for defining, governing, and interacting with data assets.

Today's data landscape is a fragmented collection of imperative pipelines, siloed tool configurations, and implicit knowledge. This static, brittle foundation cannot support the dynamic, real-time demands of an agentic workforce. Agents require a data fabric that is not only accessible but also discoverable, trustworthy, and context-aware.

FLUID is the standard designed to create this fabric. It addresses this challenge by providing a declarative, universal protocol for defining Data Products. It is the missing piece of the puzzle, serving as the foundational layer that makes an organization truly MCP-ready. While MCP standardizes how agents communicate, FLUID standardizes the trustworthy Data Products they communicate with.

What is FLUID?

FLUID is an open, declarative specification, written in YAML and managed in version control. It is not a platform or a single tool, but a shared language that enables a decentralized ecosystem of compliant tools to work in concert.

It re-frames the data lifecycle around the concept of a Data Product: a versioned, autonomous asset with a clearly defined interface, contract, and implementation. By unifying the definition of what a data product consumes (its dependencies), what it exposes (its public interface), and how it is built (its implementation logic), FLUID provides a holistic, auditable, and machine-readable blueprint for every data asset in the enterprise.

This document details the full specification for this protocol, providing the technical foundation required to build the governable, scalable, and agent-ready data ecosystems of the future.

📖 FLUID Data Products is available on Amazon.

🌊 FLUID: Federated Layered Unified Interchange Definition


🧭 Core Principles

  • Data as a Product Data is a first-class asset with a clear owner, a versioned interface, and a machine-readable contract.

  • Declarative, Not Imperative Contracts define the desired end state of a data product. The FLUID-aware framework is responsible for the implementation.

  • Contracts as Code Governance (schema, quality, build, privacy) is embedded directly into version-controlled files, enabling automated, proactive enforcement.

  • Federated Ownership Data products are owned and managed by the domain teams who know the data best, enabling a true, scalable Data Mesh.


🏗️ Contract Structure: Monolithic vs. Modular

The FLUID specification is designed for flexibility. A data product contract can be defined in a single, monolithic file or composed from multiple, specialized files.

Monolithic Structure (For Simplicity)

For simple data products owned by a single team, all definitions can be contained within a single root fluid.yml file.

/dp-simple-product/
└── 📄 fluid.yml   # All definitions are inline.

Modular Structure (For Complexity & Federation)

For complex, enterprise-grade products with multiple stakeholders, the contract can be broken into logical, linked files. This is the recommended best practice.

The root fluid.yml acts as a "table of contents," referencing detailed configuration files stored in a dedicated .fluid/ directory using the $ref keyword.

/dp-complex-product/
│
├── 📄 fluid.yml     # The main entrypoint, contains high-level identity.
│
└── 📁 .fluid/        # A dedicated folder for all contract details.
        ├── 📄 consumes.yml
        ├── 📄 build.yml
        ├── 📄 exposes.yml
        ├── 📄 schema.yml
        └── 📄 quality.yml

Preamble

This document provides the complete, official specification for the FLUID (Federated Layered Unified Interchange Definition) protocol. It is intended for data architects, platform engineers, and developers who are building the next generation of data infrastructure, as well as for vendors seeking to make their tools compliant with this open standard.


1. Specification Root

The FLUID definition is a YAML or JSON file (.fluid.yml OR .fluid.json) with the following root-level objects.

KeyTypeRequiredDescription
fluidVersionStringYesThe version of the FLUID specification this file adheres to (e.g., 0.7.4).
kindStringYesThe type of data product definition. See section 1.1.
idStringYesA globally unique, versioned id for the data product (customer360_v1).
nameStringYesA human-readable name for the data product (e.g., "Customer 360").
descriptionStringYesA brief description of the product's purpose.
domainStringYesThe business domain that owns this product (e.g., "Marketing").
metadataObjectYesIdentification, ownership, and classification information. See section 1.2.
consumesObject / ListYesDefines the input data sources needed to build the product. See section 1.4.
buildObjectYesContains the implementation logic for how the product is built. See 1.5.
exposesObject / ListYesDefines the public output interface(s) of the product. See section 1.3.
accessPolicyObjectNoDefines the static access control policies for the data product. See 1.6.
dynamicPoliciesObjectNoDefines context-aware access policies that adapt at runtime. See 1.7.
operationsObjectNoDefines SLAs, lifecycle, and observability characteristics. See 1.8.
extensionsObjectNoRegisters required external plugins. See section 1.9.

1.1 kind Enumeration

The kind key specifies the nature of the data product.

  • DataProduct: A standard, materialized data asset.
  • VirtualDataProduct: A product that exists only as a logical view or query, without its own physical storage.
  • EgressFlow: A product specifically designed to export data securely to an external system.

1.2 metadata Block

KeyTypeRequiredDescription
ownerObjectYesOwnership details (e.g., { team: 'finance', email: 'finance@company.com' }).
layerStringNoThe architectural layer (e.g., "Gold", "Silver", "Bronze")
statusStringNoThe lifecycle status (e.g., "Published", "Development", "Deprecated").
sensitivity_levelStringNoThe overall data classification (e.g., "Confidential", "Public").
cost_centerStringNoAn identifier for automated FinOps cost attribution.
tagsMap[String]NoKey-value pairs for categorization (e.g., layer: gold, domain: finance).
classificationStringYesDefault privacy level: public, internal, confidential, restricted.
purposeObjectNoDetailed, machine-readable description of the business purpose.
versionStringNo(Recommended) Semantic version of this data product definition (e.g., 1.0.0)

1.2.1 purpose Block

KeyTypeRequiredDescription
business_purposeStringYesA clear statement of why this data product exists.
use_casesListNoA list of specific business use cases it supports.
target_groupListNoThe intended audience for this product.
limitationsStringNoAny known limitations or constraints of the data.

1.3 exposes Block (The Output Port)

Defines the public interface of the data product. This is what consumers interact with.

KeyTypeRequiredDescription
nameStringIf listA unique name for this output port within the product.
locationObjectYesThe physical or virtual location where the data product is materialized. See 1.3.1.
contractObjectYesThe schema, quality, and privacy promises for this output. See 1.3.2.

1.3.1 location Object

KeyTypeRequiredDescription
typeStringYesbigquery, s3, snowflake, gcs, iceberg, api, kafka, or virtual.
connectionStringYesReference to a secret in a vault (e.g., secret:gcp-prod-dwh-key).
formatObjectIf not virtualDescribes the data format (e.g., { type: 'parquet' }).
propertiesObjectYesTechnology-specific properties (e.g., project, dataset, table).

1.3.2 contract Object

KeyTypeRequiredDescription
inheritFromStringNodbt, fluid-product, or openApi. Populates the contract from a source.
model / specStringIf inheritingThe dbt model name or path to the OpenAPI spec file/URL.
schemaObjectYesDefines the columns and data types. See 1.3.2.1.
qualityListNoList of data quality rules to enforce. See 1.3.2.2.
privacyListNoList of privacy classifications and treatments. See 1.3.2.3.
semanticsObjectNoAdds machine-readable meaning to the data. See 1.3.2.4.
1.3.2.1 schema.columns Array
KeyTypeRequiredDescription
nameStringYesColumn name.
typeStringYesData type (STRING, INT64, NUMERIC, TIMESTAMP, JSON, BOOLEAN, DATE).
nullableBooleanNotrue by default.
1.3.2.2 quality Array Item
KeyTypeRequiredDescription
ruleStringYesnot_null, unique, regex_match, in_set, or a custom SQL expression.
columnsListIf applicableColumn(s) to apply the rule to.
pattern/setString/ListIf applicableParameters for regex_match or in_set.
onFailureObjectYesaction (reject_row, quarantine_row, fail_pipeline, alert) and optional notifications.
1.3.2.3 privacy Array Item
KeyTypeRequiredDescription
classificationStringNoPII, SPI, Confidential. Overrides metadata.classification.
columnsListYesColumn(s) to apply the treatment to. Can be ['*'].
treatmentObjectYestype (hashing, masking, encryption, tokenization) and properties.
1.3.2.4 semantics Object
KeyTypeDescription
ontologyStringReference to an external ontology (e.g., URL to an OWL or RDF file).
classificationsListMaps columns to terms in a business glossary or formal ontology.

1.4 consumes Block (The Input Port)

KeyTypeRequiredDescription
typeStringYesgcs, kafka, s3, api, postgres-cdc, sftp, or fluid-product.
nameStringIf type: fluid-productThe dataProduct name of the upstream FLUID definition.
aliasStringIf listA local alias to refer to this source in the build block.
onUpstreamChangeStringNoAction on upstream contract change: fail, alert, triggerRebuild.
connectionStringIf physical typeReference to a secret in a vault.
formatObjectIf physical typeDescribes the data format (e.g., { type: 'json' }).
propertiesObjectIf physical typeTechnology-specific properties (e.g., Kafka topic, API endpoint).

1.5 build Block (The Implementation)

KeyTypeRequiredDescription
engineStringYesThe engine to use: sql, python, dbt, dbt-cloud, spark-sql.
scriptStringYesThe specific asset to execute (e.g., a script path or dbt model selector).
triggerObjectYesDefines how the build is initiated (schedule, event, manual).
runtimeObjectYesThe underlying compute platform where the build will run (airflow, gcp-cloud-run).
dependenciesObjectNoDefines the execution dependencies on other data products.
retriesObjectNoConfiguration for handling transient failures: count, delay.
notificationsObjectNoDefines how to send alerts (channel, target) on onSuccess or onFailure.

1.6 accessPolicy (Static Access)

KeyTypeRequiredDescription
visibilityStringNoDefault discoverability: private, internal.
grantsListYesA list of static, explicit access grants.

1.6.1 grants Array Item

KeyTypeRequiredDescription
principalStringYesThe actor receiving the grant. Format: user:<email>, group:<name>, agent:<id>.
permissionsListYesRights granted: readData, readMetadata, manage.
scopeObjectNoFine-grained access. See 1.6.2.

1.6.2 scope Object

KeyTypeRequiredDescription
columnsListNoAllow-list of columns the principal can view.
rowFilterStringNoSQL WHERE clause for secure view.
privacyViewStringNotreated (default, views post-privacy data), cleartext (views pre-privacy data).

1.7 dynamicPolicies (Adaptive Access)

KeyTypeRequiredDescription
rulesListYesA list of contextual access rules, evaluated in order.

1.7.1 rules Array Item

KeyTypeRequiredDescription
nameStringYesA descriptive name for the policy rule.
conditionStringYesAn expression evaluated against the agent's context. Supports interpolation.
grantObjectYesThe permissions and scope to grant if the condition is met.

1.8 operations Block

KeyTypeRequiredDescription
slaObjectNoDefines the Service Level Agreements for this product. See 1.8.1.
lifecycleObjectNoManages data retention and archival policies. See 1.8.2.
observabilityObjectNoConfigures logging, alerting, and monitoring. See 1.8.3.

1.8.1 sla Object

Defines cost, latency, freshness, accuracy, sustainability, and feedbackSignals.

1.8.2 lifecycle Object

Defines retention (period, condition) and archival (trigger, destination).

1.8.3 observability Object

Defines logging (level, destination) and alerting (onFailure notifications).


1.9 extensions Block

KeyTypeDescription
customTransformationsListA list of custom transformation engines the build requires.
policyEnginesListA list of external policy engines (e.g., OPA) needed to evaluate policies.
observabilityHooksListA list of custom hooks to send metrics and traces to external systems.
Edit this page on GitHub
Last Updated: 5/29/26, 5:26 PM
Contributors: open-data-protocol, doochman, Christopher Ducci, fas89, Claude Opus 4.8
Prev
Schema Cheatsheet
Next
Minimal Contract & FLUID at a Glance