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
- Discovery — enumerate services / methods / topics / events from the target
- Invocation — send a request and return the response (or the stream)
- 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:
- REST → Try it with a public endpoint — Swagger Petstore (OpenAPI 3 & Swagger 2), JSONPlaceholder, DummyJSON, ReqRes, httpbin
- GraphQL → Try it with a public endpoint — Countries, Rick & Morty, Star Wars (SWAPI)
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.