Marten is an open source library hosted on GitHub that makes the rock solid Postgresql database usable within .Net systems as a fully fledged document database. On top of that, we also built event store functionality with support for read side projection generation. By adopting Marten and Postgresql on your project, you’ve got a one stop shop for document storage, event sourcing, classic relational database usage, and even key/value storage in one single database engine.
I was able to push the official Marten 1.0 release today to Nuget. As of now, I’m fully ready to stand behind Marten as production ready. We have some early adopters using Marten in production now, my own shop is well underway with an effort to migrate our largest application to Marten, and I know of a couple other teams developing against Marten today. Now that the big “1.0” version is out, we will be honoring semantic versioning rules from here on out for backwards compatibility. It’s almost a 100% certainty that there’s going to be another nuget release next week with some small additions and whatever bug fixes inevitably spill out of the 1.0 release.
This is the culmination of almost a solid year of effort from myself and many others. Marten is de facto sponsored as an OSS project by my employer and several of my colleagues have made contributions as well. I’ve said for quite a while now that Marten has been the most positive experience I’ve ever had developing an OSS project and I greatly appreciate the Marten community. By doing this project in public, I feel like my company has been able to get valuable feedback on usability, the necessary features we need to perform well, and a lot of critical bugs detected and fixed much faster than I think we could have done if we’d built this in private.
I’ll follow up this blog post and try to make the case for why and when a team should choose Marten over the other options for persistence. Marten has been driven from the very beginning as a replacement for RavenDb in our architecture at work, but I’ll also try to make the case for why your team could be more productive with the Marten/Postgresql combination than an ORM like EF or NHibernate and even micro-ORM’s. We do need to provide a lot more information and samples for using the event store functionality that I’ll try to blog out as we get that pulled together.
I’d like to thank…
- My colleague Corey Kaylor for helping create the vision and doing so much work in our build automation. Thank Corey if you like having CoreCLR support or the compiled query feature
- Nieve for doing a lot of work on Marten’s Linq support, among other things
- Tim Cools for pushing the event store functionality and our identity map mechanics
- Evgeniy Kulakov for getting the async functionality started
- Daniel Marbach for doing so much work to help us improve Marten’s async support
- Jens Pettersson for lots of feedback, suggestions, and help with Marten’s bulk insert story
- Phillip Haydon for being our biggest advocate, providing a lot of guidance on Postgresql, and driving the design of many features
- Khalid Abuhakmeh for doing the graphics on the website and helping with the event store
- Brady Clifford and company for doing the heavy lifting to make Marten fit into our application architecture at work
- A whole host of other contributors and folks who have raised or commented on issues for us. The level of community interest and feedback I’ve seen has been unprecedented to me in my 12 years of doing OSS work in .Net.
- The Marten website has relatively complete documentation
- Marten’s Getting Started guide
- Feel free to get help or ask questions in the Gitter room for Marten
- The source code is on GitHub
- I’ve written a lot of blog posts on Marten over the past year
- There’s a sample application using the event store features here (thanks Khalid!)
- You can see the obligatory sample NerdDinner application for Marten here.
- Marten on DotNetRocks
If you’re interested, or know somebody who would be, I am able to take on short term consulting projects for Marten as side work.