New for 2027¶
The change from the roboRIO to Systemcore is the biggest control system update since the introduction of the cRIO. A number of improvements have been made to WPILib to take advantage of Systemcore. This article will describe and provide a brief overview of the new changes and features as well as a more complete changelog for Java/C++ WPILib changes. This document only includes the most relevant changes for end users, the full list of changes can be viewed on the various WPILib GitHub repositories. There’s more information about Systemcore in the Systemcore Introduction.
It’s recommended to also review the list of known issues.
Importing Projects from Previous Years¶
Due to internal GradleRIO changes, it is necessary to update projects from previous years. After Installing WPILib for 2027, any 2026 projects must be imported to be compatible.
Major Changes (Java/C++)¶
In order to more closly track C++ compiler feature support, the supported Linux distribution has changed to only the latest Ubuntu LTS. See Supported Operating Systems and Architectures for more information.
Warning
Windows 10 support from Microsoft ended in October 2025. While we will not explicitly block Windows 10 from being used, future releases may inadvertently break compatibility with Windows 10. We will not postpone these changes in order to maintain Windows 10 compatibility, and Windows 10 support may break as a result.
Use Java 25 and C++ 23
Add Commands v3 framework for Java. Documentation is in work. In the meantime, see the Commands v3 Conference, Design Document and the port of the Hatchbot example to Commands v3.
Add OpMode framework, similar to FTC. Documentation is in progress. In the meantime, see the OpModes Design Document and the OpMode Robot template (Java / C++)
Support for the 2027 FIRST Driver Station bringing multi-platform support.
Reorganize java packages from
edu.wpi.firsttoorg.wpiliband c++ namespaces fromfrc::towpi::and create new subpackages for better organization. The VS Code importer will attempt to update code for these changes as part of the import process.Systemcore has different hardware support. Support multiple CAN buses, Smart IO, onboard IMU, Expansion Hub. Removed relay, analog output, SPI and SPI IMUs (ADIS16448, ADIS16470, ADXL345, ADXRS450), analog gyro, DMA, built-in accelerometer, Digital Glitch Filter, interrupts, counter, ultrasonic, analog trigger, Nidec Brushless, Servo, Jaguar
Removed Network Tables v3 support. See the Network Tables v4 migration guide for details on how to update your code from Network Tables v3 to v4. Users of pynetworktables will need to update to pyntcore.
Many of the simple examples were moved to snippets to de-clutter the VS Code examples. The snippets are available here: Java / C++. We’re thinking of ways to make these easier to discover.
WPILib¶
Note
As the 2026 and 2027 development happened in parallel, some of these changes are new to 2027 Alpha 5 compared to earlier alphas, but not new compared to 2026.
General Library¶
2027 Alpha 2: Update POV to use enums
2027 Alpha 2: Use steady clock directly on Systemcore
2027 Alpha 5: Replace libprotobuf with upb for dynamic decode
2027 Alpha 5: Remove
robotInit(). Use theRobot()constructor instead.2027 Alpha 5: Add a few unit overloads
2027 Alpha 5: Remove deprecated
MotorControllerGroup2027 Alpha 5: Replace individual gamepad classes (e.g.
XboxController,PS4Controller,PS5Controller,StadiaController) with a singleGamepadclass.2027 Alpha 5: Add Touchpad support for gamepads
2027 Alpha 5: Remove
MotorController::StopMotor(). UseMotorController::Disable()instead.2027 Alpha 5: Switch to new game data
2027 Alpha 5: Make joystick unplugged warning better in cases of out of range axis/button
2027 Alpha 5: Preferences Listener should not depend on mutable fields
2027 Alpha 5: Replace Speeds with Velocities in method signatures where appropriate
2027 Alpha 5: Rename FPGA clock to monotonic clock
2027 Alpha 5: Rename constants to all caps style
2027 Alpha 5: Fix HSV to RGB conversion off-by-one error
2027 Alpha 5: Rename
MotorControllerset()tosetThrottle()2027 Alpha 5: Add FTC fields
2027 Alpha 5: Make swerve and differential kinematics functions immutable
2027 Alpha 5: Rename “Test” robot mode to “Utility” to emphasize that it can be used for more than just testing
2027 Alpha 6: Fix crash when using OpMode robot on Systemcore.
Commands v2¶
Remove RamseteCommand
Remove control commands and subsystems
2027 Alpha 2: Deprecate
Command.schedule()2027 Alpha 5: Remove
Mecanum/SwerveControllerCommand2027 Alpha 5: Add
Subsystem.idle()2027 Alpha 5: Fix
WaitUntilCommandfor match time counting down
Commands v3¶
2027 Alpha 5: Add
CommandGamepadfor V3 commands2027 Alpha 5: Add compile-time checks for unsafe or incorrect coroutine usage
2027 Alpha 6: Add rising and falling edge trigger factories
2027 Alpha 6: Add a declarative state machine API on top of commands v3
NetworkTables¶
Remove NT3 support
2027 Alpha 2: Check id ranges in control messages
2027 Alpha 5: Handle interrupted save in NetworkServer
2027 Alpha 5: PubSubOption: Use record approach for Java
2027 Alpha 5: Prefix log levels to avoid macro conflicts
Data Logging¶
2027 Alpha 5: Use reflection to access non-public superclass fields
2027 Alpha 5: Optimize time and memory usage of epilogue backends
2027 Alpha 5: Support logging of protobuf-serializable types
2027 Alpha 5: Use full class names in static logger fields
Hardware interfaces¶
Add SPARKmini to PWM support
2027 Alpha 2: Fix I2C order on Systemcore
2027 Alpha 2: Fix analog scaling for updated image
2027 Alpha 2: Add support for onboard IMU mount orientations with Euler angles
2027 Alpha 5:
AddressableLED: Restore alternative color order support2027 Alpha 5: Integrate support for ExpansionHub over USB
Math¶
Remove
Rotation2dvalue fieldFix
SimpleFeedforwardoverload setFix duplicate
Rotation2dconstructorRemove LUTs from LTV controllers
Remove
RamseteControllerandRamseteCommandUse immutable member functions in
ChassisSpeedsClean up arm and elevator feedforward APIs
Remove PathWeaver support
Fix
SimpleMotorFeedforwardno-accel overload returning negative voltage outputs2027 Alpha 2: Fix
TrapezoidProfilelimiting velocity incorrectly2027 Alpha 5: Remove redundant transposes on symmetric matrices
2027 Alpha 5: Add vector product and squared length operations to
Translation2d/3d2027 Alpha 5: Remove
Mecanum/SwerveControllerCommand2027 Alpha 5: Added structs for
TrapezoidProfile.StateandExponentialProfile.State2027 Alpha 5: Replace
Pose2/3d.exp(Twist2/3d)withPose2/3d.plus(Twist2/3d.exp())to match math notation better2027 Alpha 5: Refactor
MathUtil.interpolate()andMathUtil.inverseInterpolate()to handle extrapolation2027 Alpha 5: Fix units overload resolution
2027 Alpha 5: Add 2D variants of
MathUtil.applyDeadbandandMathUtil.copySignPowfor circular joystick inputs2027 Alpha 5: Rename 1D
copySignPowto match 2DcopyDirectionPow2027 Alpha 5: Add Kraken X44 and Minion to
DCMotor2027 Alpha 5: Scale transforms instead of twists in
PoseEstimator2027 Alpha 5: Fix
ElevatorSim::GetCurrentDraw()2027 Alpha 5: Add
ChassisAccelerationsand drivetrain accelerations classes, and add forward and inverse kinematics for accelerations to the interface2027 Alpha 5:
TrapezoidProfile.StateimplementStructSerializable2027 Alpha 5: Add multi-tap boolean stream filter and multi-tap trigger modifier (double-tap detector)
2027 Alpha 5: Speed up pose estimator correction computation
2027 Alpha 5: Add limit setters to
SlewRateLimiter2027 Alpha 5: Implement
Rotation3dinterpolation as slerp instead of lerp2027 Alpha 5: Don’t clamp
Rotation2dinterpolation2027 Alpha 5: Prevent
CoordinateSystemfrom accepting left-handed systems2027 Alpha 5: Make swerve and differential kinematics functions immutable
2027 Alpha 5: Mark all geometry classes as final
Simulation¶
2027 Alpha 6: Don’t wait on init for
ExpansionHubin simulation.2027 Alpha 6: Add Onboard IMU Simulation
2027 Alpha 6: GUI: fix game message string lifetime
2027 Alpha 6: Make HalSim DS extension a no-op, fixing crash when running with the real DS option. Support for the real DS simulation option will be added in a future release.
Romi/XRP¶
2027 Alpha 5: Adding XRP Java and C++ examples for Timed Robot
2027 Alpha 6: Show IP and port of XRP/Romi to user on connection
Java units¶
2027 Alpha 5: Make measure implementations immutable only
2027 Alpha 5: Rename AngularMomentumUnit.mult to per
2027 Alpha 5: Make RPM an alias of RotationsPerMinute
2027 Alpha 5: Fix incorrect magnitudes in some MutableMeasure mutations
2027 Alpha 5: Remove deprecated divide and negate functions
CameraServer¶
Remove Axis Camera
Util¶
2027 Alpha 5: Add reverse iterators to
wpi::circular_bufferandwpi::static_circular_buffer, make other iterators bidirectional2027 Alpha 5: Fix windows mDNS announcer long startup times
2027 Alpha 5: Fix
uv_tcp_keepalivetime2027 Alpha 5: Remove
CombinedRuntimeLoader2027 Alpha 5: Fix port having incorrect endian on Windows resolver
2027 Alpha 5: Rename
CreateEventandCreateSemaphoreto Make2027 Alpha 5: Change C++ json to jart/json.cpp
2027 Alpha 5: Change Java JSON to Avaje Jsonb
2027 Alpha 5: Use C++23 stacktrace library on WindowsS
Glass / OutlineViewer / Simulation GUI¶
2027 Alpha 2: Fix NT int64 value display
2027 Alpha 5: NetworkTables: Show struct enum values
2027 Alpha 5: Fix handling for optionals and empty arrays
2027 Alpha 5: Fix color order for sim GUI LEDs
2027 Alpha 5: FMS: Fix reading past end of GSM buffer
2027 Alpha 5: Fix NT server mode
2027 Alpha 5: Add correct time for rebuilt
2027 Alpha 5: Update to SDL joystick mappings from 1-19-2026
2027 Alpha 6: Fix memory corruption and incorrect POV count
GradleRIO¶
2027 Alpha 5: Upgrade to Gradle 9.4.1
2027 Alpha 5: Add ZGC as a GC option and make it the default
2027 Alpha 5: Force encoding for written files to UTF-8
2027 Alpha 5: Add Avaje Jsonb and remove Jackson
WPILib All in One Installer¶
2027 Alpha 2: Use unique icons for tools
2027 Alpha 5: Update to VS Code 1.116.0
2027 Alpha 5: VS Code extension updates: cpptools 1.31.4, javaext 1.54
2027 Alpha 5: Show deprecated message on Windows 10
2027 Alpha 5: Hide recommended vscode extensions to install
2027 Alpha 5: Hide the chat sidebar by default
2027 Alpha 5: Use unique strings for tool display vs executable names
2027 Alpha 5: Change installer to AOT, convert tools updater to AOT app
2027 Alpha 5: Catch download failures and show URL
2027 Alpha 5: Remove Python VS Code extensions
2027 Alpha 5: Improve error handling for 0 length downloads
2027 Alpha 5: Fix Windows CRLF line break in installer when creating Linux desktop files
2027 Alpha 5: Update to Avalonia 12
2027 Alpha 6: Fix progress bar on Linux
Visual Studio Code Extension¶
Remove standalone utility
2027 Alpha 5: Improve RIOLog UI
2027 Alpha 5: Fix blank window after installing dependency from local copy
2027 Alpha 5: Remove unnecessary setting change commands
2027 Alpha 5: Support Commandsv3 vendordep
2027 Alpha 5: Move source backup in jar to backup directory
2027 Alpha 5: Set java project source/targetCompatibility to 25
2027 Alpha 5: Use shadow plugin to make shaded JARs
2027 Alpha 5: Port Java simulation canceling to C++
2027 Alpha 5: Move wpilibHome to the top of the plugin repository list
SysId¶
2027 Alpha 5: Remove Phoenix5 CANcoder preset
2027 Alpha 5: Fix crash on partially empty raw data
AdvantageScope¶
2027 Alpha 5: Use AdvantageScope 27.0.0-alpha-4
Elastic¶
2027 Alpha 5: Use Elastic 2027.0.0-alpha7
2027 Alpha 6: Use Elastic 2027.0.0-alpha8
WPIcal¶
2027 Alpha 5: Use updated thirdparty-ceres and move resource files
2027 Alpha 5: Refactor to use WPILib libraries and modern C++ conventions and improve UX
2027 Alpha 5: Remove tag ID limit
Shuffleboard¶
Warning
Shuffleboard has been removed for 2027 due to its lack of a maintainer and resource utilization issues. Users can find additional modern dashboard options here
SmartDashboard¶
Warning
SmartDashboard has been removed for 2027 due to its usage of Network Tables v3. Users can find additional modern dashboard options here
PathWeaver¶
Warning
PathWeaver has been removed for 2027 due to its lack of swerve support and lack of a maintainer. Users may find Choreo, PathPlanner, or Bline more useful. They have an intuitive user interface and swerve support.
RobotBuilder¶
Warning
RobotBuilder has been removed for 2027 due to its declining usage and burden of updating for the 2027 control system.