Deveel.Events.Publisher.Webhook 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Deveel.Events.Publisher.Webhook --version 1.0.0
                    
NuGet\Install-Package Deveel.Events.Publisher.Webhook -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Deveel.Events.Publisher.Webhook" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Deveel.Events.Publisher.Webhook" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Deveel.Events.Publisher.Webhook" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Deveel.Events.Publisher.Webhook --version 1.0.0
                    
#r "nuget: Deveel.Events.Publisher.Webhook, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Deveel.Events.Publisher.Webhook@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Deveel.Events.Publisher.Webhook&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Deveel.Events.Publisher.Webhook&version=1.0.0
                    
Install as a Cake Tool

GitHub License GitHub Release GitHub Actions Workflow Status Codecov

Deveel Events

Deveel Events is a lightweight, extensible framework for publishing domain events in .NET applications, built on top of the CloudEvents standard.

The ambition of this framework is to implement a set of common patterns and practices for a simple and efficient event-driven architecture in .NET, without reinventing the wheel every time a team needs to broadcast domain events.

It is not in the scope of this project to provide a full-featured event storage system or a complex pub/sub platform. If you need those capabilities, consider pairing this library with a dedicated message broker — Deveel Events already ships channel adapters for the most popular ones.

Domain Events and DDD

Domain-Driven Design (DDD) treats domain events as first-class citizens of the model — facts about something that happened inside the domain, named in the ubiquitous language of domain experts (OrderPlaced, InvoiceIssued, UserRegistered).

Key properties of domain events:

  • Immutable facts — they describe what happened, not what should happen.
  • Decoupled producers and consumers — the producing bounded context does not need to know who is listening.
  • Cross-context integration — events are the preferred way to share information across bounded contexts without tight coupling.
  • Temporal decoupling — consumers can process events asynchronously, at their own pace.

Deveel Events implements the publishing side of this pattern: a transport-agnostic layer that broadcasts domain events from a bounded context to any number of downstream consumers, without prescribing how you model aggregates or build read models.

Event Schemas as Async API Contracts

Publishing an event is only half the story. Consumers need to know the shape of each event — its properties, types, and constraints — to deserialise it correctly and build reliable integrations. Without a formal contract, field renames silently break consumers and integration knowledge lives only in tribal memory.

Event schemas fill the same role for asynchronous messaging that OpenAPI/Swagger fills for REST APIs. The Deveel.Events.Schema package can derive a schema automatically from annotated data classes and export it as:

  • JSON Schema — for schema-registry integration and tooling.
  • YAML — for human-readable, version-controlled contract documents.
  • AsyncAPI 2.x — a complete, machine-readable async API specification. AsyncAPI tooling can generate documentation sites, client SDKs, and mock servers from it.

Treat schemas as public API contracts: version them, prefer additive changes, and communicate breaking changes in advance.

Motivation

Applications frequently need to notify other parts of the system about domain events. Teams end up rewriting the same boilerplate — serialising payloads, constructing envelopes, wiring up transport clients — over and over again.

Deveel Events provides a single, consistent way to publish events across any transport, so teams can focus on domain logic instead of infrastructure plumbing.

CloudEvents Standard

All events are modelled as CloudEvent objects, ensuring maximum interoperability with cloud platforms and services that implement the CNCF CloudEvents specification.

Requirements

All packages in this solution multi-target the following runtimes:

Runtime Version
.NET 8, 9, 10

Note: Deveel.Events.Schema.AsyncApi also requires the ASP.NET Core shared framework (Microsoft.AspNetCore.App), since it integrates with the Saunter AsyncAPI middleware.

Every package requires the Microsoft Dependency Injection infrastructure (Microsoft.Extensions.DependencyInjection). Below are the additional per-package dependencies automatically pulled in as transitive NuGet references:

Package Key Dependencies
Deveel.Events.Annotations (none — pure attribute library)
Deveel.Events.Publisher CloudNative.CloudEvents · Microsoft.Extensions.Options · Microsoft.Extensions.Logging.Abstractions
Deveel.Events.Publisher.AzureServiceBus Azure.Messaging.ServiceBus ≥ 7.20
Deveel.Events.Publisher.RabbitMq RabbitMQ.Client ≥ 7.2 · Deveel.Events.Amqp.Annotations
Deveel.Events.Publisher.MassTransit MassTransit ≥ 9.1
Deveel.Events.Publisher.Webhook Microsoft.Extensions.Http · Polly ≥ 7.2
Deveel.Events.Schema CloudNative.CloudEvents
Deveel.Events.Schema.Yaml YamlDotNet ≥ 16.3
Deveel.Events.Schema.AsyncApi Saunter ≥ 0.13 · YamlDotNet ≥ 16.3 · ASP.NET Core shared framework

Packages

Package Description NuGet
Deveel.Events.Annotations Attributes for describing event metadata on data classes NuGet
Deveel.Events.Publisher Core publisher infrastructure (IEventPublisher, DI helpers) NuGet
Deveel.Events.Publisher.AzureServiceBus Publish events to Azure Service Bus NuGet
Deveel.Events.Amqp.Annotations AMQP-specific routing attributes (exchange, routing key) NuGet
Deveel.Events.Publisher.RabbitMq Publish events to a RabbitMQ exchange NuGet
Deveel.Events.Publisher.MassTransit Publish events through a MassTransit bus NuGet
Deveel.Events.Publisher.Webhook Deliver events to HTTP webhook endpoints NuGet
Deveel.Events.Schema Schema model, fluent builder, JSON writer, and validation NuGet
Deveel.Events.Schema.Yaml Export an event schema as YAML NuGet
Deveel.Events.Schema.AsyncApi Export schemas as an AsyncAPI 2.x document NuGet

Documentation

Full documentation — installation, quick-start, concept guides, channel references, schema export, and testing — is available in the docs/ folder of this repository.

Section Description
Getting Started Installation and quick-start guide
Core Concepts Publisher, channels, and event annotations
Publisher Channels Azure Service Bus, RabbitMQ, MassTransit, Webhook
Event Schema Schema definition, export (JSON / YAML / AsyncAPI), and validation
Testing Unit-testing event publishing

Future Work

The framework is still evolving. See the ROADMAP for the full list of planned features and the version milestone in which each is expected to ship.

v1.x — Publisher & Schema maturity

  • Event Subscription & Routing (v1.1) — subscribe to event types with attribute-based filtering
  • Event Middleware Pipeline (v1.1) — composable cross-cutting hooks (logging, validation, tracing)
  • Dead-Letter Handling & Replay (v1.2) — capture and resubmit failed events
  • Outbox Pattern (v1.2) — guaranteed exactly-once publishing via a transactional outbox
  • Event Scheduler (v1.2) — defer event publishing to a future time or after a delay
  • OpenTelemetry Integration (v1.3) — end-to-end distributed tracing across service boundaries
  • Event Store & Audit Log (v1.3) — append-only persistence of domain events for auditing and read-model rebuilding
  • Publish Delivery Log (v1.3) — per-attempt operational record of every publish (channel, outcome, error code, latency, retry count) across pluggable storage backends (SQL, file, in-memory)
  • Schema Validation at Publish Time (v1.3) — validate events against their registered schema before dispatch
  • Event Versioning & Compatibility (v1.4) — breaking-change detection and upcasting
  • AsyncAPI / Schema Export Improvements (v1.4) — assembly scanning, CLI tooling, OpenAPI 3.1 webhooks
  • HTTP & gRPC Channels (v1.5) — direct service-to-service delivery without a broker

v2.x — Event Consumers

  • Webhook Consumer for ASP.NET Core (v2.0) — receive inbound CloudEvents over HTTP with signature verification and automatic routing
  • RabbitMQ Consumer (v2.0) — consume CloudEvents from RabbitMQ queues and route them through the subscription registry
  • Azure Service Bus Consumer (v2.0) — consume CloudEvents from Service Bus queues and topic subscriptions
  • MassTransit Consumer Bridge (v2.0) — expose Deveel Events subscriptions as MassTransit consumers
  • Expanded Testing Utilities (v2.1) — fluent publish assertions, in-memory event bus, and consumer-side test helpers

Monitor the open issues to see what is being actively worked on.

Contributing

We welcome bug reports, feature requests, and pull requests. Please read the Contributing Guidelines before submitting.

License

Released under the MIT License.

Authors

Developed and maintained by the Deveel team and released as an open-source project.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.2-pre.2 46 5/6/2026
1.2.0 86 5/2/2026
1.1.0 86 4/30/2026
1.0.0 94 4/26/2026