Starting next week I’ll be doing some more deep dives into new Marten V4 improvements and some more involved sample usages.
This has been at least a two year journey of significant development effort by the Marten core team and quite a few contributors, preceded by several years of brainstorming within the Marten community about the improvements realized by this release. There’s plenty more to do in the Marten backlog, but I think this V4 release puts Marten on a very solid technical foundation for the long term future.
This was a massive effort, and I’d like to especially thank the other core team members Oskar Dudycz for answering so many user questions and being the champion for our event sourcing feature set, and Babu Annamalai for the newly improved website and all our grown up DevOps infrastructure. Their contributions over the years and especially on this giant release have been invaluable.
I’d also like to thank:
- JT for taking on the nullability sweep and many other things
- Ville Häkli might have accidentally become our best tester and helped us discover and deal with several issues along the way
- Julien Perignon and his team for their patience and help with the Marten V4 shakedown cruise
- Barry Hagan started the ball rolling with Marten’s new, expanded metadata collection
- Raif Atef for several helpful bug reports and some related fixes
- Simon Cropp for several pull requests and doing some dirty work
- Kasper Damgård for a lot of feedback on Linq queries and memory usage
- Adam Barclay helped us improve Marten’s multi-tenancy support and its usability
and many others who raised actionable issues, gave us feedback, and even made code contributions. Keeping in mind that I personally grew up on a farm in the middle of nowhere in the U.S., it’s a little mind-blowing to me to work on a project of this magnitude that at a quick glance included contributors from at least five continents on this release.
One of my former colleagues at Calavista likes to ask prospective candidates for senior architect roles what project they’ve done that they’re the most proud of. I answered “Marten” at the time, but I think I mean that even more now.
What Changed in this Release?
To quote the immortal philosopher Ferris Bueller:
We did try to write up a list of breaking changes for V4 in the migration guide, but here’s some highlights:
- We generally made a huge sweep of the Marten code internals looking for every possible opportunity to reduce object allocations and dictionary lookups for low level performance improvements. The new dynamic code generation approach in Marten helped get us to that point.
- We think Marten is even easier to bootstrap in new projects with improvements to the
- Marten supports System.Text.Json — but use that with some caution of course
- The Linq support took a big step forward with a near rewrite and filled in some missing support for better querying through child collections as a big example. The Linq support is now much more modular and we think that will help us continue to grow that support. It’s a small thing, but the Linq parsing was even optimized a little bit for performance
- Event Sourcing in Marten got a lot of big improvements that were holding up adoption by some users, especially in regards to the asynchronous projection support. The “async daemon” was completely rewritten and is now much easier to incorporate into .Net systems.
- As a big user request, Marten supports much more options for tracking flexible metadata like correlation ids and even user defined headers in both document and event storage
- Multi-tenancy support was improved
- Soft delete support got some additional usability features
- PLv8 adoption has been a stumbling block, so all the features related to PLv8 were removed to a separate add-on library called Marten.PLv8
- The schema management features in Marten made some significant strides and should be able to handle more scenarios with less manual intervention — we think/hope/let’s just be positive for now
What’s Next for Marten?
Full point OSS releases inevitably bring a barrage of user reported errors, questions about migrating, possibly confusing wording in new documentation, and lots of queries about some significant planned features we just couldn’t fit into this already giant release. For that matter, we’ll probably have to quickly spin out a V5 release for .Net 6 and Npgsql 6 because there’s breaking changes coming due to those dependencies. OSS projects are never finished, only abandoned, and there’ll be a world of things to take care of in the aftermath of 4.0 — but for right now, Don’t Steal My Sunshine!.