Skip to main content
Glama
README.md
# Bowire

[![CI](https://img.shields.io/github/actions/workflow/status/Kuestenlogik/Bowire/ci.yml?branch=main&label=CI)](https://github.com/Kuestenlogik/Bowire/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/Kuestenlogik/Bowire/branch/main/graph/badge.svg)](https://codecov.io/gh/Kuestenlogik/Bowire)
[![NuGet](https://img.shields.io/nuget/v/Kuestenlogik.Bowire)](https://www.nuget.org/packages/Kuestenlogik.Bowire)
[![License](https://img.shields.io/github/license/Kuestenlogik/Bowire)](https://github.com/Kuestenlogik/Bowire/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/Kuestenlogik/Bowire?style=flat&label=stars)](https://github.com/Kuestenlogik/Bowire/stargazers)

**The API workbench that embeds in your own service.** gRPC, REST, GraphQL, JSON-RPC, SignalR, WebSocket, SSE, MQTT, Socket.IO, MCP, OData, AsyncAPI, AMQP, Kafka, Akka.NET, NATS, SOAP, Pulsar — run against any service URL with zero code changes.

[Quickstart](https://bowire.io/quickstart.html) · [Features](https://bowire.io/features.html) · [Why Bowire](https://bowire.io/why-bowire.html) · [Docs](https://bowire.io/docs/) · [Downloads](https://bowire.io/downloads.html) · [Bootcamp](https://bowire.io/bootcamp/)

[![Bowire workbench — discover, invoke, stream, record across protocols](https://raw.githubusercontent.com/Kuestenlogik/Bowire/main/site/assets/images/screenshots/ready.png)](https://bowire.io/)

## Install

```bash
# .NET tool (cross-platform, recommended)
dotnet tool install -g Kuestenlogik.Bowire.Tool
```

Windows MSIs, portable ZIPs, Docker images, `winget install Kuestenlogik.Bowire`, and `choco install bowire` — with a Homebrew tap still pending — all listed on the [Downloads page](https://bowire.io/downloads.html). It's the source of truth for what's available right now.

→ **[5-minute Quickstart](https://bowire.io/quickstart.html)** for the first call against your own service.

## Embedded mode

Mount the workbench inside an existing ASP.NET host:

```bash
dotnet add package Kuestenlogik.Bowire
```

```csharp
var app = WebApplication.Create(args);
app.MapBowire();   // workbench at /bowire
app.Run();
```

Discovery picks services off the host's `IServiceProvider` — REST routes, gRPC reflection, SignalR hubs, custom protocols. See [Setup → Embedded](https://bowire.io/docs/setup/embedded.html).

On a shared or production host, set `options.LockServerUrl = true` (standalone: `--url`) and, if needed, `options.AllowedServerUrls` (`--allowed-server-url`) and `options.AllowedAuthUrls` for identity providers (`--allowed-auth-url`). They are enforced server-side: the workbench then refuses to dial any target outside the configured set with `403`, so it can't be used as a relay into your network. See [Options → LockServerUrl](https://bowire.io/docs/embedding/options.html).

## Documentation

Everything user-facing lives at **[bowire.io](https://bowire.io)**. The most-asked entries:

- [Quickstart](https://bowire.io/quickstart.html) — zero to first call
- [Bootcamp](https://bowire.io/bootcamp/) — hands-on walkthrough, six units + capstone
- [Features](https://bowire.io/features.html) — workbench surfaces, recordings, mock, MCP
- [Protocols](https://bowire.io/docs/protocols/) — per-protocol setup and conventions
- [Architecture](https://bowire.io/docs/architecture/) — plugin model, host packages, ALC isolation
- [API reference](https://bowire.io/docs/api/) — DocFX-generated reference

## Roadmap & Community

- [ROADMAP.md](https://github.com/Kuestenlogik/Bowire/blob/main/ROADMAP.md) — what shipped, what's planned, what's deliberately out of scope
- [Community](https://bowire.io/community.html) — Discord, Discussions, Issues
- [CONTRIBUTING.md](https://github.com/Kuestenlogik/Bowire/blob/main/CONTRIBUTING.md) — plugin authoring, smoke tests, PR workflow

## License

[Apache 2.0](https://github.com/Kuestenlogik/Bowire/blob/main/LICENSE)

TDQS

A3.7/5.0

Scored across 28 tools

Disambiguation4/5

Most tools map to clearly distinct resources/actions (invoke vs subscribe, mock.start/stop/list, record.start/stop/replay/list). A few boundaries blur: bowire.discover vs bowire.lint (lint also discovers), bowire.test.run vs bowire.assert, and bowire.import vs bowire.har.import both parse external formats. Descriptions disambiguate these well, but note record.list's text calls record.replay '(planned)' even though it exists, which could confuse an agent.

Naming Consistency4/5

Consistent dotted namespacing (bowire.<resource>.<verb>, e.g. mock.start, auth-recording.list, cookies.clear) throughout. A handful of domain-level verbs sit at the top level (invoke, subscribe, assert, discover, lint, import), which is a reasonable but slightly different convention. Easily readable and predictable overall.

Tool Count3/5

28 tools is on the heavy side; even for a full API-testing platform some are niche diagnostics (contract.matrix, report.rollup, network.get, allowlist.show) that broaden the surface considerably. Each maps to a real capability from the underlying CLI, so it's not bloat for bloat's sake, but the set is at the upper end of comfortably navigable.

Completeness4/5

Strong lifecycle coverage: discover/invoke/subscribe, mock start/stop/list, record start/stop/replay/list, import/export, assertions, test runs, contract matrix, lint, auth recordings, cookies, allowlist. Gaps remain around mutating stored artifacts — no delete/rename for recordings, no collection/workspace CRUD or env mutation, and no way to inspect or edit assertions or collections after creation. Agents can work around most of these but will hit dead ends for cleanup/management tasks.

Maintenance

ActivityActive
ResponsivenessLimited data