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!
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
- 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.0while still supporting
async/await. We will be ripping out this code and make it all based on
- So where does that leave
.NET v4.0support? Glad you asked! It will be left behind in the
v2.0and forward we will be targeting
.NET v4.5and 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.Wcfwill no longer be supported out of the box. It does not mean that Nancy will not work with
WCFanymore, 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
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
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
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.