Sunsetting Protogame

For many years we used MonoGame as our development tool of choice when it came to making games. Over that time we built an extensive framework called Protogame, which enabled developers to work against higher level APIs than what MonoGame traditionally provided. These higher level APIs enabled 3D deferred rendering and the development of multiplayer games.

A screenshot from our old prototype of Minute of Mayhem, built in Protogame. This represents probably a year and a half or more of development (including writing shaders, model parsing, engine architecture, etc.)

6 months ago we tried out Unreal Engine 4, and within weeks we were hooked. All of our current projects are being built in Unreal Engine 4, and at this time there’s no plans to return to MonoGame or Protogame in the future. We found that Unreal Engine 4 fundamentally changed the way we make games, enabling all of our team members to be more productive, while delivering a level of quality that was previously not possible with Protogame.

The same scene in Unreal Engine 4, with less than 2 months of development.

I could write a whole article about how our move to Unreal Engine 4 has already saved myself and other team members hundreds of hours in comparison to our old tools, even in the short few months that we’ve been using it. But instead the focus of this article is to discuss what will be happening to Protogame and the related projects, now that we have moved away from the MonoGame ecosystem for game development.

Protogame

Effective January 1st 2018, Protogame will no longer be supported, and no further development will occur in Protogame or it’s immediately related (e.g. editor) repositories. We won’t be providing bug fixes to reported issues in Protogame, nor will we be accepting pull requests against our main repository (if you wish to make modifications, please fork the repository). The website will cease operation when the domain expires, but the documentation will remain online for the foreseeable future (while ever Read the Docs continues to serve it). The repositories will remain online for educational purposes, and available so that other developers still using MonoGame can utilise what we’ve written in their own projects.

Protoinject

Protoinject is a hierarchical dependency injection system, which we wrote to support Protogame to provide entities and components a hierarchy that could be statically validated with the services they depend on.

Without Protogame, we don’t have a primary driving case for the continued development of Protoinject. Our C#-based web projects (such as HiveMP and JamHost) both use the Microsoft-provided dependency injection system for service resolution. However, we recognise that the library may be useful to other developers, and unlike Protogame, it does not require significant investment to maintain.

Therefore, effective January 1st 2018, Protoinject will enter maintenance mode. We won’t be developing new features, but we will work towards fixing reporting bugs, albeit this won’t occur with a high priority internally. We’ll still review and accept pull requests against Protoinject.

Prototest

Prototest is our light-weight, cross-platform testing framework for .NET. Unlike other testing frameworks, it doesn’t make use of separate runners, nor is it dependent on IDE integration. Instead your tests compile to standard console applications, and Prototest as a library emits test results to the console. This increases reliability and ensures that the tests you’ve written always run, without having to deal with issues like runner versioning.

We still use Prototest extensively in our C#-based web projects (HiveMP and JamHost), so there won’t be any changes to the development status of Prototest as a result of sunsetting Protogame. We’ll still be accepting bug reports, reviewing pull requests, and developing new features as the need arises.

Protobuild

Now perhaps for the one with the largest impact. Protobuild is a cross-platform project generator for .NET, and is heavily used in the MonoGame ecosystem, including by the MonoGame project itself. It’s a .NET Foundation project and enables developers to reliably develop cross-platform .NET projects without having to manually manage individual project files for different platforms.

We recognise that this tool has a lot of value in the MonoGame community, so for the time being there won’t be any changes to the support status of Protobuild. As we’re no longer using it internally it’s unlikely that major new features will be developed, but we’ll still accept bug reports and pull requests to resolve issues, and both the documentation and website will remain online.

Summary

In summary, if you’re currently using Protogame or Protoinject, we recommend that you fork the respective repositories in order to maintain them your own project. We don’t recommend using Protogame for any new projects (instead, we recommend you try out Unreal Engine 4!)

If you’re using Prototest, nothing changes and this project is still actively developed.

If you’re using Protobuild, we’ll still be provided support for reported bugs and accepting pull requests, but we’re not currently looking to develop any major new features. We’ll be working out a more sustainable long term roadmap for the project in the near future.

Finally I want to thank the MonoGame community over the years for the support they’ve provided and we hope our contributions to the community have been helpful. We’ll miss working on these tools and projects to support the ecosystem, but unfortunately the time has come for us to move on.

If you want to follow our future developments, you can follow us here on Medium, on Twitter or on Facebook.