Fabric is transport-aware but not transport-fragmented. The same profile concepts should survive across HTTP, streaming, local process, and internal service bindings.
Binding Maturity
| Binding | Status | Used for |
|---|---|---|
| JSON-RPC over HTTP | Strong | Service-to-service calls, public gateway RPC, inference endpoints |
| HTTP + SSE | Strong | Long-running generation and event streams where HTTP deployment is simplest |
| JSONL over stdio | Strong for local tools | Local agents, CLIs, and subprocess integration |
| Internal binary frames | Internal | Performance-sensitive runtime or sync paths |
| WebSocket | Partial | Gateway/client and compatibility streaming surfaces |
HTTP JSON-RPC
HTTP JSON-RPC is the most stable shared binding. Requests are ordinary JSON-RPC objects sent to a service endpoint such as /rpc.
{
"jsonrpc": "2.0",
"method": "inference/models.list",
"params": {},
"id": "models-1"
}
Streaming
Streaming can use HTTP + SSE or WebSocket depending on the endpoint. Services should preserve the same logical event sequence:
| Event | Meaning |
|---|---|
started | Work accepted and stream initialized |
delta | Partial text, tool, artifact, or status update |
completed | Stream reached a terminal success state |
failed | Stream reached a terminal error state |
cancelled | Stream ended because cancellation was requested |
Local Process Transport
JSONL over stdio is preferred for local tools and agent subprocesses because it is easy to inspect, works without a port allocation, and fits CLI execution.
Gateway Guidance
Diminuendo can expose multiple bindings at once, but the internal rule remains: normalize to Fabric semantics first, then project to the requested transport or edge adapter.