Installation
Hermodr is distributed as a set of NuGet packages. Install only the packages you actually need.
Prerequisites
Supported Runtimes
All packages in the Hermodr solution multi-target the following .NET runtimes:
| Runtime | Version |
|---|---|
| .NET | 8, 9, 10 |
.NET 8 is the current Long-Term Support (LTS) release and the recommended minimum for new projects.
.NET 10 is the latest LTS release and is fully supported.
Required Infrastructure
All packages depend on the Microsoft Dependency Injection infrastructure. Make sure your project references:
dotnet add package Microsoft.Extensions.DependencyInjection
This is already provided automatically in ASP.NET Core, Worker Service, and most other host-based project templates.
ASP.NET Core Requirement
The Hermodr.Schema.AsyncApi package references the ASP.NET Core shared framework (Microsoft.AspNetCore.App) because it integrates with the Saunter AsyncAPI middleware. It must be used in a project that targets the Microsoft.NET.Sdk.Web SDK or explicitly includes the Microsoft.AspNetCore.App framework reference.
Per-Package Dependencies
The table below lists the key NuGet packages that each library brings in as transitive dependencies. You do not need to install these directly — they are declared in each package's .nuspec and restored automatically.
| Package | Key Transitive Dependencies |
|---|---|
Hermodr.Annotations | (none — pure attribute library) |
Hermodr.Publisher | CloudNative.CloudEvents · Microsoft.Extensions.Options · Microsoft.Extensions.Logging.Abstractions |
Hermodr.Publisher.AzureServiceBus | Azure.Messaging.ServiceBus ≥ 7.20 |
Hermodr.Publisher.RabbitMq | RabbitMQ.Client ≥ 7.2 · Hermodr.Amqp.Annotations |
Hermodr.Publisher.MassTransit | MassTransit ≥ 9.1 |
Hermodr.Publisher.Webhook | Microsoft.Extensions.Http.Resilience ≥ 9.6 |
Hermodr.Publisher.Outbox | Deveel.Repository.Manager · Microsoft.Extensions.Hosting.Abstractions |
Hermodr.Publisher.Outbox.EntityFramework | Hermodr.Publisher.Outbox · Deveel.Repository.EntityFramework · Microsoft.EntityFrameworkCore.Relational |
Hermodr.Subscriptions | Hermodr.Publisher · Deveel.Filters · Microsoft.Extensions.Logging.Abstractions |
Hermodr.Schema | CloudNative.CloudEvents |
Hermodr.Schema.Yaml | YamlDotNet ≥ 16.3 |
Hermodr.Schema.AsyncApi | Saunter ≥ 0.13 · YamlDotNet ≥ 16.3 · ASP.NET Core shared framework |
Hermodr.TestPublisher | Hermodr.Publisher |
Core package
Every application that publishes events needs the core publisher package:
dotnet add package Hermodr.Publisher
Channel packages
Add one or more channel packages depending on the transports you want to use:
# Azure Service Bus
dotnet add package Hermodr.Publisher.AzureServiceBus
# RabbitMQ
dotnet add package Hermodr.Publisher.RabbitMq
# MassTransit
dotnet add package Hermodr.Publisher.MassTransit
# HTTP Webhooks
dotnet add package Hermodr.Publisher.Webhook
# Transactional Outbox
dotnet add package Hermodr.Publisher.Outbox
# Transactional Outbox + Entity Framework Core
dotnet add package Hermodr.Publisher.Outbox.EntityFramework
Subscriptions package
To add in-process event subscription and dispatching:
dotnet add package Hermodr.Subscriptions
Annotation package
If you want to annotate your data-transfer classes with event metadata:
dotnet add package Hermodr.Annotations
For AMQP-specific routing metadata (exchange name, routing key):
dotnet add package Hermodr.Amqp.Annotations
Schema packages
# Core schema model, builder, JSON writer, and validator
dotnet add package Hermodr.Schema
# Export schemas as YAML
dotnet add package Hermodr.Schema.Yaml
# Export schemas as AsyncAPI 2.x documents (JSON or YAML)
dotnet add package Hermodr.Schema.AsyncApi
Test package
dotnet add package Hermodr.TestPublisher
Pre-release builds
Pre-release packages are published to GitHub Packages. To consume them, add the Deveel GitHub Packages feed to your NuGet sources:
<!-- nuget.config -->
<configuration>
<packageSources>
<add key="deveel-github" value="https://nuget.pkg.github.com/deveel/index.json" />
</packageSources>
</configuration>
You will also need a GitHub Personal Access Token (PAT) with read:packages scope and add it as a credential for the feed.
What's next?
→ Quick Start — publish your first event in minutes.