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

Schema Cheatsheet

One row per top-level field in the latest schema (0.7.4). Use this as a lookup table when you're reading or writing a .fluid.yml — find the field on the left, get a one-line meaning, find out if it's required, and jump to the deep-dive.

🧭 For a guided tour with context per block, read the Schema Anatomy. 📚 For the exhaustive field-by-field reference, see specs/0.7.4/fluid-spec.html.


Top-level fields

FieldPurposeRequiredAdded inType
fluidVersionWhich contract version this file targets. Accepts "0.7.4" (or "0.7.3").✅0.1.0enum
kindProduct kind: DataProduct | MLPipeline.✅0.1.0enum
idGlobally unique, dot-separated product id. The public address of this product.✅0.1.0string
nameHuman-readable display name.✅0.1.0string
descriptionBusiness-facing summary.0.1.0string
domainOwning business domain (e.g. Finance, Customer Experience).0.1.0string
tagsFree-text categorization labels.0.1.0string[]
labelsKey/value categorization for catalog and IAM.0.1.0map<string,string>
metadataOwner, layer, business context.✅0.1.0object
consumesUpstream FLUID products this product depends on (with version constraints).0.2.0object[]
exposesPorts this product publishes (table / api / stream / feature_store / …).✅0.1.0object[]
buildHow the product is produced (pattern + engine + properties).0.3.0object
buildsMulti-build orchestration (when one product has several builds).0.5.7object[]
orchestrationSchedule + tasks for the build. Provider-first since 0.7.0.0.7.0object
sovereignty ⭐Data residency & jurisdictional compliance.0.7.1object
accessPolicy ⭐Root-level IAM grants — generates cloud IAM bindings.0.7.1object
retention ⭐TTLs for runState / runLogs / lineage / dlq (ISO-8601).0.7.3object
lineageUpstream/downstream graph + optional field-level mappings.0.4.0object
governanceContract-level (account/project-wide) governance — AWS Lake Formation admins + LF-tag definitions. Per-resource grants live under binding.governance.0.4.0object
schemaEvolutionCompatibility strategy (backward / forward / full).0.4.0object
machineLearningModel spec for ML-product kinds (features, training, inference).0.5.7object
environmentsPer-environment overrides (dev / staging / prod).0.5.7object
lifecyclestate: preview | active | deprecated | retired + deprecation date.0.5.7object
docsExternal documentation URLs (runbook, design doc, dashboard).0.5.7object
extensionsEscape hatch for vendor-specific additions.0.5.7object

metadata (required) — fields

metadata itself is required at the top level, but only metadata.owner is required inside it.

FieldPurposeRequired
metadata.ownerOwning team object.✅
metadata.owner.teamOwning team handle.✅
metadata.owner.emailOwner email for alerts and audit.
metadata.owner.slackOwner Slack channel.
metadata.layerMedallion layer label. Free-form string — Bronze/Silver/Gold is convention, not enum.
metadata.businessContext.domainBusiness domain.
metadata.businessContext.subdomainBusiness subdomain.
metadata.provenanceAuto-injected generation envelope (tool + version + timestamp). Machine-written.

exposes[] — fields

Each entry in exposes[] requires exposeId, kind, contract, and binding.

FieldPurposeRequired
exposes[].exposeIdStable id of this port within the product.✅
exposes[].kindtable | view | api | file | stream | topic | feature_store | model | vector | graph | time_series | other.✅
exposes[].contractSchema + dq + policy. Must define at least schema or openapiRef.✅
exposes[].bindingWhere it lives — platform, format, location.✅
exposes[].descriptionWhat this port is. (NEW in 0.7.2)
exposes[].versionSemver of this port.
exposes[].contract.schema[]Column list with type, required, sensitivity, tags.(one of)
exposes[].contract.openapiRefReference to an external OpenAPI spec (for kind: api).(one of)
exposes[].contract.dq.rules[]Declarative quality assertions.
exposes[].contract.policyPrivacy + RBAC + column-level access.
exposes[].semantics ⭐ 0.7.2Entities, measures, dimensions, metrics.
exposes[].mcp ⭐ 0.7.4Opts this expose into the Fluid MCP output-port gateway. Presence enables runtime agentPolicy enforcement on every read.
exposes[].mcp.sampling.maxRows ⭐ 0.7.4Hard cap for the sample MCP tool. Integer ≥ 1, default 100.
exposes[].mcp.classification.dataClass ⭐ 0.7.4Advisory data class surfaced on describe: public | internal | confidential | restricted.
exposes[].binding.platformgcp | aws | azure | snowflake | databricks | kafka | local | kubernetes | postgres ⭐ 0.7.4 | other.
exposes[].binding.formatbigquery_table | snowflake_table | snowflake_view | iceberg | delta_table | parquet | csv | json | http_api | grpc_api | kafka_topic | pubsub_topic | gcs_file | s3_file | redshift_table | redshift_serverless | redshift_external_schema | postgres_table ⭐ 0.7.4 | athena_table ⭐ 0.7.4 | glue_table ⭐ 0.7.4 | other.
exposes[].binding.icebergConfig ⭐ 0.7.2Iceberg specifics when format: iceberg.
exposes[].binding.governancePer-resource AWS Lake Formation governance — registerLocation, principal grants, tag associations, row/column filters. Account-wide settings live in the top-level governance block.
exposes[].qosAvailability, freshness, latency targets.
exposes[].tags, exposes[].labelsPort-level categorization.

contract.dq.rules[] — fields

FieldPurposeRequired
dq.rules[].idRule id (unique within the contract).✅
dq.rules[].typefreshness | completeness | uniqueness | valid_values | accuracy | schema | anomaly_detection | drift_detection.✅
dq.rules[].severityinfo | warn | error | critical.✅
dq.rules[].selectorSQL-like predicate (e.g. "amount > 0").
dq.rules[].thresholdNumeric threshold for the operator.
dq.rules[].operator>= | > | <= | < | == | !=.
dq.rules[].windowISO-8601 duration window (e.g. PT15M).
dq.rules[].descriptionHuman-readable purpose.

build — fields

FieldPurposeRequired
build.patternhybrid-reference | embedded-logic | multi-stage | acquisition ⭐ 0.7.3.
build.enginedbt | sql | python | spark | glue | custom | duckdb ⭐ | airbyte ⭐ | meltano ⭐ | dlt ⭐ | kafka-connect ⭐ | debezium ⭐ (⭐ added 0.7.3).
build.capabilities ⭐ 0.7.3What the build asks for: full_refresh, incremental_dedup, cdc, schema_discovery, dlp_scan, exactly_once, …
build.propertiesPattern-specific properties (validated conditionally).
build.execution.triggerschedule / event / manual.
build.execution.runtimeWhere it runs (platform + resources).
build.execution.retriesRetry policy.
build.outputsList of exposeIds this build produces.
build.dependenciesOther builds this one waits on.
build.propertiesPattern-specific payload — schema validates this against acquisitionPattern when pattern: acquisition (see below).(when pattern: acquisition)

build.properties when pattern: acquisition ⭐ 0.7.3 — fields

When build.pattern: acquisition, the schema validates build.properties against the acquisitionPattern shape below. (For other patterns, properties conforms to hybridReferencePattern / embeddedLogicPattern / multiStagePattern respectively.)

Field (under build.properties)PurposeRequired
source.kindfilesystem | postgres | mysql | sqlite | http | salesforce | stripe | … (free string with example values, no enum).✅
source.modefull_refresh | incremental_append | incremental_dedup | incremental_merge | cdc | streaming.✅
source.cursor_fieldColumn used as incremental cursor.
source.connectionConnection details. secretRef must be a URI: vault://..., aws://..., gcp://..., azure://..., or env://.... Inline secrets are rejected by the validator.
source.streamsList of streams/tables/objects to ingest.
sink.formaticeberg | delta | parquet | csv | json | snowflake_table | bigquery_table | redshift_table | duckdb_table.
sink.partitionByArray of strings (function-form, e.g. ["day(ingested_at)"]). Note: binding.icebergConfig.partitionSpec uses an object form — different shape.
sink.catalogCatalog identifier (e.g. glue, snowflake_horizon).
delivery.guaranteeat_most_once | at_least_once | exactly_once.
delivery.idempotencyKeyTemplate, e.g. "${stream}|${batch_id}".
delivery.dlq.enabledBoolean — DLQ on/off (default true).
delivery.dlq.sink.formatparquet | json | ndjson.
delivery.dlq.sink.locationDLQ destination URI.
delivery.dlq.maxRecordsBeforeAbortInteger (default 10000).
delivery.dlq.alertOnList: pii_classification_failed | schema_violation | destination_write_failed | quality_gate_failed.
schemaEvolution.policystrict | discover_and_freeze | evolve_safe | evolve_all.
schemaEvolution.onAddedColumninclude | warn | fail.
schemaEvolution.onRemovedColumndrop | warn | fail.
schemaEvolution.onTypeChangecast | warn | fail.
schemaEvolution.sourceFingerprintrequired | optional | disabled (default: required).
preLandHook chain: dlp_scan, tokenize_pii, quality_gate, emit_lineage_input.
qualityPre-land quality gates (gate-or-quarantine semantics).
cost.budget.monthly{ rows, bytes (e.g. "50GB"), computeMinutes }.
cost.budget.onExceedwarn (default) | abort.
cost.chargeback{ team, project, costCenter }.
catalog.registerCatalog auto-registration targets: datahub, openmetadata, datamesh_manager, unity, glue, snowflake_horizon.
concurrency.lockSingle-flight lock scope (product or build).
lineage.emitWhether to emit OpenLineage events (default: true).
<engine> (airbyte | meltano | dlt | duckdb | kafka-connect | debezium)Engine-specific config block.
<engine>.deployment.modeembedded | bring-your-own | managed.
<engine>.deployment.managed.targetWhen managed: docker | kubernetes | terraform | opentofu.
<engine>.image_signature.verifiercosign (only value today, default cosign).(prod)
<engine>.image_signature.publicKeyPublic key reference for signature verification.(prod)
<engine>.image_signature.slsaProvenancerequired | optional (default) | disabled.(prod)

exposes[].mcp ⭐ 0.7.4 — fields

The presence of a (non-empty) mcp block opts the expose into the Fluid MCP output-port gateway, where policy.agentPolicy is enforced at runtime on every read. The agentPolicy shape is unchanged from 0.7.3.

FieldPurposeRequired
exposes[].mcp.sampling.maxRowsHard cap for the sample MCP tool (defends against an over-curious agent). Integer ≥ 1, default 100.
exposes[].mcp.classification.dataClassAdvisory data class surfaced on the describe tool: public | internal | confidential | restricted. The real gate is policy.agentPolicy.

exposes[].policy.agentPolicy ⭐ 0.7.1 — fields

⚠️ Location. agentPolicy is per-expose, nested under exposes[].policy.agentPolicy. It is not a top-level property in the schema (despite the 0.7.1 release notes showing it that way).

⭐ 0.7.4 — runtime enforcement. When the same expose carries an mcp block, these allowedModels / deniedModels and allowedUseCases / deniedUseCases fields are enforced by the Fluid MCP gateway on every read (no shape change).

FieldPurposeRequired
…policy.agentPolicy.allowedModelsWhitelist of AI model ids (e.g. gpt-4, claude-3-opus). Empty array = no AI access.
…policy.agentPolicy.deniedModelsBlacklist (takes precedence over allowedModels).
…policy.agentPolicy.maxTokensPerRequestPer-request token cap (positive integer).
…policy.agentPolicy.maxTokensPerDayPer-day token cap.
…policy.agentPolicy.allowedUseCasesPermitted use cases from the schema's controlled vocabulary: inference | reasoning | analysis | summarization | classification | embedding | search | qa | code_generation | fine_tuning | training | rag. Custom strings are rejected.
…policy.agentPolicy.deniedUseCasesSame controlled vocabulary as allowedUseCases. Useful pattern: allow inference, qa, rag; deny training, fine_tuning.
…policy.agentPolicy.canReasonBoolean — allow chain-of-thought / multi-step reasoning? (default false)
…policy.agentPolicy.canStoreBoolean — allow caching / persistence? (default false)
…policy.agentPolicy.retentionPolicy.maxRetentionDaysMax days AI may retain data (0 = no retention).
…policy.agentPolicy.retentionPolicy.requireDeletionBoolean — must AI delete after use? (default true)
…policy.agentPolicy.auditRequiredBoolean — log all AI consumption? (default true)
…policy.agentPolicy.purposeLimitationFree-text purpose statement, e.g. "Customer support chatbot only".

exposes[].policy — sibling fields

FieldPurposeRequired
exposes[].policy.authnoidc | oauth2 | api_key | none | custom | iam | jwt.
exposes[].policy.authz.readersList of principals with read access.
exposes[].policy.authz.writersList of principals with write access.
exposes[].policy.authz.columnRestrictions[]Per-principal column allow/deny rules.
exposes[].policy.privacy.masking[]Column-level masking rules: {column, strategy: mask|hash|tokenize|encrypt|k_anonymity}.
exposes[].policy.privacy.rowLevelPolicy.expressionProvider-specific row-level filter predicate.
exposes[].policy.classificationData classification label.

sovereignty ⭐ 0.7.1 — fields

FieldPurposeRequired
sovereignty.jurisdictionRequired legal jurisdiction (e.g. EU, US, Multi-Region).
sovereignty.allowedRegionsExplicit allowed cloud regions.
sovereignty.deniedRegionsExplicit denied cloud regions.
sovereignty.dataResidencyBoolean — must data stay within jurisdiction?
sovereignty.crossBorderTransferBoolean — is cross-border transfer permitted?
sovereignty.transferMechanismsIf permitted, legal mechanisms (SCCs, BCRs, …).
sovereignty.regulatoryFrameworkFrameworks: GDPR, HIPAA, CCPA, LGPD.
sovereignty.enforcementModestrict (block apply) | advisory (warn only) | audit.
sovereignty.validationRequiredWhether binding regions are validated against this block at apply-time.

accessPolicy ⭐ 0.7.1 — fields

Each grant requires only principal; everything else is opt-in.

FieldPurposeRequired
accessPolicy.grants[].principaluser:, group:, serviceAccount: identifier.✅
accessPolicy.grants[].permissionsList of permissions: read | select | query | write | insert | update | delete | create | admin | manage.
accessPolicy.grants[].resourcesJSONPath expressions selecting which exposes are in scope.
accessPolicy.grants[].conditionsConditional access (IP ranges, time windows).

retention ⭐ 0.7.3 — fields

FieldPurposeDefault
retention.runStateHow long the orchestrator keeps run state.P30D
retention.runLogsHow long run logs are kept.P90D
retention.lineageHow long emitted lineage events are kept.P365D
retention.dlqHow long DLQ records are kept before purge.P180D

All values are ISO-8601 durations.


orchestration — fields

FieldPurposeRequired
orchestration.engineairflow | dagster | prefect | kubeflow | custom | none.✅
orchestration.modePull or push generation.
orchestration.generateOnChangeAuto-regenerate DAGs when contract changes.
orchestration.tasks[].taskIdTask id within the DAG.
orchestration.tasks[].typeprovider_action | fluid_validate | fluid_plan | fluid_apply | fluid_execute | fluid_verify | fluid_dq_check | bash | python | branch_python | sensor | email | http | snowflake_query | bigquery_query | bigquery_job | glue_job | databricks_job | custom.
orchestration.tasks[].providerFor provider_action: e.g. aws.s3, snowflake.table.
orchestration.tasks[].actionFor provider_action: e.g. ensure_bucket, ensure.
orchestration.tasks[].parametersAction parameters.
orchestration.tasks[].dependsOnUpstream task ids.
orchestration.tasks[].buildStepRefReference into build step.

lifecycle — values

lifecycle.state ∈ preview | active | deprecated | retired.

A deprecated product still serves reads but new consumes: references should fail validation in CI.


Where each field is exhaustively documented

The auto-generated reference at specs/0.7.4/fluid-spec.html is the authoritative source for every field's exact type, enum values, validation rules, and examples.

Edit this page on GitHub
Last Updated: 5/29/26, 5:26 PM
Contributors: fas89, Claude Opus 4.7 (1M context), Claude Opus 4.8
Prev
Schema Anatomy
Next
Fluid Protocol Specification