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

Minimal Contract & FLUID at a Glance

Two views of the contract for v0.7.4: the smallest file that validates, and a one-screen map of every top-level block.

FLUID at a Glance

A FLUID contract is one YAML file. The shape below shows every top-level block in v0.7.4, with one-line meaning and the version each was introduced. Required blocks are marked [req]; everything else is opt-in.

fluidVersion: "0.7.4"            # [req] which contract version this file targets
kind: DataProduct                # [req] DataProduct | MLPipeline
id:   domain.layer.name          # [req] globally unique product id
name: "Human-readable name"      # [req] display name
description: "..."               #       business-facing summary
domain: "Finance"                #       owning business domain
tags:   [pii, gold-layer]        #       free-text categorization
labels: { team: analytics }      #       key/value categorization

metadata:                        # [req] only metadata.owner is required
  owner: { team, email }         # [req] team is the one truly required field
  layer: Gold                    #       free-form; convention: Bronze | Silver | Gold

consumes: [ ... ]                #       upstream FLUID products you depend on
exposes:  [ ... ]                # [req] ports you publish (each requires exposeId+kind+contract+binding)
  └── contract                   # [req] schema columns (or openapiRef), dq rules
  └── semantics                  #         ⭐ 0.7.2 — entities, measures, dimensions, metrics
  └── policy                     #         authn, authz, privacy, classification, agentPolicy (⭐ 0.7.1)
  └── mcp                        #         ⭐ 0.7.4 — opt this expose into the MCP output-port gateway
  └── binding                    # [req] where it lives (platform + format + location, + icebergConfig*)

build:                           #       how the product is produced
  pattern: hybrid-reference      #       | embedded-logic | multi-stage | acquisition (⭐ 0.7.3)
  engine:  dbt | sql | python | spark | glue | custom        # transformation engines
           | duckdb | airbyte | meltano | dlt | kafka-connect | debezium   # ⭐ 0.7.3 acquisition
  properties: { ... }            #       pattern-specific (⭐ 0.7.3: acquisitionPattern)

orchestration: { engine: airflow | dagster | prefect | kubeflow | custom | none, tasks: [...] }   # ⭐ 0.7.0+
sovereignty:   { jurisdiction, allowedRegions, deniedRegions, enforcementMode, … }   # ⭐ 0.7.1
accessPolicy:  { grants: [{ principal, permissions, resources, conditions }] }       # ⭐ 0.7.1
retention:     { runState, runLogs, lineage, dlq }                                   # ⭐ 0.7.3
lineage:       { upstream, downstream, fieldLevel }
schemaEvolution: { strategy, compatibility }
machineLearning: { ... }
environments:  { dev: {...}, staging: {...}, prod: {...} }
lifecycle:     { state: preview | active | deprecated | retired }
docs:          { ... }

agentPolicy location

AI/LLM consumption policy lives per-expose under exposes[].policy.agentPolicy — not at the root. (Earlier release notes show it at the top level; the schema has never accepted it there.) As of 0.7.4, when an expose also carries an mcp block, that agentPolicy is enforced at runtime by the Fluid MCP gateway on every read. See Anatomy §7 for the correct shape.

For a one-line-per-field reference with required/optional flags, see the Cheatsheet. For a tour of each block with deep-dive links, see the Anatomy.


Minimal Valid Contract

The smallest file that passes JSON Schema validation against v0.7.4 — every other top-level block is opt-in:

fluidVersion: "0.7.4"
kind: DataProduct
id:   demo.bronze.hello_world
name: "Hello World"
metadata:
  owner: { team: data-platform }
exposes:
  - exposeId: hello
    kind: table
    contract:
      schema:
        - { name: id, type: STRING, required: true }
    binding:
      platform: local
      format:   parquet
      location: { path: "./hello.parquet" }

What you can drop: description, domain, tags, labels, consumes, build, orchestration, all governance blocks (agentPolicy, sovereignty, accessPolicy, retention), exposes[].mcp, lineage, lifecycle, environments, docs. Everything else is layered on as you need it.

See the Examples for the step-by-step progression from this minimal file to a production source-aligned acquisition product.

Edit this page on GitHub
Last Updated: 5/29/26, 5:26 PM
Contributors: fas89, Claude Opus 4.8
Prev
Fluid Protocol Specification
Next
Schema Versions