Zero-dependency SDK for building data-product-forge plugins — custom scaffolds, validators, cloud-infrastructure providers, catalog adapters. Import as `fluid_sdk`.
Project description
data-product-forge-sdk
Build a data-product-forge plugin in 30 seconds. Get 15+ conformance tests for free.
Zero-dependency Python SDK for building plugins that extend the data-product-forge (a.k.a. FLUID) CLI. Write a plugin once, plug it in via Python entry-points. Four built-in roles, one mental model.
pip install data-product-forge-sdk
from fluid_sdk import CustomScaffold, Validator, ContractHelper
Dual naming, on purpose. PyPI distribution:
data-product-forge-sdk. Import path:fluid_sdk. Same pattern aspyyaml↔yaml,scikit-learn↔sklearn. The PyPI name reflects the product brand; the import path stays short.
Zero dependencies beyond the Python standard library.
What can I build?
| Role | What it does | When you'd build one |
|---|---|---|
InfraProvider |
Provisions cloud resources (datasets, tables, IAM) | You're adding support for a new cloud platform |
CustomScaffold |
Generates files from a contract (CI configs, app code, IaC) | Your org has a standard project layout you want every team to use |
Validator |
Inspects a contract and emits findings | You have governance / compliance / cost rules to enforce |
CatalogAdapter |
Syncs product metadata to a catalog (DataHub, Atlan) | You want fluid contracts to flow into your existing catalog |
30-second example — your first plugin
# scaffold.py
from fluid_sdk import ContractHelper, CustomScaffold, write_file_action
class HelloScaffold(CustomScaffold):
name = "hello"
def plan(self, contract):
c = ContractHelper(contract)
return [
write_file_action(
path="README.md",
content=f"# {c.name}\n\n{c.description}\n".encode("utf-8"),
).to_dict(),
]
# tests/test_scaffold.py
from fluid_sdk.testing import CustomScaffoldTestHarness, LOCAL_CONTRACT
from scaffold import HelloScaffold
class TestHelloScaffold(CustomScaffoldTestHarness):
plugin_class = HelloScaffold
sample_contracts = [LOCAL_CONTRACT]
pytest runs 15+ conformance tests automatically. Determinism, idempotency, path-traversal safety, role declaration — all verified.
→ Full step-by-step in docs/getting-started/.
How users plug your plugin into the FLUID CLI
Plugin authors register via pyproject.toml:
[project.entry-points."fluid_build.custom_scaffolds"]
hello = "my_pkg.scaffold:HelloScaffold"
End users then:
pip install data-product-forge # the CLI
pip install data-product-forge-custom-scaffold # the engine
pip install your-plugin # what you wrote
And in any contract:
extensions:
customScaffold:
libraries:
- id: ci
source: { kind: pypi, package: your-plugin, version: ">=0.1" }
patterns:
- use: ci:hello
fluid generate custom-scaffold
# Your plugin's files appear in the workspace.
Documentation
Start here:
- Getting Started (5 minutes) — build your first plugin, see tests pass, run it.
- Your first real plugin (15 minutes) — build a complete GitLab CI generator. Realistic, deployable.
Working examples (every one runs pytest + python demo.py standalone):
examples/hello-scaffold/— the smallest possible plugin (~30 LOC)examples/gitlab-ci-scaffold/— full CI generator (~150 LOC, 27 tests)examples/steward-validator/— custom governance rule (~80 LOC, 22 tests)
Reference:
docs/reference/architecture.md— the four-layer modeldocs/reference/role-taxonomy.md— pick the right roledocs/reference/contract-parsing.md—ContractHelperAPIdocs/reference/conformance-testing.md— test harnesses
The public API in 10 lines
from fluid_sdk import (
CustomScaffold, # subclass for file-emitting plugins
InfraProvider, # subclass for cloud-infra plugins
Validator, # subclass for contract-inspection plugins
CatalogAdapter, # subclass for catalog-sync plugins
ContractHelper, # wrap any contract dict — typed read access
write_file_action, # builds a canonical write_file PluginAction
Finding, # validator authors emit these
)
# Everything else is in the role docs.
Why a separate SDK?
The full data-product-forge CLI pulls ~40 transitive dependencies. As a plugin author, you don't need any of that — you only need:
BasePlugin+ the four role subclasses- Action / result / metadata / capabilities data types
ContractHelperfor parsing fluid contracts- A test harness
…all in pure Python stdlib. The end user installs the full CLI; you only need data-product-forge-sdk. Faster pip install, no version-resolution headaches, your plugin works against multiple data-product-forge CLI versions.
License
Apache-2.0. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file data_product_forge_sdk-0.9.0.tar.gz.
File metadata
- Download URL: data_product_forge_sdk-0.9.0.tar.gz
- Upload date:
- Size: 26.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e142f5db56e77adc0b0b28d471523b20c12dae6953681b09f0b6a3e845bcbf97
|
|
| MD5 |
fb9644802f2e8fb11038f758838c8409
|
|
| BLAKE2b-256 |
612d39f7cb00c2d57b945bd7b8dcf67cef6a5d16d08aa51d8e2a453ce29aa8bc
|
Provenance
The following attestation bundles were made for data_product_forge_sdk-0.9.0.tar.gz:
Publisher:
release.yml on Agenticstiger/forge-cli-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
data_product_forge_sdk-0.9.0.tar.gz -
Subject digest:
e142f5db56e77adc0b0b28d471523b20c12dae6953681b09f0b6a3e845bcbf97 - Sigstore transparency entry: 1520210200
- Sigstore integration time:
-
Permalink:
Agenticstiger/forge-cli-sdk@9df7a3687f37aded05baf65189e65d6b73591b89 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/Agenticstiger
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9df7a3687f37aded05baf65189e65d6b73591b89 -
Trigger Event:
push
-
Statement type:
File details
Details for the file data_product_forge_sdk-0.9.0-py3-none-any.whl.
File metadata
- Download URL: data_product_forge_sdk-0.9.0-py3-none-any.whl
- Upload date:
- Size: 33.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e986c4b13154b0878c26195fb6b04f517e6e4dbdae0650495a8290a69b7eba0
|
|
| MD5 |
f05e7b5eaf688435235576939c976ef9
|
|
| BLAKE2b-256 |
076a8574101f679a03238a2b93ffaf328e70b77a0cace8e4818cd490bdb49bba
|
Provenance
The following attestation bundles were made for data_product_forge_sdk-0.9.0-py3-none-any.whl:
Publisher:
release.yml on Agenticstiger/forge-cli-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
data_product_forge_sdk-0.9.0-py3-none-any.whl -
Subject digest:
9e986c4b13154b0878c26195fb6b04f517e6e4dbdae0650495a8290a69b7eba0 - Sigstore transparency entry: 1520210314
- Sigstore integration time:
-
Permalink:
Agenticstiger/forge-cli-sdk@9df7a3687f37aded05baf65189e65d6b73591b89 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/Agenticstiger
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9df7a3687f37aded05baf65189e65d6b73591b89 -
Trigger Event:
push
-
Statement type: