New for 2018

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).
  • The RobotDrive class has been split into seperate classes for different drive base platform types. These classes currently include Differential Drive (common 4wd/6wd/8wd/tank/etc. platforms), Killough Drive (3 omni's) and Mecanum
  • TalonSRX renamed to PWMTalonSRX
    • CTRE's new software also renames CANTalonSRX to TalonSRX
  • A periodic method has been added inside subsystems
  • 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
  • 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)
  • 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
  • Coming Soon - New TCP based console plugin (replacing existing NetConsole)

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