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 25 tools

Disambiguation4/5

Tools are largely organized around distinct resources (recordings, mocks, auth recordings, cookies, allowlist, env), so most boundaries are clear. There is mild overlap between bowire.record.replay and bowire.record.start (which has a replay mode), and between bowire.auth-recording.capture vs capture-flow, but descriptions disambiguate them adequately.

Naming Consistency4/5

Names follow a predictable dotted namespace pattern (bowire.<domain>.<action>), e.g. record.start, mock.stop, cookies.clear. Minor deviations exist: several top-level actions (discover, invoke, subscribe, assert, lint) skip the domain level, and auth-recording uses a hyphen while other multi-word segments do not.

Tool Count3/5

At 25 tools the set sits at the heavy edge of the acceptable range, but the domain genuinely spans discovery/invoke, recording, mocks, auth capture, cookies, allowlist, network, HAR, lint, and reporting. Each cluster is small, yet the aggregate is borderline crowded for a single server.

Completeness4/5

Coverage is broad: recordings (start/stop/replay/list/assert), mocks (start/stop/list), auth capture, cookies, allowlist, discovery, invoke, lint, and reporting are all present. Minor gaps remain—no delete/export for recordings, no allowlist revoke, no detailed mock or recording get—that agents can mostly work around.