
Several years ago when I was interviewing at Calavista, my future colleagues asked me what I was most proud of in my career. At the time I was mostly known for my writing years earlier at CodeBetter and StructureMap, but even then my obvious answer was Marten. Wolverine was even then my true passion project, but Marten is undeniably the biggest technical success I’ve ever had and the single biggest source of JasperFx Software business today.
Sometime this past weekend, Marten quietly rolled past 20 million downloads on NuGet. Almost exactly eleven years after the first commit in October of 2015, the “PostgreSQL as a document database” experiment that started as a tactical way to get off of RavenDB in a hurry has become the most widely used and, I’ll very happily argue, the most capable Event Sourcing solution in the .NET ecosystem.
Don’t write off Marten because it’s a FOSS tool in the .NET ecosystem — the perennial Harvey Dangerfield of technical platforms. Marten, especially when paired up with Wolverine, has a feature set that I believe is very competitive and in many cases superior to the commercial event sourcing tools in the JVM.
I wrote about Marten’s 10th birthday last year and a five year retrospective on adoption this spring, so I’ll keep this short. Twenty million is a nice round number though, and it’s worth a moment to say thank you and take stock.
The numbers
Straight from GitHub and NuGet this morning:
| NuGet downloads | 20,077,707 |
| GitHub stars | 3,460 |
| Contributors | 257 |
| Pull requests merged | 2,275 |
| Issues closed | 2,594 of 2,605 ever opened |
| Tagged releases | 321 |
| Latest release | V9.41.0, shipped today |
Two of those matter more to me than the download count. 257 contributors is a real community (that’s a random Wednesday for a popular npm project, but huge for .NET), not a one-person project with a mailing list. And eleven open issues on a project this old and this large is the result of a lot of people caring about a lot of details for a very long time. Thank you to everyone who has filed an issue, sent a pull request, answered a question in Discord, or written up their experience for others.
For context on “most widely used”: the next closest event store package on NuGet, the official client for what used to be called EventStoreDB, sits at a bit over 8 million downloads. SqlStreamStore, EventFlow, and Eventuous are each in the low single-digit millions or below. Marten isn’t just in front. It’s in front by a wide margin, and the gap is widening.
Marten as a document database
Plenty of those downloads aren’t for Event Sourcing at all. Marten’s original pitch was simple: PostgreSQL is a fantastic database, JSONB is a fantastic storage format, and .NET developers deserve a document database experience without giving up transactions, a real query engine, or the operational know-how they already have. That pitch still holds.
Today that means a serious LINQ provider with compiled and batched queries, full text search, PostGIS, pgvector for AI features, optimistic concurrency, partial updates, document hierarchies, and multi-tenancy from a shared table all the way to database per tenant. Add schema management that just works, and you go from an empty database to a running application with one command, on a database every cloud already knows how to host.
Marten as an event store
You’ll see plenty of people online try to say that you can’t really use a relational database as the foundation for an event store, but our PostgreSQL foundation means that Marten can support a much stronger set of projection capabilities and genuine options for strong consistency that the “dedicated event store databases” cannot.
Marten is the most complete Event Sourcing toolkit on .NET, and it isn’t particularly close. Most event store products give you an append-only log and a subscription API, then wish you luck with everything else. Marten’s position has always been that the event store is only useful if the projections, read models, consistency model, and operational story are all in the box. Highlights that I think are unique, or at least unusually strong, in the .NET world:
- Projections are the whole point. Single stream aggregates and snapshots, multi-stream, event, flat table, composite, and EF Core projections, each able to run inline in the same transaction as the events, live on demand, or asynchronously through the async daemon. I went deep on the internals in Marten’s Aggregation Projection Subsystem.
- Events and read models live in one database. You get transactional consistency between writes and inline projections, query read models with the same LINQ provider, and rebuilding a projection is one command instead of a migration project.
- Dynamic Consistency Boundary. Marten 9 shipped first class DCB support for enforcing invariants across multiple entities without one giant aggregate stream. As far as I know it’s still the only mainstream .NET event store where this is built in. See Higher Performance DCB Development with Marten 9.0.
- Cross-stream operations, natural keys, and enrichment. Append to multiple streams in one transaction, identify streams with natural keys, and enrich events at projection time.
- Operational maturity. Archiving and compaction for long-lived streams, versioning and upcasting, binary serialization, event store multi-tenancy, health checks, and clustered distribution of async projections when paired with Wolverine.
- Testability. A declarative testing helper for projections and faster integration testing against projections and subscriptions.
- Wolverine. The Wolverine integration turns Marten into a full CQRS platform: the aggregate handler workflow (our version of the “Decider” pattern), a transactional outbox on the same database, event subscriptions feeding handlers, and HTTP endpoints that stream JSON straight out of PostgreSQL. That combination is what people mean by “the Critter Stack.”
Marten’s model has also become the template for the rest of the stack. Polecat brings the same projections and aggregates to SQL Server 2025, and Fisher does the same for embedded scenarios. Learn Marten and you’ve learned all three.
Where JasperFx fits
Marten is and will stay MIT licensed open source. What’s changed is that there’s now a real company behind it. JasperFx Software exists to make the Critter Stack sustainable for the long haul, and I explained the model in The “Open Core” Model for Sustainable OSS Development in .NET. If your team depends on Marten in production:
- Support plans give you a direct line to the people who wrote the code, with defined response times and a voice in the roadmap. Here’s how JasperFx supports our customers in practice, and our consulting and workshops cover adoption, migration, and tuning.
- CritterWatch is our monitoring and operations console for Marten, Polecat, and Wolverine, with visibility into projections, subscriptions, dead letters, and message flow across a whole fleet, plus an MCP server for AI assisted production support. Plans are on the products page.
- Critter Stack AI Skills teach Claude Code and other coding agents to write idiomatic Marten, Wolverine, and Polecat code the way we would. The latest additions are in AI Skills 1.10.
Thank you
Twenty million downloads, 257 contributors, eleven years. Marten got here because a lot of people decided PostgreSQL plus .NET was a good idea and kept showing up to make it better. If you’ve never tried it, the quick start will have you appending events and building a projection in about ten minutes. If you have, thank you. Here’s to the next 20 million.
Questions, war stories, or feature requests? Find us in the Critter Stack Discord or get in touch with JasperFx.