Skip to content

Wolverine

Open source · Critter Stack

Wolverine

Command bus, message bus, and HTTP endpoints

A next-generation mediator, message bus, and HTTP framework for .NET with the least ceremony of any of them.

Wolverine handles in-process commands, distributed messages, and HTTP requests with plain methods instead of base classes and interfaces. Its runtime generates the code around each handler at build time, so the resulting pipeline is short, readable, and fast, and your business logic stays a pure function that is trivial to test.

Durable messaging is built in rather than bolted on: a transactional inbox and outbox, retries, circuit breakers, dead letters, sagas, and scheduled and recurring messages all work the same way across every transport and database Wolverine supports.

What Wolverine Gives You

Handlers as plain methods

No base classes, no interfaces, no boilerplate. Compile-time code generation and Native AOT support keep the pipeline lean.

Durable messaging

Transactional inbox and outbox, exponential retries, circuit breakers, and dead letter queues, with the same semantics on every transport.

Every major transport

RabbitMQ, Azure Service Bus, AWS SQS and SNS, Kafka, NATS, Pulsar, MQTT, gRPC, Redis, SignalR, and local queues in one application.

HTTP endpoints

Wolverine.HTTP turns the same handler model into ASP.NET Core endpoints built for vertical slice architecture.

Sagas and scheduling

Stateful sagas, scheduled messages, and cron-based recurring jobs that are ordinary messages with ordinary handlers.

Persistence and observability

First-class Marten, Polecat, Fisher, and EF Core integration, OpenTelemetry tracing and metrics, and CritterWatch for operations.

Start Here

New to Wolverine? These 5 posts are the ones to read first, in order.

  1. 1Like Vertical Slice Architecture? Meet Wolverine.HTTP!Wolverine.HTTP is a first-class HTTP framework for ASP.NET Core built for vertical slice architecture — low ceremony, no Mediator library, built-in transactional outbox, and middleware more powerful than IEndpointFilter.
  2. 2Wolverine is the Undisputed Champion of Low Ceremony CodeNServiceBus and MassTransit have both shipped welcome improvements to their message handler ergonomics. Let's give credit where it's due, then walk through why Wolverine's approach to low ceremony code — no mandatory anything, inlined dependencies, pure function handlers, cascading messages, and readable generated code — is still in a class of its own.
  3. 3EF Core is Better with WolverineWolverine has a strong development and production-time story for EF Core developers — transactional middleware, automatic outbox/inbox, runtime database migrations, test data resets, and declarative persistence.
  4. 4Wolverine Best Practices, RevisitedThe Wolverine Best Practices guide was written in 2023 and pointed at a handful of blog posts from that year. We've rewritten it from scratch: the A-Frame Architecture front and center, concrete advice on dividing handlers and error handling by category, the at-least-once rules every messaging community agrees on, and links to the tutorials that didn't exist back then.
  5. 5Wolverine's End to End Multi-TenancyWolverine treats the tenant id as message metadata, and that one decision carries the tenant from HTTP detection, into the right Marten, Polecat, or EF Core session, onto every cascaded message, and into the only transactional inbox and outbox in .NET that lives in each tenant's own database. Here's how the whole chain works, and why it took years to get right.

Latest on Wolverine

60 posts from the JasperFx blog cover Wolverine. Here are the most recent.

Recurring Jobs with Wolverine and CritterWatchRecurring Jobs with Wolverine and CritterWatchEvery system has work that runs on a schedule. Wolverine turns a cron job into an ordinary message, so it gets the outbox, retries, dead letters, OpenTelemetry tracing and once-per-cluster execution for free, and CritterWatch 1.2 lets you see, pause, resume and trigger every schedule across your fleet. Plus how Wolverine treats a nightly job differently from one that fires every few seconds, and why.Critter Stack AI Skills 1.18: Caught Up With CritterWatch 1.2Critter Stack AI Skills 1.18: Caught Up With CritterWatch 1.2AI Skills 1.18 brings every CritterWatch skill up to the 1.2 MCP tools, checked tool by tool against the source: a new sagas skill, the get_command_outcome tool, dead letters ranged by failure time, event queries over bodies and metadata, and six corrections to advice that had gone wrong, including the Prometheus series names every Grafana example used.CritterWatch 1.2: See Inside Your Event Store, Documents, Sagas and SchedulesCritterWatch 1.2: See Inside Your Event Store, Documents, Sagas and SchedulesCritterWatch 1.2 turns the console into a real explorer for what your Critter Stack services hold: an overview of every event store, a Step Through tab for projections, a Document Store Explorer that checks your documents still deserialize, saga instances with their state and pending timeouts, a Schedule Explorer that tells you what a schedule is actually doing, and an Event Model you can drill into.Alba 9 Is Nearly HereAlba 9.0 RC3 is the last release candidate before the biggest release Alba has had in years: host pooling for parallel integration tests, scenarios addressed by route name, JSON path and problem details assertions, endpoint coverage and authorization audits, time travel with a fake TimeProvider, server-sent events, and a rebuilt docs site. All of it is Jaedyn's work. Plus the breaking changes to read before you upgrade from Alba 8.Critter Stack in Review: October 12th to 30thCritter Stack in Review: October 12th to 30thThree weeks, 72 tagged releases, and 57 pull requests from 18 people outside JasperFx. The big themes were not losing messages, with a durable inbox and outbox hardening pass that closed a dozen community-reported ways a message could go missing; performance, from SQL Server index seeks to a thread pool thread the run command was quietly eating; shutting down cleanly; an async daemon that heals itself; and multi-tenancy at a scale we'd never tested before. Plus Marten's hard stream delete, Aspire parity in Wolverine, NServiceBus XML interop, and the upgrade notes you should read first.Failure Groups: Handle a Dead Letter Incident as One ThingFailure Groups: Handle a Dead Letter Incident as One ThingCritterWatch 1.1 groups dead letters by the failure that caused them, across every service and database, and lets you replay, archive, restore or discard the whole group as one tracked operation with a reason attached. Your AI agent gets the same loop over MCP, and still has to show you the preview before it deletes anything.

Get help with Wolverine

JasperFx builds and maintains Wolverine. A support plan gives your team direct access to us; consulting and workshops get a project moving.

The Rest of the Stack