Posted in:

So I've got an announcement to make, and it's something I've pondered for many years. NAudio will be moving to GitHub. It's something I've contemplated doing for a long time, and to be honest have been quite reluctant to do. I still feel the open source community would be better off with healthy competition for GitHub, but let's be honest, it's a long way ahead, and even Microsoft are abandoning CodePlex for their open source projects now. Hardly inspires confidence in the future of the platform.

A big help in making the transition was the discovery that GitHub's import feature can pull in a Mercurial repository. It wasn't all plain sailing. In particular trying to get the NAudio contributors tied up correctly with their equivalent GitHub users didn’t fully work, which is a shame - giving credit where credit is due is very important in open source projects. But barring me discovering some glaring mistake, the repo currently up at github.com/naudio/NAudio will become the official place to get the latest NAudio code from. Nuget will remain the best place to get the latest build.

It's probably worth running through a few of the reasons for making this transition.

More Participation

Simply put, I think I'll be able to get more people on board in contributing to NAudio if I use Git and GitHub. I still really like Mercurial, but I realise that not everyone wants to learn a new version control system just to contribute a minor bug fix.

Easier Pull Requests

GitHub have made it wonderfully easy to accept a pull request. Someone recently issued a pull request for a GitHub project that I abandoned a long time ago. Since all I needed to do was a quick code review and click a big green button, accepting it was a no-brainer. Would be great to be able to accept NAudio pull requests that easily. Currently it can be quite a long time before I get round to processing them.

Better Issue Tracking

One of the more cumbersome parts of the CodePlex site is the issue tracker, built on top of TFS work items. It's so slow getting around in there that lots of resolved issues end up never getting marked as closed.

An Organization Page

I like the GitHub concept of an organization page. Rather than having NAudio appear as one of my personal projects, it makes it very obvious that the "official" repository for NAudio is the one at the NAudio organization page. It also opens the door to adding more people to the NAudio team in the future as well as bringing various related NAudio libraries under the umbrella.

Better Documentation

One of the recurring complaints about NAudio is the lack of documentation. Well, the truth is more the lack of organization to the documentation. I've written hundreds of blog posts and articles on it over the years. And the reason they are blog posts and not hosted on CodePlex is that the CodePlex documentation feature is a mess. GitHub's Wiki is a lot more promising, allowing docs to be easily written in Markdown, and we could also make a proper home page for it with GitHub pages (I finally got round to purchasing a domain name, so expect naudio.net to be pointed somewhere in the near future).

More Branches

I quite like the method in Mercurial of using clones for branches, but this isn't something CodePlex offers support for - each project can have only one repo. And so we've made do so far in NAudio without using branches in the master repo. However, it's obvious that there is an increasing need to work on different branches in NAudio. For example I'd like to work on a 2.0 release, while maintaining the 1.7 branch. And some features would benefit from a long-running branch. Git's one way to branch (as opposed to Mercurial's three ways to branch) eliminates any confusion about which way to go.

What we lose

There are a few things that we'll lose out on by moving to GitHub. First of all, GitHub doesn't offer anything discussion forums, which is a great shame as the NAudio forums are quite active and I would like to keep using them for now. I'm considering trying out gitter as a possible alternative way to provide support. I've noticed it being used to great effect on the MahApps.Metro project.

There are also still a few open pull requests, which is a shame, but all of them have some pending issues to be sorted out before they can be accepted. Hopefully it won’t be too much work to get these moved over to GitHub. Basically the process is to create a GitHub fork, branch from the same parent commit your Hg fork came from, overwrite any files you modified in the mercurial fork, and you're basically in the same position.

The final thing I'll lose is a bit of Ad Revenue from DeveloperMedia. This was a nice feature of CodePlex that provided a small amount of money which I've spent on the new domain name, and also I've hired someone from fiverr to design a logo (still waiting to see what they come up with at the moment - not 100% convinced I'll get something I really like, but we'll see).

What's Next

The transition to GitHub will take a bit of a while. I'll need to update the CodePlex site to make people aware of the transition and start moving documentation across bit by bit.

But I'm also planning some other long overdue changes to the NAudio codebase, including a revamp of the sample projects. Rather than big sample apps that do everything I want more small apps that just show one thing. This will hopefully eliminate confusion as many NAudio beginners think they have to copy all the MEF plumbing of the demo app.

Want to get up to speed with the the fundamentals principles of digital audio and how to got about writing audio applications with NAudio? Be sure to check out my Pluralsight courses, Digital Audio Fundamentals, and Audio Programming with NAudio.