Community Provider Registry¶
This directory contains the community provider index — a curated registry of Community-tier providers authored by the vouchfx community.
How the model works — the JSON is a catalogue entry, not the provider¶
A common first-read confusion, resolved up front: a community provider consists of two entirely different artifacts, and only one of them is JSON.
- The provider itself is C# source, shipped as a NuGet package. It is a small project implementing the frozen
Vouchfx.Sdkcontract (IStepProvider,IStepBinder<T>,IStepValidator<T>,IStepCompiler<T>), compiled and published under Apache-2.0. Providers are compile-time, source-level plugins: the package is the distribution artifact — you add it as a NuGetPackageReferencein a custom runner and rebuild the host (for published providers), or build from source for unpublished ones; either way the provider is compiled into the host, never loaded at runtime. When the planned provider directory loader ships, packages will become runtime-loadable. The implementing-a-provider guide covers writing one end to end. - The registry entry is one JSON object in the shared
community-providers.jsonfile below — pure discovery metadata: the provider's name, its step kind, where its source lives, which NuGet package to install, the minimum engine version, and whether it holds the Vouched badge. Nobody publishes "a JSON file" as their provider; an author adds a single entry to this shared catalogue so users can find the package.
A Community-tier provider can live in either of two first-class places — every provider gets a registry entry here regardless:
- Your own repository (
"hosting": "external", the default): write the provider following the guide, publish it as an Apache-2.0 NuGet package, and add your entry with thenugetfield pointing at your package. - This repository's
community/directory ("hosting": "hub"): contribute the provider as source in a pull request — no NuGet account needed. Your PR addscommunity/<YourProvider>/(+ its.Testssibling) plus the registry entry; CI discovers and runs your tests automatically, and you remain the owner of your folder. The merge bar is licence (Apache-2.0), DCO, namespace hygiene and a green conformance lane — not a code review, and hosting here is not endorsement (that is what the Vouched badge is for). See CONTRIBUTING and the community submission PR template.
The first entry — rpc.json-rpc — is hub-hosted and doubles as the worked reference for both the guide and the submission shape.
Today, a published community provider is consumed as a NuGet package referenced from a small custom runner (ledger-jsonrpc is the worked example); a provider without a published package is consumed via a source-level build — clone the provider's repository (or this one, for hub-hosted providers), reference its project in your build, and rebuild your host. A one-command install experience (vouchfx providers install <package>) is planned and tracked on the engine's public roadmap.
One neighbouring thing this registry is not: the vouchfx-samples project hosts sample applications (systems under test in C#, Python and Java) with complete .e2e.yaml suites demonstrating how the engine tests them. It also includes the canonical worked example of consuming a community provider from this registry: ledger-jsonrpc, which depends on Vouchfx.Community.JsonRpc from NuGet.
About the Registry¶
The registry is stored in two files:
community-providers.json— the data file (array of provider entries)community-providers.schema.json— the JSON Schema (draft 2020-12) that validates entries
The registry is human-readable and machine-consumable. It powers: - Community discoverability — this rendered page and the JSON file itself are the browsable index - Planned tooling for provider discovery and installation, and a generated provider-listing page on the project website (both part of the engine roadmap)
The first entry is rpc.json-rpc — the reference Community-tier provider, hosted in this repository under community/. Its NuGet package Vouchfx.Community.JsonRpc (version 1.0.0-alpha.1) is published from this repository's CI pipeline and ready to consume.
How to Add an Entry¶
Option 1: Submit a Pull Request (entry only — external hosting)¶
- Fork this repository
- Edit
community-providers.jsonto add a new entry (see schema below) - Open a pull request with a clear title and description
- Ensure your entry validates against
community-providers.schema.json(see validation; CI validates it too)
Option 2: Submit your provider as source (hub hosting)¶
Open a pull request that adds community/<YourProvider>/ (+ its .Tests project) and your registry entry with "hosting": "hub" in one go — use the community submission template and see CONTRIBUTING for the checklist. No NuGet package required.
Option 3: Open an Issue¶
Click New Issue → Provider Listing and fill in the form. A maintainer will review and add your provider to the registry.
Entry Schema¶
Each provider entry in community-providers.json is a JSON object with the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | The provider's human-readable name (e.g. "Snowflake Assertion", "MQTT Publish") |
stepKindId |
string | Yes | The step type identifier in the form <family>.<provider> (e.g. db-assert.snowflake, mq-publish.mqtt). Must not collide with a Core provider's step kind (e.g. mq-publish.redis is Core and therefore taken) |
repo |
string | Yes | URL to the provider's repository (e.g. https://github.com/myorg/vouchfx-snowflake-provider; this repository's URL for hub-hosted providers) |
hosting |
enum | No | Where the source lives: "external" (your repository — the default when absent) or "hub" (contributed as source under community/) |
nuget |
string | Yes for external; optional until published for hub-hosted | NuGet package identifier (e.g. MyOrg.Steps.Snowflake). For external providers, must be the exact package id on NuGet.org. For hub-hosted providers, this field is optional unless you plan to publish to NuGet; if publishing, it is required and must equal the provider directory name (e.g. Vouchfx.Community.JsonRpc for community/Vouchfx.Community.JsonRpc). The publish workflow requires this field to cut a release tag. |
author |
string | Yes | The provider's author or organisation (e.g. "Acme Corp", "Jane Doe") |
minEngineVersion |
string | Yes | Minimum vouchfx engine version required (SemVer format, e.g. "1.0.0") |
vouched |
boolean | No | Maintainer-awarded Vouched badge (true/false). Absence means not vouched. Only maintainers may set this field (gated by CODEOWNERS on /registry/). |
vouchedVersion |
string | Yes, if vouched is true |
The provider version (NuGet package version for external providers, or commit SHA for hub-hosted) that was validated and passed the Vouched rubric review. The badge attests to that specific version only. Maintainer-set only. |
description |
string | Yes | A one-line summary of the provider's purpose (e.g. "Asserts state in a Snowflake data warehouse") |
Example Entry¶
A fictional entry showing the normal shape — source in the author's own repository, package on NuGet.org (without the Vouched badge):
{
"name": "Snowflake Assertion",
"stepKindId": "db-assert.snowflake",
"repo": "https://github.com/acme-corp/vouchfx-snowflake-provider",
"nuget": "AcmeCorp.Steps.SnowflakeAssert",
"author": "Acme Corporation",
"minEngineVersion": "1.0.0",
"description": "Asserts state in a Snowflake data warehouse using SQL queries"
}
An example entry with the Vouched badge (fictional):
{
"name": "Snowflake Assertion",
"stepKindId": "db-assert.snowflake",
"repo": "https://github.com/acme-corp/vouchfx-snowflake-provider",
"nuget": "AcmeCorp.Steps.SnowflakeAssert",
"author": "Acme Corporation",
"minEngineVersion": "1.0.0",
"vouched": true,
"vouchedVersion": "1.2.0",
"description": "Asserts state in a Snowflake data warehouse using SQL queries"
}
For a live example, see the first entry in community-providers.json — the hub-hosted rpc.json-rpc reference provider ("hosting": "hub", with its repo field pointing at this repository). The rpc.json-rpc entry has no vouched field; it has not yet gone through the Vouched badge review process. The registry field nuget for this provider is Vouchfx.Community.JsonRpc.
Field Rules¶
name— between 3 and 100 characters; should be descriptive and match the provider's purposestepKindId— must follow the pattern<family>.<provider>where family and provider are lowercase alphanumeric with hyphens (e.g.db-assert,mq-publish,cache-get)repo— must be a valid HTTPS URL to a public repository (GitHub, GitLab, Gitea, etc.)nuget— must be the exact package identifier on NuGet.org (case-sensitive); the package should be public and publicly resolvableauthor— between 3 and 100 characters; should clearly identify the author or organisationminEngineVersion— must be valid SemVer (e.g."1.0.0","1.1.0")vouched— optional boolean; only maintainers can set this field (gated by CODEOWNERS on /registry/); absence means not voucheddescription— between 10 and 200 characters; a single-line summary (no linebreaks)
Validation¶
Before submitting an entry, validate it against the schema:
Using ajv (CLI)¶
npm install -g ajv-cli
ajv validate -s registry/community-providers.schema.json -d registry/community-providers.json
Using a JSON Schema IDE¶
- VS Code: Install the RedHat YAML extension and open
community-providers.json; validation is automatic - Online: Use https://www.jsonschemavalidator.net/ and paste the schema and data
Programmatically¶
Any JSON Schema library can validate. Example in .NET (using JsonEverything):
using Json.Schema;
using System.Text.Json.Nodes;
var schema = JsonSchema.FromFile("community-providers.schema.json");
var instance = JsonNode.Parse(File.ReadAllText("community-providers.json"));
var result = schema.Evaluate(instance);
if (result.IsValid)
Console.WriteLine("Valid!");
else
foreach (var error in result.Errors)
Console.WriteLine($"Error: {error.InstanceLocation} — {error.Message}");
Updating an Entry¶
If you own a provider that is already listed:
- Fork this repository
- Update the relevant fields in
community-providers.json(e.g. updateminEngineVersion,description, orrepo) - Open a pull request
- A maintainer will review and merge if the changes are consistent with the provider's actual state
To request the Vouched badge: do not edit the vouched field in the registry yourself. Instead, open a Vouched request issue with evidence of all six rubric items. A maintainer will review and, if approved, open a one-line registry PR to set vouched: true with the supporting evidence link.
Verification¶
When a new entry is added or updated, the maintainers verify:
- For external entries: the NuGet package exists and is publicly resolvable
- For hub-hosted entries: the source under community/ builds and its conformance lane is green (when a nuget field is present, a release tag cannot be cut until the provider's dependencies — particularly Vouchfx.Sdk — are publicly resolvable from NuGet.org; e.g. rpc.json-rpc's package shipped from hub CI once the engine had published Vouchfx.Sdk at the pinned version)
- The repository URL is valid and accessible
- The entry validates against the schema (CI enforces this on every PR)
- The stepKindId does not conflict with existing entries or a Core provider (duplicates are rejected)
Badge and Tier Transitions¶
Earning the Vouched Badge¶
A provider earns the Vouched badge by meeting the published rubric in VOUCHED_CHECKLIST.md:
Path:
1. Provider is listed in Community tier
2. Author opens a Vouched request issue with evidence of all six rubric items
3. A maintainer reviews the issue (conformance, security, CSX, etc.)
4. On success, the maintainer opens a one-line registry PR setting "vouched": true
5. PR merges, badge appears in the registry
See GOVERNANCE.md for the full flow.
Badge Revocation¶
A maintainer may revoke the Vouched badge if a provider violates the rubric (e.g. high-severity CVE). The maintainer will notify the author before taking action.
Promotion to Core¶
A provider promoted to Core leaves the community registry entirely — Core providers are engine-repository citizens, never registry entries. Promotion decisions are made by the platform team and announced via the engine repository.
Questions?¶
- Can I list multiple step types for one provider? Create separate entries for each step type (e.g.
db-assert.snowflakeanddb-seed.snowflake). - Can I remove my provider from the registry? Yes, open an issue or a PR requesting removal. Once removed, the entry is archived in git history but no longer listed.
- What if my NuGet package is not on NuGet.org? List it in Community tier only if it is publicly resolvable (self-hosted feed, GitHub Packages, etc.). Update the
nugetfield with the full package identifier and any special installation instructions in your repository's README.
This registry is the source of truth for vouchfx provider discovery. Entries are validated against the JSON Schema and verified for consistency with the actual provider repositories.