Fluid Forge
Why Forge
Concepts
Get Started
  • Consume a Data Product
  • See it run
  • Demos
  • Local (DuckDB)
  • Source-Aligned (Postgres → DuckDB)
  • AI Forge + Data Models
  • MCP Output Port — Serve to AI Agents
  • 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
  • Agent Policy (concept)
  • MCP Output Port — Serve to Agents
  • MCP deep-dive
  • AI-assisted authoring
  • LLM providers & backends
  • Overview
  • Quickstart
  • Examples
  • Your own CI
  • Your own scaffolding
  • Custom validator
  • Apply hook
  • Reference
  • Overview
  • Architecture
  • GCP (BigQuery)
  • AWS (S3 + Athena)
  • Snowflake
  • Local (DuckDB)
  • Custom Providers
  • Roadmap
GitHub
Why Forge
Concepts
Get Started
  • Consume a Data Product
  • See it run
  • Demos
  • Local (DuckDB)
  • Source-Aligned (Postgres → DuckDB)
  • AI Forge + Data Models
  • MCP Output Port — Serve to AI Agents
  • 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
  • Agent Policy (concept)
  • MCP Output Port — Serve to Agents
  • MCP deep-dive
  • AI-assisted authoring
  • LLM providers & backends
  • Overview
  • Quickstart
  • Examples
  • Your own CI
  • Your own scaffolding
  • Custom validator
  • Apply hook
  • Reference
  • Overview
  • Architecture
  • GCP (BigQuery)
  • AWS (S3 + Athena)
  • Snowflake
  • Local (DuckDB)
  • Custom Providers
  • Roadmap
GitHub
  • Introduction

    • Home
    • Why Fluid Forge
    • 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

    • Consume a Data Product
    • Product Types — SDP, ADP, CDP
  • Walkthroughs

    • Walkthrough: Local Development
    • Source-Aligned: Postgres → DuckDB → Parquet
    • AI Forge And Data-Model Journeys
    • Walkthrough: MCP Output Port
    • 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
    • Core workflow

      • fluid init
      • fluid demo
      • fluid forge
      • fluid validate
      • fluid plan
      • fluid apply
      • fluid diff
      • fluid status
    • Build & ship

      • fluid bundle
      • fluid generate
      • fluid generate artifacts
      • fluid validate-artifacts
      • fluid verify-signature
      • fluid generate iac
      • fluid generate-airflow
      • fluid generate-pipeline
      • fluid viz-graph
      • fluid publish
      • fluid ship
      • fluid rollback
      • fluid schedule-sync
    • AI & Agents

      • fluid ai
      • fluid agents
      • fluid mcp
      • fluid memory
      • fluid stats
      • fluid skills
    • Quality & governance

      • fluid test
      • fluid verify
      • fluid contract-tests
      • fluid contract-validation
      • fluid policy
      • fluid policy check
      • fluid policy compile
      • fluid policy apply
    • Standards & interoperability

      • fluid odps
      • fluid odps-bitol
      • fluid odcs
      • fluid export
      • fluid export-odps
      • fluid exporters
      • fluid import
      • fluid market
      • fluid datamesh-manager
    • Project & workspace

      • fluid product-new
      • fluid product-add
      • fluid workspace
      • fluid contract
      • fluid split
      • fluid config
      • fluid providers
      • fluid plugins
      • fluid provider-init
      • fluid auth
      • fluid secrets
      • fluid ide
      • fluid scaffold-ci
      • fluid scaffold-composer
      • fluid scaffold-ide
      • fluid docs
      • fluid runs
      • fluid retention
      • fluid describe
      • fluid doctor
      • fluid roadmap
      • fluid version
    • Catalog adapters

      • Source Catalog Integration (V1.5)
      • Publishing to a Catalog — Overview
      • BigQuery Catalog
      • Snowflake Horizon Catalog
      • Databricks Unity Catalog
      • Google Dataplex Catalog
      • AWS Glue Data Catalog
      • DataHub Catalog
      • Data Mesh Manager Catalog
      • OpenMetadata 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
    • Write a contract that consumes another contract
    • Generate per-environment overlays
  • 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
  • AI & Agents

    • MCP Server
    • Built-in And Custom Forge Guidance
    • Forge Discovery Guide
    • Forge Memory Guide
    • Authoring Forge Tools
    • Guided fluid forge UX
    • LLM Providers
    • LiteLLM Backend
    • Capability Warnings
    • Cost Tracking
    • FLUID Forge Contract GPT Packet
    • Agentic Primitives
  • Operate & Deploy

    • Airflow Integration
    • Blueprints
    • Source-Aligned Acquisition
  • Govern & Secure

    • Governance, Compliance & the Business Case
    • Governance & Compliance
    • Network Safety
    • Credential Resolver — Security Model
  • Configuration & Reference

    • Environment Variables
    • Typed Errors
    • Typed CLI Errors
    • API Stability — fluid_build.api
  • Architecture & Releases

    • V1.5 Catalog Integration — Architecture Deep-Dive
    • V1.5 + V2 Hardening — Release Notes
  • Project

    • Contributing to Fluid Forge
    • Fluid Forge Docs Baseline: CLI 0.9.0
    • Fluid Forge Docs Baseline: CLI 0.8.11
    • Fluid Forge Docs Baseline: CLI 0.8.10
    • Fluid Forge Docs Baseline: CLI 0.8.9
    • Fluid Forge Docs Baseline: CLI 0.8.8
    • Fluid Forge Docs Baseline: CLI 0.8.7
    • Fluid Forge Docs Baseline: CLI 0.8.6
    • Fluid Forge Docs Baseline: CLI 0.8.5
    • Fluid Forge Docs Baseline: CLI 0.8.4
    • 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

Companion packages

Three packages ship together as one platform. End users only need the CLI; plugin authors need the SDK; plugin authors who want to ship file-emitting plugins via Jinja+YAML bundles also need the custom-scaffold engine.

Quick reference

PackageVersionPyPIImport pathWhat you reach for it for
data-product-forge0.10.0pypi.org/project/data-product-forgeimport fluid_buildThe CLI itself — fluid command, all built-in providers, the fluid generate/validate/apply/publish lifecycle, and the fluid forge copilot. 0.10.0 adds plugin governance (FLUID_PLUGINS_ALLOWLIST / FLUID_PLUGINS_BLOCKLIST) and the fluid plugins / fluid exporters surfaces
data-product-forge-sdk0.10.0pypi.org/project/data-product-forge-sdkfrom fluid_sdk import …Zero-dependency ABCs (BasePlugin, CustomScaffold, Validator, InfraProvider, CatalogAdapter) + typed value domains (Severity / ActionStatus / Phase) + SDK↔CLI compat declaration + three role conformance harnesses + iter_extension_schemas() discovery helper. Plugin authors only.
data-product-forge-custom-scaffold0.4.0pypi.org/project/data-product-forge-custom-scaffoldfrom data_product_forge_custom_scaffold import …Reference Jinja+YAML bundle engine. Use this when your plugin distributes templates via a git bundle (most common pattern). 0.4.0 adds copier-parity reproducibility: a fluid-scaffold.lock lockfile, --pin (byte-reproducible re-render at the locked commit), and --update [--target REF] (3-way re-render onto your working tree). White-label spec dialects (ScaffoldDialect) shipped in 0.1.1.

Who installs what

You are…Install
End user consuming someone else's pluginspip install data-product-forge data-product-forge-custom-scaffold <plugin-package>
Plugin author writing a new role subclasspip install data-product-forge-sdk for development; the CLI itself for testing
Bundle author distributing Jinja templates to other teamsNo extra install — consumers install data-product-forge-custom-scaffold; you just host the bundle in git
Platform team building a custom CLI subcommandpip install data-product-forge-sdk if your plugin subclasses anything, otherwise no SDK needed (entry-point can be a plain function)

The SDK dual-naming explained

PyPI distribution: data-product-forge-sdk. Python import path: fluid_sdk.

pip install data-product-forge-sdk
from fluid_sdk import CustomScaffold, ContractHelper, write_file_action

This is deliberate, and standard PyPI practice. Same pattern as:

  • pillow ↔ from PIL import Image
  • scikit-learn ↔ from sklearn import …
  • pyyaml ↔ import yaml
  • attrs ↔ import attr

The PyPI name reflects the product brand (data-product-forge). The import path stays short, version-stable, and module-friendly (fluid_sdk was its name before the rename and hasn't changed).

You don't have to do anything special — pip install data-product-forge-sdk makes import fluid_sdk work. The CLI's requirements.txt and your plugin's pyproject.toml both use the dist name; only your Python source uses the import path.

Version pinning recommendations

If you're consuming the CLI

dependencies = [
    "data-product-forge==0.10.0",  # pin exact for reproducibility
]

For production deploys, exact pin (==) is right. For development environments, a looser bound (>=0.10,<0.11) is fine — minor versions are backwards-compatible.

If you're writing a plugin

dependencies = [
    "data-product-forge-sdk>=0.10,<1",   # upper bound is important
]

The upper bound <1 is critical: the SDK is on the 0.x line and minor versions may break the API. Bump your upper bound (<1 → <2) only after testing against the new major version.

For the custom-scaffold engine (if you're shipping bundles that ride on it):

dependencies = [
    "data-product-forge-sdk>=0.10,<1",
    "data-product-forge-custom-scaffold>=0.4,<0.5",
]

If you're a plugin author shipping to PyPI

Your plugin ships with a pinned SDK requirement; your users install your plugin and let pip resolve the SDK transitively. That means you control which SDK version they use.

Best practice:

  1. Pin to the lowest SDK version your plugin actually needs.
  2. Run CI against multiple SDK versions to confirm the lower bound is real.
  3. Bump the upper bound only after testing against a new SDK release.

Version stability commitments

data-product-forge (CLI)

  • Semantic versioning since 0.8.0. Minor versions add features and may deprecate (with warning) but won't break. Major versions can break.
  • The 0.7.x contract schema is supported indefinitely by the 0.8 line — contracts using fluidVersion: 0.7.1 / 0.7.2 / 0.7.3 / 0.7.4 / 0.7.5 all validate.
  • Pre-releases are tagged with PEP 440 suffixes (0.8.4rc1, 0.8.4b1, etc.). They publish to PyPI but pip install skips them by default.

data-product-forge-sdk

  • Currently 0.10.0 — Beta classifier. First stable 1.0.0 planned after a validation window with the first external plugins on PyPI.
  • 0.10.0 is additive in practice (still pin the upper bound <1). It adds: four real role ABCs — InfraProvider (role "provider") and CatalogAdapter (role "catalog") are now first-class roles whose apply is abstract on purpose (a plugin that forgets to implement it fails loud, never a silent no-op), each with an action builder (provision_action / catalog_entry_action); typed value domains Severity / ActionStatus / Phase plus FAILING_SEVERITIES, with a fail-safe Severity.coerce (an unrecognised severity counts as ERROR, never silently passes); PluginCapabilities + BasePlugin.capabilities() for typed plugin self-description; an SDK↔CLI compat declaration (SDK_PROTOCOL_VERSION / MIN_CLI_VERSION / cli_requirement() / PluginMetadata.requires_cli) — the SDK declares, the CLI gates; and three role conformance harnesses (ValidatorTestHarness, InfraProviderTestHarness, CatalogAdapterTestHarness).
  • 0.9.1 added iter_extension_schemas() and the fluid_build.extension_schemas group — additive, no breaking change.
  • Minor versions (0.9 → 0.10) may break the API; 0.10.0 did not, but the classifier reflects "we reserve the right." Pin the upper bound (<1).
  • Patch versions only add/fix in a backwards-compatible way; safe to consume without bumping.

data-product-forge-custom-scaffold

  • Currently 0.4.0 — Beta classifier. Same model as the SDK: first stable cut after the validation window.
  • 0.4.0 adds copier-parity reproducibility — a deterministic, credential-free fluid-scaffold.lock written to the output root after a successful (non-dry-run) generation (records the resolved git commit); --pin to resolve git sources to the locked commit (npm-ci / poetry-frozen semantics, byte-reproducible); --update [--target REF] to re-render at the locked base plus a new ref and 3-way-merge onto your working tree via git merge-file (conflict markers + exit code 4 on overlap, the lock advancing on a clean merge); a fix for git@<full-commit-sha> source pinning; and real enforcement of a bundle's variables_schema (JSON Schema Draft 7) at plan time plus supportedProductTypes vs metadata.productType (the when / environments pattern fields remain RESERVED). All additive.
  • 0.1.1 shipped the customScaffold JSON-Schema as a real package artifact, advertised it to the fluid forge copilot via fluid_build.extension_schemas, and added white-label spec dialects (ScaffoldDialect + make_validator() / make_register() factories) so a third party can reuse the engine under their own apiVersion, extensions.<key>, and subcommand.
  • The bundle manifest format is fluid.dev/custom-scaffold.v1 — a v2 would be a breaking change, and bundles would need to update their apiVersion. No v2 is on the roadmap.

Where to find the source

PackageRepoLicense
data-product-forgeAgenticstiger/forge-cliApache-2.0
data-product-forge-sdkAgenticstiger/forge-cli-sdkApache-2.0
data-product-forge-custom-scaffoldAgenticstiger/data-product-forge-custom-scaffoldApache-2.0

Issues, PRs, and discussions all happen on the upstream repos. The examples/ directories on each contain runnable starting points.

Upgrade compatibility

You're upgradingFrom → ToWhat might break
CLI0.8.x → 0.8.yNothing — patch and minor are backwards-compatible.
CLI0.9.0 → 0.10.0Released. Additive — adds plugin governance (FLUID_PLUGINS_ALLOWLIST / FLUID_PLUGINS_BLOCKLIST), the fluid plugins / fluid exporters commands, and wires the Validator / CatalogAdapter / IaC-provider roles end-to-end. (odps/odcs were reclassified from providers to exporters; the export commands are unchanged.)
SDK0.9 → 0.10Released. Additive in practice — new first-class roles (InfraProvider / CatalogAdapter), typed value domains, PluginCapabilities, the SDK↔CLI compat declaration, and three role harnesses. Keep the upper bound (<1).
SDK0.10 → 1.0(not yet released) Will be the "stable cut." Should be a no-op if you've been on 0.10.x; if not, release notes will say.
Custom-scaffold0.1.x → 0.4.0Released. Additive — new --pin / --update flags and a new fluid-scaffold.lock lockfile; bundle manifest format unchanged (v1). Bump the upper bound (>=0.4,<0.5).

Roadmap

(High-level — see each repo's GitHub for milestones)

  • CLI: continued growth of the acquisition-pattern engines; plugin governance and the wired role-level entry-points (validators / catalog adapters / IaC providers) landed in 0.10.0.
  • SDK: stabilize at 1.0 after the validation window. No new roles planned; the four existing roles (CustomScaffold / Validator / InfraProvider / CatalogAdapter) are all first-class and fully wired end-to-end as of 0.10.0, and cover the spec.
  • Custom-scaffold: a future line will add a pypi resolver kind (so bundles can be installed via pip install directly) and an npm resolver kind. Today, path / git / entrypoint cover the common cases.

Reference

  • Packaging — how to ship a plugin to PyPI
  • Roles — the four roles and their helpers
  • Entry points — the eight entry-point groups and when to use each
  • Trust model — what the CLI guarantees about plugins
Edit this page on GitHub
Last Updated: 6/27/26, 4:58 PM
Contributors: fas89, Claude Opus 4.8
Prev
Packaging