In the early days of .NET, Microsoft held most of the power and influence around the technology. In 2000, software development looked different, with corporate vendors providing narrow solutions to businesses. As the ecosystem has evolved, we have collectively moved from a closed system to a community that thrives on open source (OSS) contributions.
In this post, we’ll look at 10 OSS projects that we can contribute to today that can have the most significant impact on the .NET ecosystem. We’ll see how and where we can add value and ponder the effects of our contributions. We’ll also look at some honorable mentions that can potentially be as impactful.
The projects on this list have accepted meaningful contributions in the past and still have untapped potential contributions. Value-added contributions include bug fixes, features, enhancements, and documentation.
Before we get started, we must have a GitHub account, as most OSS happens on the social collaboration site.
ASP.NET Core is the default web programming model for the .NET Community. The focus of ASP.NET Core is to help us build modern cloud-based internet-connected applications. Developers can build web applications, IoT applications, API backends, and so much more. The ASP.NET team has made performance a first-class concern, along with interoperability and cross-platform stability.
Arguably the most impactful project on this list, any contribution to the ASP.NET Core project, would impact millions of developers worldwide.
ASP.NET Core encompasses many smaller internal projects that we could add value to:
- Razor Engine
As of writing this post, there are over 2000+ issues reported in the GitHub repository.
Any addition here is likely to survive for a long time and compound in value. For those of us looking to jump into a dense code-base, the ASP.NET team has created a
good first issue label. This code-base is a sensitive one, so we should expect our contributions to go through rigorous scrutiny and take a bit of time to be accepted.
Another Microsoft offering, NuGet is the backbone of the .NET ecosystem. Without NuGet, we’d all be sharing
.dll files, like we did in the dark ages of .NET development. NuGet is a package manager for sharing code with developers around the world. The site has gone through a lot of changes, one of the most critical being the move to Azure Search.
The search backend of NuGet is open source and is available on GitHub at [NuGet.Services.Metadata][nuget-serach]. A good package manager lives and dies by the results it provides its users. Here, we have an opportunity to tweak the search result and improve the results for the millions of .NET developers that depend on NuGet. An understanding of full-text search is necessary, but otherwise, the ability to contribute here is of high-impact.
Godot Engine & MonoGame
Godot engine is a full-blown game engine for folks who want to dive right into game development. Godot provides a set of standard tools for game designers so they can focus on game development and not sink hours into custom physics engines. With Godot, we can target multiple platforms like Windows, macOS, Linux, iOS, and Android. Unlike other commercial game engines, building a game with Godot is completely free with no royalties. Godot provides a help wanted! label for folks looking to help.
Monogame, on the other hand, is for folks who want to dive into every detail of building a video game. With no tools, we are provided with a custom framework to develop our game engines. Even the most casual gamer has likely played a game built with Monogame. Monogame has a Good First Issue label for folks looking to contribute. A good understanding of video game concepts and mathematics helps when providing help to game engines.
For both projects, it is always helpful to build demos and write documentation. Learning in the open is an excellent way of contributing to these projects and helping out other fellow developers. Additionally, both projects are targeting multiple platforms, which presents an opportunity for cross-platform quirks to sneak in.
Serilog is one of the most downloaded projects in the .NET ecosystem. The library is an easy-to-set-up diagnostic logging library with an emphasis on structured logging. It allows us to instrument complex systems that may be distributed and asynchronous.
Unlike other logging libraries, Serilog is built with powerful structured event data in mind. –Serilog
The genius of this project is that it provides a single interface to multiple destinations, known as sinks. Sinks include target destinations like Elasticsearch, SQL Server, Azure Table Storage, and so many more.
A great place to contribute to this project would be creating a custom sink that helps a niche community within the .NET community. For example, an individual created a sink that writes to the Unity debugger, which allows game developers to diagnose their issues.
The JAMstack is hot these days, with companies like [Netlify][netlify] and [Vercel][vercel] championing the approach to building scalable websites. The .NET ecosystem has focused on dynamic web applications and has very few static site generators. One static site generator worth looking at is Statiq.
Statiq is powerful because it combines a few simple building blocks that can be rearranged and used in limitless combinations. –Statiq
Building web sites at build time offers performance and security benefits. Static pages can opt-in to aggressive caching, while also having fewer (if any) attack vectors.
Statiq is a newer project, and contributions can make a significant impact on the adoption and understanding of the static site trend in the .NET community. Documentation and examples here would be the most meaningful contributions to this project.
Hangfire is the best solution for running a “job” on the .NET platform today. Background processing is a great way to increase your applications UI throughput and to provide users with a seemingly faster experience.
An easy way to perform background processing in .NET and .NET Core applications. No Windows Service or separate process required. –Hangfire
The project offers the following job flavors:
- Fire & Forget
- Delayed Jobs
- Continuations (state machines)
Hangfire scales to meet our problems excellently. When working locally, we can have our backing storage mechanism be in memory, while in production settings, we can link to more permanent storage mechanisms like Redis and SQL Server.
Areas of contribution to this project with the most significant impact include different storage mechanisms, enhancements to the dashboards, extensions, and writing samples.
Entity Framework Core
Hate them or love them, object-relational mappers (ORM) are integral to many .NET applications. Entity Framework is the king of ORMs in the .NET space, with Entity Framework Core slowly usurping the throne. Utilizing LINQ, we can perform essential create, read, update, and delete operations.
The library allows developers to access their data storage engine of choice, mainly focusing on relational databases but providing shims for some more obscure storage engines as well. We can see a complete list of database engines on the official Microsoft documentation site.
With millions of downloads and continual improvements, Entity Framework Core is likely to be the go-to tool for many developers in the .NET Ecosystem. While stabilizing, there is still a lot of work left for the EF Core team. Many of the [outstanding issues are available on the GitHub][ef-core] page.
Valuable contributions to Entity Framework include finding and reporting bugs, improvements to the documentation, and code contributions. Be warned, LINQ providers are challenging to understand. Entity Framework Core pull-requests may not be the first project contribution for many developers.
The on-going joke around Marten is that it is not an ORM.
The Marten library provides .NET developers with the ability to easily use the proven PostgreSQL database engine and its fantastic JSON support as a fully-fledged document database. –Marten
Not only does it provide document database style interfaces. Marten also supports an event store model.
Marten has grown a loyal community following and has gained acceptance into the .NET Foundation. PostgreSQL experts can make a lasting impact on this project by helping the Marten API expose more features of the database engine. Documentation and samples are always welcome to this project. For the adventurous, this is another project which dabbles heavily with LINQ providers.
While this project is compelling, it is still flying under the radar of many development shops. Now is the perfect time to explore different data storage mechanisms as .NET Core goes cross-platform, and the cloud database offerings become more diverse.
OSS has helped open up the world of possible infrastructure configurations to developers. While the choice is excellent for production, it can be a hassle to set up for our local development environments. I recently wrote about Project Tye for local development, and see a lot of potential for this project.
It’s not unimaginable to see that all development will involve some containerization. Project Tye allows us to build infrastructure locally that mimics our production environment as closely as possible.
Some contribution areas include Project Tye’s CLI and the hosted dashboard. Additionally, contributions to IDE integration for Visual Studio, JetBrains Rider, and Visual Studio Code would make adoption of Project Tye easier for GUI focused devs. Samples and documentation would also help this newer project. Project Tye is still pre-version 1.0, so there are many bugs still left to squash.
Documentation is the glue that ties communities together. A decade ago, it was blogging when the docs weren’t so great. Today, Microsoft Docs are OSS and open for contribution. A unified database of everything that Microsoft dabbles with and produces.
The best way to contribute to documentation is to read it. Every day developers write documentation, and while the quality usually is high, humans can make mistakes. The documentation team has made it very easy to make corrections, add insight, or add new documentation.
Microsoft docs is the best place for new contributors to make the most significant impact both on the .NET ecosystem and for other communities.
We’ve seen some great projects. Some are in their infancy, while others are mature pillars of our community. The list is not exhaustive by any means, and here are some other projects worth looking into and adding some value.
CsvHelper is a library designed for parsing and creating
.csv files. When building any data-centric application, import and export features are critical to providing the best user experience. CsvHelper is great.
FluentValidation is the only way we should be doing validation. A highly recommended library, FluentValidation, is a no-brainer for anyone accepting user input. The library also provides integration mechanisms with ASP.NET’s model validation pipeline. FluentValidation also comes with a plethora of built-in validators that will mean less time fiddling with commonly known scenarios.
A picture is worth 1,000 words, so it comes as no surprise that image manipulation is tricky. ImageSharp is the go-to image manipulation library for the .NET ecosystem. As a huge bonus, it is cross-platform and does not rely on the
System.Drawing namespace (which is Windows only).
Tests are critical to verifying the integrity of our applications. “How” we test, is up for debate. With many different philosophies around testing and contexts, it is up to us to decide. Verify offers an acceptance test approach, where we compare a known successful artifact with the result of our test. The acceptance approach reduces the noise in our unit tests and builds more sustainable test fixtures.
Markdown is arguably one of the most transformative specifications built in the last 20 years. A format designed to help us focus on content, rather than waste hours fiddling with presentation elements. Markdig is a capable and performant Markdown engine with an extensible pipeline.
There we have it! We’ve gone through an array of .NET OSS projects that offer us an opportunity to have a significant impact on the community we love. While these are all great projects, it doesn’t mean there aren’t more out there.
When contributing to any project, first start by talking to the original authors and seeing whether they want our help. Asking is the first step in building a collaborative relationship. Contributions aren’t always code based either. Documentation, samples, and even financial support make all of us better OSS citizens.
Finally, we can always make an impact by starting our OSS projects. Inviting others and collaborating is a great way to make an impact, even if it starts small, it all adds up to make for a better .NET community.
Do you have any projects you think I missed? I’d love to hear about it in the comments.