Our plans for Nancy 1.x and beyond

At the time that I write this, Nancy is less than two weeks (the 20th!) shy of turning 5 years old. For any open-source project that is quite an achievement and I dare to say that for one that is based on .NET it is amazing.

If we turn it into numbers, we put out 37 releases (a bit more than 7 per year), had 228 unique (only counting the main repository) contributors and 1237 closed pull-requests. We have had the pleasure of seeing the community embrace it, job ads pop up and people traveling to conferences, all over the world, to deliver sessions on our framework. Amazing!

In February, of this year, we put out the v1.0 release and just the other day we released v1.4.1 into the wild. Needless to say, it has been a very rewarding and humbling experience. Now, it might sound like I am about to drop the bomb and tell you all that we have decided to discontinue working on Nancy. In fact, that is the exact opposite of what I am going to tell you!

TL;DR

Nancy v1.4 will be the last minor version that we put out in the v1.x space. From now on, our releases will target the v2.x space and we will be making some changes, such as dropping support for .NET v4.0. Looking beyond v2.x, we are also making plans for bigger changes to Nancy to ensure we keep delivering the most innovative framework around in the .NET space!

The state of the 1.x releases

A while back we decided that, short of bug fix releases, the v1.4.0 release would be the last minor version that we put out for the v1.x major. Yes, this means that there will be no 1.5 coming out in the future.

Countless man hours have gone into the 37 releases that have lead up to v1.4.1 and during that time a lot has changed, both in our community, the platform and to our understanding on what works well and what does not.

In order for us to keep building Nancy and keep it as a competitive force, we need to modernize our stack and also shed some dead weight and remove obstacles that we have not previously been able to tackle because the impact would have been too great.

For those reasons, we have decided that the next release that comes out will will be in the v2.x version space. The last couple of months we have worked very hard on pruning down our list of open pull-requests, before we make the transition. We feel that we are now in a place where we are comfortable to do it.

The introduction of the 2.x releases

Although we have not talked too much about it, it has never been a secret that we have been working on bumping the major version of our releases. We have had a v2 branch and milestone on GitHub for quite some time and there has been some activity going on every now and then. So are we going to pull an Angular 2 on you? Not quite. Yes, there will be some breaking changes, without them there would be no need to bump the major version. However, we will try and limit them as much as possible, but at the same time we will show no mercy in the areas we feel major changes need to happen.

I would like to urge anyone that is interested in this work, and/or that would like to impact on what happens to keep an eye on the 2.0 milestone. This is also your chance to let us know about any pain points you have been having with the v1.x series of releases. A couple of the changes that will make it into v2.0 are

  • A new unified configuration API where we will migrate a lot of the existing configurations. Right now there are too many different places and ways to configure things in Nancy
  • Rewrite our internal code to handle async. Right now we have some custom TPL code in there to make us compatible with .NET v4.0 while still supporting async/await. We will be ripping out this code and make it all based on async/await
  • So where does that leave .NET v4.0 support? Glad you asked! It will be left behind in the v1.x world. From v2.0 and forward we will be targeting .NET v4.5 and make full use of the goodies it can offer us
  • We will be making OWIN a first class citizen, meaning that the core of Nancy will be using OWIN to communicate with the outside world and the hosting packages will bridge the various worlds together, just like they've always done. All details on this are not settled so keep an eye out for discussions on GitHub
  • Some hosting options, like the Nancy.Hosting.Wcf will no longer be supported out of the box. It does not mean that Nancy will not work with WCF anymore, it just means that the hosting option will no longer be provided by us but that does not prevent the community from bridging that gap, if needed, and you can even base it of our old Nancy.Hosting.Wcf source code.

That is just to mention some of the things we have been talking about and already decided upon, others are still being discussed (like if we should adopt C#6, what our CoreCLR/DNX story will look like and so on).

For the most part it will still resemble the same Nancy you are used to from v1.x and we will try and document as many of the breaking changes as possible and provide documentation of the new features, on our wiki.

I will also try to start blogging a bit more about the things that are happening for the v2.x releases, so keep an eye out on this space for more insights.

Peeking beyond 2.x

Beyond v2.x? We have not even put out the first release for v2.x yet! Like I mentioned before, a lot has changed since we first started working on Nancy. While v2.x is going to help us implement some changes that we want, we need to look quite a bit further into the future if we still want to stay around.

Microsoft will soon introduce ASP.NET 5, CoreCLR/DNX and open up a whole world of cross-platform possibilities that have not even been possible despite the existence of Mono and our support for it.

For quite some time now (over a year), we have been talking about our own vNext internally and we have some pretty damn exciting ideas. It is still too early to say exactly what will be happening, but hopefully I can start blogging a bit about the core principles and ideas that are guiding us, all with a huge NOT SET IN STONE disclaimer on them.

comments powered by Disqus