Table of Contents

Plugin sources and live progress

Run dotnet run --project examples/sources -c Release from the repository root. The example starts a trusted local C# plugin, collects a 200 MiB generated source into an atomic request-owned result, delivers it to a bounded sink, and prints three progress items as they arrive. No Docker service is used.

Authors register Source<TInput> and return a readable Stream; the SDK owns its disposal. Consumers call Composition.CollectAsync with a tenant-bound client and a ResultScope. Collection enforces the scope's byte/object quotas and removes partial files on failure or cancellation. Use CopyToAsync to send the committed result to an HTTP response or another caller-owned stream. The same consumer calls work with RemotePluginClient through an authenticated gateway binding. Sources require exclusive bindings; shared workers support unary calls only.

JSON streams retain the 64 MiB total limit. Large binary sources use bounded blocks and the result scope's independent quotas. PluginStreamOptions controls one exchange timeout and the total operation lifetime, including consumer pauses.