Herdr UI
Herdr의 TUI가 뛰어나며, 창을 통해 추가되는 기능
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Tools for describing, generating and validating API descriptions in ASP.NET Core, for request/response APIs and for event-driven, workflow-based ones.
The flagship package, Bielu.AspNetCore.AsyncApi, generates AsyncAPI documents from minimal or controller-based APIs, with the same developer experience as Microsoft.AspNetCore.OpenApi. Around it, the repository ships libraries and tools for Arazzo workflows, Overlay transformations, an RFC 9727 API catalog and CloudEvents messages.
📖 Full documentation: https://apidescriptions.bielu.pl/
| Specification | Versions | Generated by | Read / validated by |
|---|---|---|---|
| AsyncAPI | 3.1.0 (default), 2.6.0 | Bielu.AspNetCore.AsyncApi | Bielu.AspNetCore.AsyncApi.Cli, Bielu.AspNetCore.AsyncApi.Merger |
| Arazzo | 1.0.x, 1.1.x | Bielu.AspNetCore.Arazzo (1.1.0 by default) | Bielu.Arazzo.NET, Bielu.Arazzo.NET.Readers, Bielu.Arazzo.Cli |
| Overlay | 1.0.x, 1.1.x | not generated; applied by Bielu.Overlay.NET | Bielu.Overlay.NET, Bielu.Overlay.NET.Readers, Bielu.Overlay.Cli |
| API Catalog (RFC 9727) | RFC 9727, as an RFC 9264 Linkset | Bielu.AspNetCore.ApiCatalog | not read |
| CloudEvents | 1.0 (binary and structured mode) | Bielu.AspNetCore.AsyncApi.CloudEvents, as AsyncAPI message headers or payload | not read |
| Apache Avro | 1.9.0 declared (schemaFormat), configurable | Bielu.AspNetCore.AsyncApi.Avro, as AsyncAPI message payloads | not read |
| Protocol Buffers | proto2, proto3 (schemaFormat version 2 or 3); editions files keep their JSON Schema | Bielu.AspNetCore.AsyncApi.Protobuf, as .proto payload sources | not read |
| xRegistry | 1.0-rc4 (message and schema registries; read-only) | Bielu.AspNetCore.XRegistry, served from the AsyncAPI documents | not read |
| Model Context Protocol | as negotiated by the ModelContextProtocol C# SDK 2.3 | Bielu.AspNetCore.ApiDescriptions.Mcp (experimental), as tools and resources over the served documents | not read |
The runtime libraries target .NET 10. See Supported .NET versions for the support matrix and the policy for adding and removing targets.
dotnet add package Bielu.AspNetCore.AsyncApi
dotnet add package Bielu.AspNetCore.AsyncApi.Attributes
# Optional: interactive documentation UI
dotnet add package Scalar.AspNetCore
Prefer a ready-made project? Install the templates and run dotnet new asyncapi-webapi
(see Templates):
dotnet new install Bielu.AspNetCore.AsyncApi.Templates
using Bielu.AspNetCore.AsyncApi.Extensions;
using Scalar.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAsyncApi(options =>
{
options.AddServer("mosquitto", "test.mosquitto.org", "mqtt");
options.WithInfo("Streetlights API", "1.0.0");
});
var app = builder.Build();
app.MapAsyncApi(); // GET /asyncapi/v1.json
app.MapScalarApiReference(options =>
{
options.AddAsyncApiDocument("v1", "Streetlights API", "/asyncapi/v1.json");
});
app.Run();
using Bielu.AspNetCore.AsyncApi.Attributes;
[AsyncApi]
public class StreetlightMessageBus
{
[Channel("light/measured", Servers = new[] { "mosquitto" })]
[SendOperation(typeof(LightMeasuredEvent), "Light", Summary = "Publishes a light measurement.")]
public void PublishLightMeasurement(LightMeasuredEvent lightMeasuredEvent) { }
}
Run the app and open /asyncapi/v1.json for the document or /scalar for the UI. The
Getting Started guide walks through this in more detail.
dotnet build with
dotnet getdocument, alongside the app's OpenAPI and Arazzo documentsAsp.Versioning) integration for a document per API versionschemaFormat: application/vnd.apache.avro) converted from the generated JSON Schemas/.well-known/api-catalog, listing every AsyncAPI, OpenAPI and Arazzo document the app servesdotnet new templates for Web API, SignalR, gRPC, worker and multi-project solutions| Package | Description |
|---|---|
Bielu.AspNetCore.AsyncApi | Core library: AddAsyncApi/MapAsyncApi, schema generation, transformers, Native AOT source generator |
Bielu.AspNetCore.AsyncApi.Attributes | Attributes for declaring channels, operations and messages, with the AsyncAPI analyzers |
Bielu.AspNetCore.AsyncApi.Versioning | Asp.Versioning integration (AddAsyncApiForApiVersions) |
Bielu.AspNetCore.AsyncApi.Wolverine | Builds channels and operations from Wolverine's message routing |
Bielu.AspNetCore.AsyncApi.CloudEvents | Describes messages as CloudEvents 1.0 events |
Bielu.AspNetCore.AsyncApi.Avro | AddAvroPayloads(): describes message payloads as Apache Avro schemas |
Bielu.AspNetCore.AsyncApi.Protobuf | AddProtobufPayloads(): describes Protocol Buffers payloads by their .proto source |
Bielu.AspNetCore.XRegistry | Serves the messages and payload schemas as a read-only CNCF xRegistry (MapXRegistry) |
| Package | Description |
|---|---|
Bielu.AspNetCore.AsyncApi.Scalar | Shared infrastructure for the Scalar console plugins |
Bielu.AspNetCore.AsyncApi.Scalar.SignalR (+ .Aspire) | Interactive SignalR console |
Bielu.AspNetCore.AsyncApi.Scalar.Grpc (+ .Aspire) | Interactive gRPC-Web console |
Bielu.AspNetCore.AsyncApi.Scalar.Broker | Broker console with an opt-in server-side publish/tail bridge |
Bielu.AspNetCore.AsyncApi.Scalar.Broker.Kafka | Kafka driver for the broker console |
| Package | Description |
|---|---|
Bielu.Arazzo.NET | Framework-free Arazzo object model, writers, validation and runtime expressions |
Bielu.Arazzo.NET.Readers | JSON and YAML readers for Arazzo documents |
Bielu.AspNetCore.Arazzo | AddArazzo/MapArazzo, fluent workflow builder, startup validation against the app's own documents |
Bielu.AspNetCore.Arazzo.Overlay | AddOverlay(...) for Arazzo documents |
Bielu.Overlay.NET | Framework-free Overlay 1.0/1.1 object model, validator and apply engine for any JSON/YAML description |
Bielu.Overlay.NET.Readers | JSON and YAML readers for Overlay documents |
Bielu.AspNetCore.ApiCatalog | RFC 9727 API catalog endpoint (MapApiCatalog) |
| Package | Description |
|---|---|
Bielu.AspNetCore.AsyncApi.Cli | dotnet asyncapi: getdocument, merge, validate, diff |
Bielu.Arazzo.Cli | dotnet arazzo: validate, lint and diff Arazzo documents |
Bielu.Overlay.Cli | dotnet overlay: apply and validate overlays |
Bielu.AspNetCore.AsyncApi.Templates | dotnet new templates: asyncapi-webapi, -signalr, -grpc, -console, -sln |
Bielu.AspNetCore.AsyncApi.ApiDescription.Server | MSBuild targets that run dotnet asyncapi after each build |
Bielu.AspNetCore.ApiDescriptions | Build-time generation shared by every document family; comes in with Bielu.AspNetCore.AsyncApi and Bielu.AspNetCore.ApiCatalog |
Bielu.AspNetCore.ApiDescriptions.Mcp | Experimental: the app's API descriptions as Model Context Protocol tools and resources (WithApiDescriptions) |
Bielu.Spec.Shared and Bielu.Cli.Shared hold internals shared by the packages above and are not meant to be referenced
directly.
The src/examples folder has runnable samples:
| Example | Shows |
|---|---|
StreetlightsAPI | Minimal single-service app; the best starting point |
SignalRChat | SignalR hub with the interactive Scalar console |
GrpcGreeter | gRPC service with the interactive gRPC-Web console |
aspire | .NET Aspire microservices behind a YARP gateway that merges their AsyncAPI documents |
OverlayDemo | Overlays applied to an AsyncAPI and an Arazzo document |
AotStreetlights | PublishAot with the source-generated metadata provider |
BuildTimeDocuments | OpenAPI, AsyncAPI and Arazzo documents written by dotnet getdocument |
cd src/examples/StreetlightsAPI
dotnet run
# AsyncAPI JSON: http://localhost:5000/asyncapi/v1.json
# Scalar UI: http://localhost:5000/scalar
AsyncAPI
Arazzo, Overlay and API catalog
The changelog lists what changed in each release.
The repository needs the .NET 10 SDK. The solution is src/Bielu.AspNetCore.AsyncApi.slnx.
dotnet build src/Bielu.AspNetCore.AsyncApi.slnx
dotnet test
See CONTRIBUTING.md before opening a pull request. Every pull request needs a changeset.
Copyright (c) 2025 Arkadiusz Biel. Licensed under the MIT License.
AddOverlay(...) for AsyncAPI documents |
Bielu.AspNetCore.AsyncApi.Merger | Merges several AsyncAPI documents, for example behind a gateway |
Bielu.AspNetCore.AsyncApi.Extensions.Protocols.SignalR | SignalR bindings |
Bielu.AspNetCore.AsyncApi.Extensions.Protocols.Grpc | gRPC bindings |
Bielu.AspNetCore.AsyncApi.Extensions.Protocols.Sse | Server-Sent Events bindings |
Bielu.AspNetCore.AsyncApi.Extensions.Protocols.WebRtc | WebRTC bindings |