PouryaKit.Messaging.Wolverine 0.1.0-preview.2

This is a prerelease version of PouryaKit.Messaging.Wolverine.
dotnet add package PouryaKit.Messaging.Wolverine --version 0.1.0-preview.2
                    
NuGet\Install-Package PouryaKit.Messaging.Wolverine -Version 0.1.0-preview.2
                    
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="PouryaKit.Messaging.Wolverine" Version="0.1.0-preview.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PouryaKit.Messaging.Wolverine" Version="0.1.0-preview.2" />
                    
Directory.Packages.props
<PackageReference Include="PouryaKit.Messaging.Wolverine" />
                    
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 PouryaKit.Messaging.Wolverine --version 0.1.0-preview.2
                    
#r "nuget: PouryaKit.Messaging.Wolverine, 0.1.0-preview.2"
                    
#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 PouryaKit.Messaging.Wolverine@0.1.0-preview.2
                    
#: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=PouryaKit.Messaging.Wolverine&version=0.1.0-preview.2&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=PouryaKit.Messaging.Wolverine&version=0.1.0-preview.2&prerelease
                    
Install as a Cake Tool

PouryaKit.Messaging.Wolverine

NuGet .NET 10 License: MIT

PouryaKit.Messaging.Wolverine

Durable deliveries on Wolverine, with the message store in PostgreSQL. A Composition Root declares here what a Module handles, publishes and subscribes to, and which commands it runs later or on a cadence. Every one of these is stored in the Outbox in the commit that causes it and sent only after it, and each delivery runs as an Operation of its own, is retried, and ends as a dead letter you can replay when its attempts run out.

Install

dotnet add package PouryaKit.Messaging.Wolverine --prerelease

When to use it

  • You declare Notification Handlers, publications, Snapshots and subscriptions in a Composition Root.
  • A command must run later, such as a quote's expiry, or on a cadence, such as a nightly reconciliation.
  • You set the retries, or find and replay dead letters.

The Host chooses its store package: PouryaKit.Messaging.Wolverine.EFCore for EF Core Modules and PouryaKit.Messaging.Wolverine.Marten for Stream Modules. PouryaKit.Messaging.Wolverine.RabbitMq adds a broker between Hosts.

Quick start

Declare a Module's messaging in its Composition Root, from the Proving Sample's Catalog and Billing:

module.AddPouryaKitNotificationHandlers();
module.Publish<ProductCreatedV1>("catalog.product-created.v1");
module.Subscribe<ProductCreatedV1, OpenPriceListIntegrationEventHandler>(
    "billing.product-created"
);
module.AddPouryaKitDelayedCommand<ExpireQuoteCommand>("billing.expire-quote");

Schedule a delayed command from a handler; the Unit of Work writes it with the quote, in one commit:

internal sealed class OpenQuoteCommandHandler(
    IRepository<Quote, QuoteId> quotes,
    IDelayedCommands later,
    TimeProvider time
) : CommandHandler<OpenQuoteCommand>
{
    public override async Task<Result> Handle(
        OpenQuoteCommand command,
        CancellationToken cancellationToken
    )
    {
        var quote = Quote.Open(new QuoteId(command.QuoteId), time.GetUtcNow() + command.ValidFor);
        await quotes.AddAsync(quote, cancellationToken);
        later.Schedule(new ExpireQuoteCommand(command.QuoteId), quote.ExpiresOn);
        return Result.Success();
    }
}

Declare recurring work under a named system Actor, its cadence from the Host's configuration:

module
    .AddPouryaKitRecurringCommand(
        "inventory.reconcile-stock",
        systemActor: "inventory.stock-reconciler",
        occurrence => new ReconcileStockCommand(occurrence)
    )
    .BindConfiguration("Inventory:ReconcileStock");

What you get

  • Nothing sent before the commit, and what was committed kept in the message store until it is delivered or set aside.
  • A subscription of its own for each handler, retried and set aside on its own.
  • A Receipt for each delivery, so its database effect applies once.
  • Delayed commands that run as a continuation of the Operation that scheduled them, and recurring commands that run as a named system Actor.
  • Dead letters you can find and replay.

The Kit's own deliveries need no generated code, but a Wolverine handler a Host adds does: outside Development, a Host without that code does not start, so generate it before the Release build. See Prepare a release.

Learn more

Product Compatible and additional computed target framework versions.
.NET 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 (4)

Showing the top 4 NuGet packages that depend on PouryaKit.Messaging.Wolverine:

Package Downloads
PouryaKit.Messaging.Wolverine.EFCore

Every EF Core Module's Outbox and Receipts on Wolverine: what a Module publishes is written in the commit of its change, in PostgreSQL.

PouryaKit.Messaging.Wolverine.RabbitMq

Integration Events and Snapshots between Hosts over RabbitMQ, with the retries, Receipts and dead letters of a delivery inside one Host.

PouryaKit.Messaging.Wolverine.Sagas

Sagas on Wolverine: Integration Events start and advance them, their timeouts end them, and each step is claimed once in PostgreSQL.

PouryaKit.Messaging.Wolverine.Marten

A Stream's messages sent through Wolverine's Marten outbox, so its events commit with the Notifications and Integration Events they cause.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-preview.2 92 11/1/2026
0.1.0-preview.1 100 10/31/2026
0.1.0-preview.0.28 91 10/26/2026