chain-client-sdk-dart/README.md
flemming-it 51cdd6ea91
Some checks failed
Security / Security check (push) Failing after 1s
docs: describe the shipped SDK surface instead of the 2026-05 scaffold status
README still claimed generated bindings would land later and
Studio ran on mock data; CHANGELOG was the create-package stub.
Both now state the actual surface (full Hub+HubAdmin client,
streaming, detached invocations, gRPC + gRPC-Web, bearer auth)
and the path/git-dep distribution model.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
2026-07-07 13:44:43 +02:00

2.8 KiB

chain_client_sdk (Dart)

gRPC client SDK for the Ch∆In hub. Used by Ch∆In Studio (Tier-2 generic GUI) and any Tier-3 Dart/Flutter domain app that wants to talk to a running chain serve.

One of the three SDK families documented in the platform repo (docs/architecture/client-sdks.md):

  • chain-module-sdk (Rust) — flow modules
  • chain-plugin-sdk (Rust) — Studio plugins
  • chain_client_sdk (Dart) — clients ← this package

Dir / repo carries the _dart / -dart language suffix (fai_chain_client_sdk_dart / chain-client-sdk-dart); the Dart package name itself does not (Dart-land doesn't need the suffix).

Status: functional and in production use by Studio. The generated proto bindings (lib/src/generated/chain/v1/) are committed and pinned to the platform's wire protocol (chain.v1). HubClient exposes the full Hub + HubAdmin surface — flow execution (submit incl. detach, submitStreaming, runSavedFlow), detached-invocation status/result/cancel, saved flows, store + module management, audit log (eventLog, streamEvents, verifyEventChain), approvals, federation admin, MCP/n8n endpoint management, System-AI administration, and bearer-token auth (HubClient(authToken:)). Works over native gRPC (desktop / CLI) and gRPC-Web (browser) via conditional channel factories.

Not yet published to pub.dev (publish_to: none) — consume it as a path or git dependency.

Why a separate SDK package

The platform hub speaks gRPC. Each Dart consumer (Studio plus each Tier-3 domain app) would otherwise re-generate proto bindings independently and write near-identical client boilerplate. This package centralises that work:

  • One source of generated proto bindings.
  • One typed HubClient wrapper with helpers.
  • One place to bump when the wire protocol evolves.

Layout

fai_chain_client_sdk_dart/
├── lib/
│   ├── chain_client_sdk.dart        # Public API
│   └── src/
│       ├── hub_client.dart           # Typed client wrapper (~55 methods)
│       ├── channel_factory_io.dart   # Native ClientChannel (HTTP/2)
│       ├── channel_factory_web.dart  # GrpcWebClientChannel.xhr (HTTP/1.1)
│       └── generated/                # protoc output (committed; pinned to platform proto)
├── tools/
│   └── generate.sh                  # Wraps `protoc --dart_out=...` against ../fai_chain/proto
├── example/
└── pubspec.yaml

Repo placement

Published as fai/chain-client-sdk-dart on Forgejo (git.flemming.ai).

Versioning

Tracks the platform's wire-protocol version, not the platform binary version. As long as chain.v1 is current, this SDK stays at 0.x (will move to 1.0 once the API stabilises); when a chain.v2 wire package lands, a 2.x SDK ships in parallel during the transition.