New for 2018!

CAN Webdash Plugin

The CAN Webdashboard plugin is no longer included in the base roboRIO image. To enable CAN device functionality in the roboRIO WebDashboard you must now install the plugin using CTRE's Phoenix Lifeboat. Instructions can be found on the CTRE Phoenix Wiki.

Third Party Libraries

  • CTRE has made extensive changes to the TalonSRX libraries. Documentation on the new Phoenix Framework can be found on the CTRE Github wiki. A migration guide can be found on the wiki here.

Java 9

Warning: Java 9 is not currently supported by the FRC tools.  Java 9 introduces many breaking changes, and is not provided for 32-bit  systems which we need to support. Java 9 will not be supported for 2018.

Deprecated features

If you use WPILib with a text-based language (C++ or Java) you might see some deprecated functions or classes. This means that the function or class still exists and is supported but it is not the best choice and you should look for some newer, more robust replacement. The replacement function to use will often be mentioned in the message or in the documentation below. Deprecated functions and classes will work this year but maybe removed or changed in a future year

C++/Java WPILib
  • Added new base class, TimedRobot. TimedRobot is similar to IterativeRobot but loops on a timer instead of syncing to the arrival of DS packets. This provides for more consistent timing of robot actions and controls, at the expense of potentially processing some inputs for multiple loops, or skipping some inputs (depending on loop time and jitter).
  • RobotDrive has been split into separate classes for each drive base type

Three drive bases:

DifferentialDrive (tank drive, WCD, etc.)

Now also has CurvatureDrive() (aka cheesy drive)

SpeedControllerGroup is used to specify multiple motor controllers per side



Uses of Drive() member function for differential drive base should be replaced with CurvatureDrive()

  • TalonSRX renamed to PWMTalonSRX
    • CTRE's new software also renames CANTalon to TalonSRX
  • A periodic method has been added inside subsystems
  • Joystick/XboxController interface changes

Added functions to Joystick and XboxController for detecting button press and release events

SetAxisChannel() and GetAxisChannel() have been replaced with setters and getters for each axis channel.

GetAxis() and GetButton() have been replaced with getters for each axis/button.

Added interface for DS match data

Added support for Nidec Brushless motor (NidecBrushless class)

Changed Command templates to use TimedRobot instead of IterativeRobot

Changed Java I2C and SPI to use byte arrays instead of ByteBuffer to avoid memory leak

  • New JRE (zulu) from Azul Systems. This allows us to package the JRE with the Eclipse plugins and deploy it automatically, removing the need for the manual Java Installer tool.
  • Sendable Chooser now keeps entries ordered
  • OpenCV Mat's can now be created before calling CameraServer functions
  • Restored use of priority mutexes in HAL and C++ (available as wpi::mutex and wpi::condition_variable in C++)
  • Increase robustness of USB Camera connections and streaming
  • New simulation tools. The FRC roboRIO Project wizard has new "Learn LabVIEW" simulation choices which are a maze and a ball shooter. These include fully functional simulation robots. Documentation for these is not yet complete.
  • Updated to LabVIEW 2017
FRC Driver Station powered by NI LabVIEW
  • Improved connectivity diagnostics (firewall info, etc.)
  • Removed protocol selector (to connect to cRIO systems, use the FRC 2014 DS)
Network Tables
  • Improved Connection Synchronization Behavior
    • This should reduce or eliminate the occurrences of "phantom keys" on the Dashboard when changes are made to code to rename or remove keys without restarting the Dashboard
    • The original synchronization behavior was troublesome for two reasons:
      1. It had unpredictable behavior for updated values
      2. It brought back to life deleted values
    • Instead of relying on the server to inform the client regarding reconnections, the client keeps track of what values have been modified by user code on the client.  When the client connects to the server, the following occurs:
      • For entries that have been modified by user code on the client:
        • If the entry is not persistent, the server value is overwritten with the client value
        • If the entry does not exist on the server, the client sends an assignment to the server to recreate it on the server
      • For entries that have not been modified by user code on the client:
        • The client value is overwritten with the server value
        • If the entry does not exist on the server, the client deletes the entry
  • JSON/CBOR/MessagePack library is now included in C++ for easier mapping of structured data into raw NetworkTables entries.  This is a lightweight version of, imported into the wpi namespace.
  • API updated to provide handle-based access for improved performance. This also allows multiple simultaneous independent instances to be created (e.g. for unit testing purposes).
    • Added new classes and interfaces (NetworkTableInstance, NetworkTableEntry, NetworkTableValue, and others).  In Java, these, along with a new version of the NetworkTable class, are now located in a different package (edu.wpi.first.networktables, rather than edu.wpi.first.wpilibj.networktables)
    • The NetworkTable class is still available, but many functions are now deprecated in favor of NetworkTableInstance and NetworkTableEntry functions.
    • In Java, many JNI functions changed; it’s recommended users of the old JNI functions change to using NetworkTableInstance instead of JNI directly.
    • There is a “default” instance that is configured by the WPILib robot code during startup; this can be retrieved using NetworkTableInstance.getDefault().  You can then get NetworkTable’s by calling NetworkTableInstance.getTable(String).  This replaces the old NetworkTable.getTable() static function.
    • NetworkTableEntry’s are returned by NetworkTable.getEntry(String).  NetworkTableEntry provides functions for getting and setting values similar to the old NetworkTable string-based getters and setters, but is faster because it uses handles rather than string lookups.
  • In Java, callbacks are now executed by a Java thread rather than a native thread.
  • Brand new Shuffleboard dashboard added.
  • SFX dashboard removed (will be provided as a separate download, but is no longer being actively maintained)


LiveWindow now provides continuous telemetry (e.g. of motor and sensor values) for most WPILib classes via NetworkTables.  Telemetry is sent each loop iteration of the IterativeRobot and TimedRobot templates (SampleRobot does not provide this functionality).  Dashboards such as Shuffleboard provide ways to record this telemetry for later playback and analysis.

Most WPILib classes add themselves to the LiveWindow when they are constructed.  While we recommend telemetry be left enabled, telemetry for specific instances can be disabled using LiveWindow.disableTelemetry(), or all telemetry can be disabled using LiveWindow.disableAllTelemetry().

To implement this change, the Sendable interface now uses a property definition interface rather than multiple functions.  The LiveWindowSendable and NamedSendable classes have been deprecated.

Subsystem now provides an addChild() function to use instead of LiveWindow.addSensor() and LiveWindow.addActuator(), which have been deprecated.

  • Rewritten in JavaFX
  • Enter team number along with server name
  • Support for non-standard port numbers
  • Checkboxes for boolean values
Eclipse Plugins
  • Much faster deploy
    • Checks multiple network addresses in parallel
    • Uses WebDAV instead of SSH for transferring files
  • Improved roboRio image version detection
  • Automatically deploys Java JRE if not already installed
    • Java installer is no longer necessary and has been removed from the plugins
  • Implement TCP netconsole (riolog) and show it automatically after successful deploy.  The TCP netconsole is colorized like the DS console and provides additional filtering features.  Note: it only displays output when a DS is  connected (from any computer, not necessarily the Eclipse computer).
  • Reserved DHCP Address added for roboRIO (10.TE.AM.2)
  • DHCP enabled on Wired side even in bridge mode (and at events)
  • 2nd Ethernet port issue on OM5P-AC believed to be resolved

0 Report Errors

Use this form to report any errors with the documentation. For help with WPILib, please use the FIRST Forums at For reporting WPILib bugs, please submit an issue on GitHub at