chain-client-sdk-dart/README.md
flemming-it 75a4b2b306
Some checks failed
Security / Security check (push) Failing after 1s
docs: old product name F∆I Platform -> Ch∆In + contact chain@flemming.ai
The old 'F∆I Platform' product name and platform@flemming.ai contact
survived in docs/NOTICE/descriptions/help text; the product is Ch∆In and
the contact is chain@flemming.ai. Generic 'cross-platform/platform-native'
left untouched.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
2026-06-16 10:14:33 +02:00

63 lines
2.2 KiB
Markdown

# fai_client_sdk (Dart)
gRPC client SDK for the Ch∆In hub. Used by F∆I Studio
(Tier-2 generic GUI) and any Tier-3 Dart/Flutter domain app
that wants to talk to a running `fai serve`.
One of the three SDK families documented in
`fai/platform/docs/architecture/sdks.md`:
* `fai-module-sdk` (Rust) — flow modules
* `fai-plugin-sdk` (Rust) — Studio plugins
* `fai_client_sdk` (Dart) — clients ← this package
Dir / repo carries the `_dart` / `-dart` language suffix
(`fai_client_sdk_dart` / `client-sdk-dart`); the Dart package
name itself does not (Dart-land doesn't need the suffix).
> **Status (2026-05-05):** scaffold. Public surface (`HubClient`,
> `HubEndpoint`) is committed; generated proto bindings land in
> a follow-up commit once the codegen step is wired in. Until
> then, downstream apps can compile against the stub and Studio
> uses mock data.
## 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_client_sdk_dart/
├── lib/
│ ├── fai_client_sdk.dart # Public API
│ └── src/
│ ├── hub_client.dart # Typed client wrapper
│ ├── channel_factory_io.dart # Native ClientChannel (HTTP/2)
│ ├── channel_factory_web.dart # GrpcWebClientChannel.xhr (HTTP/1.1)
│ └── generated/ # protoc output (committed; pinned to platform tag)
├── tools/
│ └── generate.sh # Wraps `protoc --dart_out=...` against ../fai_platform/proto
├── example/
└── pubspec.yaml
```
## Repo placement
Published as `fai/client-sdk-dart` on Forgejo
(`git.flemming.ai`).
## Versioning
Tracks the platform's wire-protocol version, not the platform
binary version. As long as `fai:platform@1.x` is current, this
SDK stays at `0.x` (will move to `1.0` once API stabilises);
when `fai:platform@2.0` lands, a `2.x` SDK ships in parallel
during the transition.