Fluid Forge
Get Started
See it run
  • Local (DuckDB)
  • Source-Aligned (Postgres → DuckDB)
  • AI Forge + Data Models
  • GCP (BigQuery)
  • Snowflake Team Collaboration
  • Declarative Airflow
  • Orchestration Export
  • Jenkins CI/CD
  • Universal Pipeline
  • 11-Stage Production Pipeline
  • Catalog Forge End-to-End
CLI Reference
  • Overview
  • Quickstart
  • Examples
  • Your own CI
  • Your own scaffolding
  • Custom validator
  • Apply hook
  • Reference
Demos
  • Overview
  • Architecture
  • GCP (BigQuery)
  • AWS (S3 + Athena)
  • Snowflake
  • Local (DuckDB)
  • Custom Providers
  • Roadmap
GitHub
GitHub
Get Started
See it run
  • Local (DuckDB)
  • Source-Aligned (Postgres → DuckDB)
  • AI Forge + Data Models
  • GCP (BigQuery)
  • Snowflake Team Collaboration
  • Declarative Airflow
  • Orchestration Export
  • Jenkins CI/CD
  • Universal Pipeline
  • 11-Stage Production Pipeline
  • Catalog Forge End-to-End
CLI Reference
  • Overview
  • Quickstart
  • Examples
  • Your own CI
  • Your own scaffolding
  • Custom validator
  • Apply hook
  • Reference
Demos
  • Overview
  • Architecture
  • GCP (BigQuery)
  • AWS (S3 + Athena)
  • Snowflake
  • Local (DuckDB)
  • Custom Providers
  • Roadmap
GitHub
GitHub
  • Introduction

    • Home
    • Getting Started
    • Snowflake Quickstart
    • See it run
    • Forge Data Model
    • Vision & Roadmap
    • Playground
    • FAQ
  • Concepts

    • Concepts
    • Builds, Exposes, Bindings
    • What is a contract?
    • Quality, SLAs & Lineage
    • Governance & Policy
    • Agent Policy (LLM/AI governance)
    • Providers vs Platforms
    • Fluid Forge vs alternatives
  • Data Products

    • Product Types — SDP, ADP, CDP
  • Walkthroughs

    • Walkthrough: Local Development
    • Source-Aligned: Postgres → DuckDB → Parquet
    • AI Forge And Data-Model Journeys
    • Walkthrough: Deploy to Google Cloud Platform
    • Walkthrough: Snowflake Team Collaboration
    • Declarative Airflow DAG Generation - The FLUID Way
    • Generating Orchestration Code from Contracts
    • Jenkins CI/CD for FLUID Data Products
    • Universal Pipeline
    • The 11-Stage Pipeline
    • End-to-End Walkthrough: Catalog → Contract → Transformation
  • CLI Reference

    • CLI Reference
    • fluid init
    • fluid demo
    • fluid forge
    • fluid skills
    • fluid status
    • fluid validate
    • fluid plan
    • fluid apply
    • fluid generate
    • fluid generate artifacts
    • fluid validate-artifacts
    • fluid verify-signature
    • fluid generate-airflow
    • fluid generate-pipeline
    • fluid viz-graph
    • fluid odps
    • fluid odps-bitol
    • fluid odcs
    • fluid export
    • fluid export-opds
    • fluid publish
    • fluid datamesh-manager
    • fluid market
    • fluid import
    • fluid policy
    • fluid policy check
    • fluid policy compile
    • fluid policy apply
    • fluid contract-tests
    • fluid contract-validation
    • fluid diff
    • fluid test
    • fluid verify
    • fluid product-new
    • fluid product-add
    • fluid workspace
    • fluid ide
    • fluid ai
    • fluid memory
    • fluid mcp
    • fluid scaffold-ci
    • fluid scaffold-composer
    • fluid scaffold-ide
    • fluid docs
    • fluid config
    • fluid split
    • fluid bundle
    • fluid auth
    • fluid doctor
    • fluid providers
    • fluid provider-init
    • fluid roadmap
    • fluid version
    • fluid runs
    • fluid retention
    • fluid secrets
    • fluid stats
    • fluid contract
    • fluid ship
    • fluid rollback
    • fluid schedule-sync
    • Catalog adapters

      • Source Catalog Integration (V1.5)
      • BigQuery Catalog
      • Snowflake Horizon Catalog
      • Databricks Unity Catalog
      • Google Dataplex Catalog
      • AWS Glue Data Catalog
      • DataHub Catalog
      • Data Mesh Manager Catalog
    • CLI by task

      • CLI by task
      • Add quality rules
      • Add agent governance
      • Debug a failed pipeline run
      • Switch clouds with one line
  • Recipes

    • Recipes
    • Recipe — add a quality rule
    • Recipe — switch clouds with one line
    • Recipe — tag PII in your schema
  • SDK & Plugins

    • SDK & Plugins
    • Quickstart — your first plugin
    • Examples

      • Runnable examples
      • Example: hello-scaffold — the minimal viable plugin
      • Example: gitlab-ci-scaffold — generate a complete CI project
      • Example: steward-validator — a custom governance rule
      • Example: prod-key-guard — apply-time invariant check
    • Journeys

      • Journeys
      • Your own CI/CD

        • You have your own CI/CD setup, no problem
        • GitLab CI — the bundle template
        • GitHub Actions — the bundle template
        • Jenkins — the bundle template
        • CircleCI — the bundle template
      • You have a strict project layout, no problem
      • You have governance rules, no problem
      • You want a check at apply time, no problem
    • Reference

      • Reference
      • Roles reference
      • Entry points reference
      • Trust model
      • Packaging
      • Companion packages
  • Providers

    • Providers
    • Provider Architecture
    • GCP Provider
    • AWS Provider
    • Snowflake Provider
    • Local Provider
    • Creating Custom Providers
    • Provider Roadmap
  • Advanced

    • Blueprints
    • Governance & Compliance
    • Airflow Integration
    • Built-in And Custom Forge Guidance
    • FLUID Forge Contract GPT Packet
    • Forge Discovery Guide
    • Forge Memory Guide
    • LLM Providers
    • Capability Warnings
    • LiteLLM Backend (opt-in)
    • MCP Server
    • Credential Resolver — Security Model
    • Cost Tracking
    • Agentic Primitives
    • Typed Errors
    • Typed CLI Errors
    • Authoring Forge Tools
    • Source-Aligned Acquisition
    • API Stability — fluid_build.api
    • Guided fluid forge UX
    • V1.5 Catalog Integration — Architecture Deep-Dive
    • V1.5 + V2 Hardening — Release Notes
  • Project

    • Contributing to Fluid Forge
    • Fluid Forge Docs Baseline: CLI 0.8.3
    • Fluid Forge Docs Baseline: CLI 0.8.0
    • Fluid Forge Docs Baseline: CLI 0.7.11
    • Fluid Forge Docs Baseline: CLI 0.7.9
    • Fluid Forge v0.7.1 - Multi-Provider Export Release

Providers vs Platforms

Two related but distinct ideas:

  • Platform — a value in your contract (binding.platform: gcp) describing where the data lands.
  • Provider — a Python plugin that knows how to make it land there. Each provider implements two required methods, plan() and apply(), against a specific cloud.

fluid providers lists everything installed in your environment.

Cloud providers shipping in data-product-forge 0.8.0

These are the cloud-platform providers that implement plan/apply against a target cloud:

ProviderStatusInstall extra
local✅ Production (DuckDB, runs anywhere)pip install "data-product-forge[local]"
gcp✅ Production (BigQuery + GCS + IAM)pip install "data-product-forge[gcp]"
aws✅ Production (S3 + Glue + Athena)pip install "data-product-forge[aws]"
snowflake✅ Production (Snowflake + Snowpark)pip install "data-product-forge[snowflake]"
azure🔜 Roadmap (Synapse + ADLS)—
databricks🔜 Roadmap (Unity Catalog)—

Other valid binding.platform values

The schema enum also includes engines and runtime targets that aren't cloud providers in the same sense — they describe how the data lands, not which cloud it lands on:

ValueKindNotes
kafkaStreaming engineUse with format: kafka_topic. Topic creation handled by your existing Kafka cluster, not by Fluid Forge — it just emits the binding contract.
kubernetesRuntime targetFor long-running services / consumers, not for table-backed products.
otherEscape hatchLets you bind a contract to a custom provider you've registered via the Provider SDK.

The provider plugin contract

Building a custom provider for an unsupported platform is supported — see Custom Providers. BaseProvider declares exactly two abstract methods the plugin must implement:

class MyProvider(BaseProvider):
    name = "my-cloud"

    def plan(self, contract): ...      # required (@abstractmethod)
    def apply(self, actions): ...      # required (@abstractmethod)

Two more methods are optional — BaseProvider ships working defaults you only override when you need them:

    def capabilities(self): ...        # optional — defaults to ProviderCapabilities()
    def render(self, src, *, out=None, fmt=None): ...  # optional — default raises ProviderError

capabilities() advertises which features the provider supports (planning, apply, render, graph, auth); render() exports a contract to an external format and is unsupported unless overridden.

Register via Python entry points in your pyproject.toml:

[project.entry-points."fluid_build.providers"]
my-cloud = "my_provider:MyProvider"

After pip install my-fluid-provider, fluid providers will list it automatically and contracts can use platform: my-cloud.

The provider lifecycle

The two required methods are each called at a specific point in the canonical 11-stage pipeline:

MethodCalled byPipeline stageWhat it must do
plan(contract)fluid planStage 6 — PlanReturn a list of Action objects describing what would change. Must be deterministic — the same contract + same deployed state always emit the same actions. The CLI's plan binding (stage 6 ↔ stage 7) refuses to apply if the plan was tampered with.
apply(actions)fluid applyStage 7 — ApplyExecute the actions against the target cloud. Idempotent. Returns success/failure per action.

plan() makes no network calls and has no side effects — it's pure contract-in, action-list-out. That's how the canonical pipeline runs pre-flight checks without touching production.

Verification and policy compilation are engine-level pipeline stages, not provider abstract methods — the CLI drives them around the provider's plan/apply rather than calling extra methods on BaseProvider.

Action semantics

plan() returns Action objects in three categories:

CategoryExamplesApply behaviour
Create+ create table foo, + create dataset bar, + grant role/dataViewer to group:xIdempotent — re-applying a create that already happened is a no-op
Modify~ alter table foo add column bar, ~ update grants for table fooBest-effort idempotent — providers may need to detect drift and reconcile
Destructive- drop table foo, - revoke grant from group:xGated by --allow-destroy. The plan emits these but apply refuses unless the operator opts in explicitly.

The destructive gate is the single most important safety property of the planner. Schema migrations that would drop a column require the operator to acknowledge the loss.

Error translation

Every provider translates cloud-specific errors into typed CLI errors so the operator gets a useful message rather than a stack trace. Examples from the GCP provider:

Cloud errorTranslated toExit code
403 Forbidden: bigquery.datasets.createFluidIAMError: "Service principal lacks BigQuery Data Editor role on project prod. Grant via …"64 (configuration)
409 Conflict: dataset already exists(translated to a no-op create — no error)0
400 Bad Request: invalid schemaFluidSchemaError: "Field customer.id declared as STRING in contract but BigQuery has it as INT64. Migration needed via …"65 (data)
Quota exceeded: query bytesFluidQuotaError: "Project prod exceeded daily query bytes quota. See GCP custom cost controls."66 (resource)

See Typed CLI Errors for the full taxonomy.

Version compatibility

Each provider declares the contract schema versions it can handle:

class MyProvider(BaseProvider):
    name = "my-cloud"
    supported_schemas = ["0.7.1", "0.7.2", "0.7.3"]

fluid validate cross-checks the contract's fluidVersion against every installed provider's supported_schemas. Mismatch is a hard failure at validate time — the CLI refuses to load a contract that no installed provider can plan.

Where to look next

  • Custom Providers walkthrough — full step-by-step for shipping your own provider
  • Provider Architecture — interface details, action types, error categories
  • Universal pipeline — where each provider method lands in the 11-stage flow
  • Builds, Exposes, Bindings — the contract surface providers consume
Edit this page on GitHub
Last Updated: 5/17/26, 6:10 PM
Contributors: fas89, Claude Opus 4.7 (1M context)
Prev
Agent Policy (LLM/AI governance)
Next
Fluid Forge vs alternatives