Protocol Guides

Bowire ships with fourteen first-party protocol plugins plus seven sibling plugins (AMQP, Kafka, TacticalAPI, Akka.NET, DIS, UDP, Surgewave) that live in their own NuGet packages and install via bowire plugin install. Each implements IBowireProtocol and auto-registers at startup. Install only the ones you need.

First-party protocols

Protocol Package Discovery Call types
gRPC Kuestenlogik.Bowire.Protocol.Grpc Server Reflection · .proto upload Unary, Server / Client / Bidi streaming
REST Kuestenlogik.Bowire.Protocol.Rest OpenAPI 3 / Swagger 2 · IApiDescriptionGroupCollectionProvider Request / response
GraphQL Kuestenlogik.Bowire.Protocol.GraphQL Schema introspection · SDL upload Query, Mutation, Subscription
SignalR Kuestenlogik.Bowire.Protocol.SignalR Endpoint metadata scan Invoke, Server streaming, Duplex
WebSocket Kuestenlogik.Bowire.Protocol.WebSocket Manual (no inherent discovery) Duplex with text / binary frames
SSE Kuestenlogik.Bowire.Protocol.Sse Attribute · manual registration Server streaming
MQTT Kuestenlogik.Bowire.Protocol.Mqtt Topic subscribe / publish (MQTT 3.1.1, 5.0 via MQTTnet) Pub / Sub, Request / Response
NATS Kuestenlogik.Bowire.Protocol.Nats Subject sampling · JetStream streams · Services API ($SRV.PING) Pub / Sub / Request, Stream consume
SOAP Kuestenlogik.Bowire.Protocol.Soap WSDL 1.1 <portType> + <binding> walk Unary (SOAP 1.1 / 1.2)
JSON-RPC Kuestenlogik.Bowire.Protocol.JsonRpc OpenRPC rpc.discover · freeform fallback Unary
Pulsar Kuestenlogik.Bowire.Protocol.Pulsar Pulsar HTTP admin (/admin/v2/persistent) Produce (Unary), Subscribe (ServerStreaming)
Socket.IO Kuestenlogik.Bowire.Protocol.SocketIo Manual (namespace / event) Duplex with ack
OData Kuestenlogik.Bowire.Protocol.OData CSDL metadata endpoint Request / response
MCP Kuestenlogik.Bowire.Protocol.Mcp Wraps other protocols as MCP tools Unary (tool invocation)

Sibling plugins

These ship from their own repos / NuGet packages on independent release cadences. Install via the CLI:

Protocol Package Discovery Call types
AMQP Kuestenlogik.Bowire.Protocol.Amqp RabbitMQ Management HTTP API (0.9.1) · synthetic Broker service (1.0) Publish (Unary), Consume (ServerStreaming)
Kafka Kuestenlogik.Bowire.Protocol.Kafka IAdminClient.GetMetadata Consume (ServerStreaming), Produce (Unary)
TacticalAPI Kuestenlogik.Bowire.Protocol.TacticalApi Bundled .proto set (no Server Reflection required) Typed CRUD (Unary) + server-streaming subscribe
Akka.NET Kuestenlogik.Bowire.Protocol.Akka DI-resolved ActorSystem (embedded only) Mailbox tap (server-streaming Tap/MonitorMessages)
DIS Kuestenlogik.Bowire.Protocol.Dis Live UDP-multicast probe · entity-scoped streams · mock replay Per-entity PDU stream, exercise-wide stream
UDP Kuestenlogik.Bowire.Protocol.Udp URL-bind any UDP endpoint Datagram listener (multicast / broadcast / unicast)
Surgewave (pre-release) Kuestenlogik.Bowire.Protocol.Surgewave Cluster service · pending native admin API Consume (ServerStreaming), Produce (Unary)

Writing your own: see Custom protocols.

Architecture at a glance

graph LR
    A[Bowire Core] --> B[gRPC]
    A --> C[REST]
    A --> D[GraphQL]
    A --> E[SignalR]
    A --> F[WebSocket]
    A --> G[SSE]
    A --> H[MQTT]
    A --> NATS[NATS]
    A --> SOAP[SOAP]
    A --> JRPC[JSON-RPC]
    A --> PULSAR[Pulsar]
    A --> I[Socket.IO]
    A --> J[OData]
    A --> K[MCP]
    A --> M[Surgewave]
    A --> N[Kafka]
    A --> O[DIS]
    A --> P[UDP]
    A --> Q["Akka.NET"]
    A --> AMQP[AMQP]
    A --> R[TacticalAPI]
    A --> L[Custom plugins]
    style A fill:#6366f1,color:#fff
    style L stroke-dasharray: 5 5
    style R stroke-dasharray: 3 3

What every plugin provides

  1. Discovery — enumerate services / methods / topics / events from the target
  2. Invocation — send a request and return the response (or the stream)
  3. Streaming / channels — where the protocol supports it, yield messages as they arrive

The UI stays protocol-agnostic: the same sidebar, request editor, and response viewer renders every plugin's output. Protocol-specific details (e.g. gRPC metadata, SignalR hub methods, MQTT topic wildcards) show up as extra fields in the request form only when the active plugin declares them.

Multiple protocols in one session

Every installed plugin runs simultaneously. A single Bowire instance against a service that speaks gRPC, REST, and SignalR shows all three in the sidebar with per-protocol badges. Filter to a single protocol via the command palette or the sidebar protocol pills.

Public test endpoints

If you want to try Bowire against a real-world service before standing up your own host, each protocol guide ends with a "Try it with a public endpoint" section listing well-known, anonymously-callable endpoints you can pass straight to --url:

These are third-party services that may rate-limit or disappear without notice. The per-protocol Bowire.Samples/ projects are the canonical try-it path for sustained testing.