
This is in lieu of the “official” release post I’ll make early next week after the Memorial Day holiday when I have enough rest and energy to do something much better by hand. Until then, here’s a peek at the new releases we’ll be announcing early next week — but with some published updates to our AI Skills tomorrow morning that will help you do the migrations!
The whole stack just shipped to NuGet — a coordinated major release across every Critter Stack project, built on a shared JasperFx 2.0 foundation and targeting .NET 9 + .NET 10. Headline themes: AOT-friendly, faster cold-start, and Marten ↔ Polecat dedupe onto shared infrastructure.
(Quick notes for now — a full writeup written by an actual human being with benchmarks lands next week.)
JasperFx 2.0 (foundation)
The shared base for the whole stack — also ships JasperFx.Events 2.0 + JasperFx.RuntimeCompiler 5.0.
- AOT-compatible core; runtime Roslyn split into
JasperFx.RuntimeCompilerso Static-mode apps drop it and the trimmer removes Roslyn. - Source generators for projection dispatch (FEC-free), CLI command discovery, and options descriptions — less runtime reflection.
- Cold-start wins (delegate caching, deterministic/byte-stable codegen) + consolidated event-store & async-daemon abstractions.
📖 Docs: https://shared-libs.jasperfx.net · 🏷️ Release: https://github.com/JasperFx/jasperfx/releases/tag/2.0.0 · 🧭 Migration: https://shared-libs.jasperfx.net/migration-guide.html
Weasel 9.0 (database layer)
- Database-primitive foundation on JasperFx 2.0; the consolidation home for
IStorageOperation,OperationRole,BulkInsertMode, and the SQL Server advisory lock (dedupe pillar). - Postgres / SQL Server / Sqlite / MySql / Oracle / EF Core providers, all
9.0.0.
📖 Docs: https://weasel.jasperfx.net · 🏷️ Release: https://github.com/JasperFx/weasel/releases/tag/v9.0.0 · 🧭 Migration: https://weasel.jasperfx.net/migration-guide.html
Marten 9.0
- No more runtime code generation — Roslyn is gone. Closed-shape document/event storage +
Marten.SourceGeneratorcompiled queries. Nocodegen writestep for Marten; AOT-publishable in Static mode. - Best-perf defaults flipped on: Quick append w/ server timestamps, advanced async tracking, bigint events, lightweight sessions, System.Text.Json. One-line revert with
opts.RestoreV8Defaults(). IRevisioned.Versionstaysint(V8-compatible); newILongVersionedforlong. DCB gains optional HSTORE tag storage + identity-less boundary aggregates.
📖 Docs: https://martendb.io · 🏷️ Release: https://github.com/JasperFx/marten/releases/tag/V9.0.0 · 🧭 Migration: https://martendb.io/migration-guide.html
Polecat 4.0
- SQL Server / EF Core-rooted event sourcing on the shared foundation — source-generator-first and AOT-clean end to end.
- Adopted the lifted
JasperFx.Eventsasync-daemon abstractions; foldedSqlServerAppLockintoWeasel.SqlServer.AdvisoryLock; SingleTenant lock-ids now align with Marten. - Ships in lockstep with Marten 9.
📖 Docs: https://polecat.jasperfx.net · 🏷️ Release: https://github.com/JasperFx/polecat/releases/tag/V4.0.0 · 🧭 Migration: https://polecat.jasperfx.net/migration-guide.html
Wolverine 6.0
- ⚠️ Runtime codegen decoupled from core. Apps in the default
Dynamicmode must addWolverineFx.RuntimeCompilation(dev/test), or pre-generate viacodegen write+ Static mode (prod). This is the #1 upgrade gotcha — see the migration guide. - ⚠️
ServiceLocationPolicy.NotAllowedis the new default — restructure registrations or callopts.RestoreV5Defaults()to revert. - AOT-clean; Tier-1 cold-start static handler registry. Newtonsoft extracted to
WolverineFx.Newtonsoft;IForwardsTo<T>discovery is now explicit.
📖 Docs: https://wolverinefx.net · 🏷️ Release: https://github.com/JasperFx/wolverine/releases/tag/V6.0.0 · 🧭 Migration: https://wolverinefx.net/guide/migration.html
Upgrading? Bump the whole stack in lockstep — JasperFx 2.0 / Weasel 9.0 / Marten 9.0 / Polecat 4.0 / Wolverine 6.0. Each migration guide above has an at-a-glance table of breaking changes. The big perf/benchmark writeup is coming next week. 🚀