Announcing RobotDotNet: DotNet for FRC

Just in time for the 2016 kickoff, we are happy to announce the initial release of RobotDotNet, a port of the FRC libraries to DotNet and C#. This port has been worked on over the past offseason, and has been thoroughly tested. Here’s whats working so far.

  • WPILib: A full port of the WPILib to DotNet.
  • NetworkTablesCore: A port of NetworkTables using the new ntcore library from FIRST.
  • FRC Visual Studio Extension: An easy to use Visual Studio extension, including templates for creating new robot projects, and tools for deploying robot code and the runtime.

The WPILib has all the features you know from FIRST, in addition to some cool new features, including:

  • Attributed Command Model: A new way of creating Command-Based robots without all the boilerplate code normally required.
  • Full NavX MXP Support: Full NavX MXP support ported from the newest release from KauaiLabs.
  • Simulator Support: One of the coolest features. The backend of the code has extensive support for hardware simulation. We also provide a MonoGame template to enable you to create your own simulator. Documentation for this can be found on the Tutorials site.

In order to run on the RoboRIO, the newest version of Mono (4.2.1) has been compiled using NI’s compilation tools.

Our documentation can be found at our website, which is located here.

Instructions for downloading the extension and the libraries can be found at the tutorials page. The extension is uploaded to the Visual Studio Gallery, and the library has been uploaded to NuGet for easy updating.

It has been an interesting project to take on, and I would like to thank some people:

  • Jeremy Koritzinsky, who helped with much of the porting and created the Attributed Command Model
  • Shockwave 4488, who let me borrow a robot for much of the offseason to test and make sure everything worked, in addition to porting previous robot code.
  • FIRST and WPI, for providing a great set of libraries to start from.
  • RobotPy, which was much of inspiration for the project, and was the starting base for the simulator support. In addition to some direct support from Dustin Spicuzza and Peter Johnson.
  • Microsoft, for creating an awesome language and set of tools, and providing them for free to the community.
  • Resharper, for their great refactoring tools which have helped clean up the codebase immensely.

Thank You! :smiley:

I had just started to research if something like this existed. 14 years later I’m volunteering with my old team 498! I’m a C# developer these days so this will make it way more fun.

Very cool - We look forward to trying this out.


One thing that I forgot to mention is that in addition to C#, Visual Basic works as well. The templates are not as great in VB, as I really don’t know much, but I have done some basic testing as it does work. In addition, any language that runs on the .NET framework should run as well, so if you want to run F# you should be able to. You could also use IronPython, however RobotPy is a much better and supported python for FRC. Note however that languages other then C# and VB have not been tested.

The first patch for 2016 has been pushed to NuGet. Here’s what has changed:

  • Driver Station code has been updated. It uses a little more CPU by default, however uses much less CPU when using multiple joysticks. Also fixes a potential segfault when moving joystick order in the driver station.
  • Updates PIDController locking to make everything is thread safe.
  • Fixes gyro naming for SmartDasboard.
  • Fixes a few bugs in NavX.

You can see all the changes on github. You can also find instruction on how to upgrade your existing project here.

New patches are available for both WPILib and NetworkTables. Here’s whats changed.


  • NavX I2C transfer limit removal, which greatly speeds up NavX code.
  • HAL updates, which should fix a bug where only PDP ID 0 would work.
  • Prints a distinctive message on bootup so teams know robot code has started correctly.
  • Fixes a bug in PIDTolerance.

You can see a list of everything that’s changed in WPILib here.


  • Fixes a few race conditions.
  • Does not always prepend a slash to the GetTable method anymore.
  • Better ArmV7 work, although this needs some documentation updates.
  • IRemoteConnectionListener changes, which will allow teams to get descriptive information about connected and disconnected remotes.
  • Native library extration changes which should allow multiple instances of NetworkTables at the same time.

You can see a list of everything that’s changed in NetworkTables here.

You can find instructions for upgrading your existing projects here.