
That’s of course supposed to be a 1992 Ford Mustang GT with the 5.0L V8 that high school age me thought was the coolest car I could imagine ever owning (I most certainly never did of course). Queue “Ice, Ice Baby” and sing “rolling, in my 5.0” in your head because here we go…
Wolverine 5.0 went live on Nuget earlier today after about three months of pretty intensive development from *20* different contributors with easily that many more folks having contributed to discussions and GitHub issues that helped get us here. I’m just not going to be able to list everyone, so let me just thank the very supportive Wolverine community, the 19 other contributors, and the JasperFx clients who contributed to this release.
This release came closely on the heels of Wolverine 4.0 earlier this year, with the primary reasons for a new major version release being:
- A big change in the internals as we replaced the venerable TPL DataFlow library with the System.Threading.Channels library in every place that Wolverine uses in memory queueing. We did this as a precursor to a hugely important new feature commissioned by a JasperFx Software client (who really needs to get that feature in for their “scale out” so it was definitely about time I got this out today).
- Some breaking API changes in the “publinternals” of Wolverine to support “CritterWatch”, our long planned and I promise finally in real development add on tooling for Critter Stack observability and management
With that being said, the top line new changes to Wolverine that I’ll be trying to blog about next week are:
- The new Partitioned Sequential Messaging feature is a potentially huge step forward for building a Wolverine system that can efficiently and resiliently handle concurrent access to sensitive resources.
- A new SignalR messaging transport for Wolverine (we needed this for CritterWatch, but it’s also been requested a bit over the years).
- A new Redis backed messaging transport using Redis streams from the community
- New interoperability capabilities for Wolverine including more options for MassTransit, NServiceBus, and CloudEvents usage on the other side
- The GCP Pubsub transport is more robust and suitable now for production usage
For a partial list of significant, smaller improvements:
- Wolverine can utilize Marten batch querying for the declarative data access, and that includes working with multiple Marten event streams in one logical operation. This is part of the Critter Stack’s response to the “Dynamic Consistency Boundary” idea from some of the commercial event sourcing tools
- You can finally use strong typed identifiers with the “aggregate handler workflow”
- An overhaul of the dead letter queue administration services that was part of our ongoing work for CritterWatch
- A new tutorial for dealing with concurrency when building against Wolverine
- Optimistic concurrency support for EF Core backed Sagas from the community
- Ability to target multiple Azure Service Bus namespaces from a single application and improvements to using Azure Service Bus namespace per tenant
- Improvements to Rabbit MQ for advanced usage
What’s Next?
As happens basically every time, several features that were planned for 5.0 and some significant open issues didn’t make the 5.0 cut. The bigger effort to optimize the cold start time for both Marten and Wolverine will hopefully happen later this year. I think the next minor point release will target some open issues around Wolverine.HTTP (multi-part uploads, actual content negotiation) and the Kafka transport. I would like to take a longer look sometime at how the CritterStack combination can better support operations that cross stream boundaries.
But in the meantime, I’m shifting to open Marten issues before hopefully spending a couple weeks trying to jump start CritterWatch development again.
I usually end these kinds of major release announcements with a link to Don’t Steal My Sunshine as an exhortation to hold off on reporting problems or asking for whatever didn’t make the release. After referring to “Ice, Ice Baby” in the preface to this and probably getting that bass line stuck in your head, here’s the song you want to hear now anyway — which I feel much less of after getting this damn release out:
Thanks for the update, sounds like 2026 is going to be a great year! 🙂