I’ve been honored to work on the MessagePack-CSharp library since at least 2019. I’ve learned a lot from its founder in the process. We shared a lot of values, and his library is hugely successful, with over 150 million downloads from nuget.org. But the library has a lot of history in it now, and runtimes have evolved dramatically. The library is far more complex than it needs to be and it’s making new features and maintenance far too expensive for my limited time. It’s upcoming v3 release will be the last major release that I expect to contribute to. As I’ve been the primary contributor to the library for the last few years, that may mean that MessagePack-CSharp won’t evolve much going forward. But that will be up to our co-owner to see if he wants to keep investing in it.

The MessagePack format, by the way, is a compact binary format that is available for every platform and virtually every language. It is similar to JSON but has more features.

For my part, I’m shifting my attention to my new Nerdbank.MessagePack library. It’s just about as fast as MessagePack-CSharp, much simpler to use, and so much simpler to maintain that I could achieve rough feature parity with MessagePack-CSharp in just a couple weeks. It also has unique features including async serialization support, .NET trimming and NativeAOT support. It is designed to allow faster innovation and greater flexibility in use cases. It has a whole bunch of C# analyzers to help you do the right thing, great docs, and includes migration helps to automate most of the work should you choose to switch your application to use it.

Learn more about perf comparisons and why the need for a new library over at the github repo.

I have to give a shout out to Eirik Tsarpalis for his most excellent and exciting PolyType library, which is what inspired this new library and made it so easy to build while supporting modern NativeAOT.

So please, check out Nerdbank.MessagePack for your serialization needs.