New for 2025
A number of improvements have been made to FRC® Control System software for 2025. 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.
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 2025, any 2024 projects must be imported to be compatible.
Major Changes (Java/C++)
These changes contain some of the major changes to the library that it’s important for the user to recognize. This does not include all of the breaking changes, see the other sections of this document for more changes.
The Dependency Manager in VS Code will help teams discover and install vendordeps.
Added Elastic Dashboard a driver focused dashboard.
Added annotation based logging (Epilogue) for Java
Added WPIcal tool for calibrating FRC Apriltags to correct for field setup error
The Java units library has been refactored to have unit-specific measurement classes instead of a single generic
Measure
class. The new measurement classes have clearer names (Distance
instead ofMeasure<Distance>
, orLinearAcceleration
instead ofMeasure<Velocity<Velocity<Distance>>>
), and implement math operations to return the most specific result types possible instead of a wildcardMeasure<?>
.Add persistent alerts API. Alerts are displayed on supported dashboards such as Shuffleboard and Elastic.
Add LED pattern API for easily animating addressable LEDs
Java 17 must be used as Java Source and Target compatibility have been bumped to Java 17. Java 17 has been used since 2023.
- Supported Operating Systems and Architectures:
Windows 10 & 11, 64 bit only. 32 bit and Arm are not supported
Ubuntu 22.04 & 24.04, 64 bit. Other Linux distributions with glibc >= 2.34 may work, but are unsupported
macOS 13.3 or higher, both Intel and Arm.
Aviso
The following OSes are no longer supported: macOS 12 or earlier, Ubuntu 18.04 & 20.04, Windows 7, Windows 8.1, and any 32-bit Windows.
Nota
Windows 10 support from Microsoft will end in October 2025. We intend to continue supporting Windows 10 through the 2026 season, but may have to drop support in 2027. Teams should start planning their upgrade path to Windows 11.
WPILib
General Library
Add persistent alerts API. Alerts are displayed on supported dashboards such as Shuffleboard and Elastic.
Add LED pattern API for easily animating addressable LEDs
Breaking: Remove deprecated
Gyro
andAccelerometer
interfaceBreaking: Remove deprecated
Notifier.SetHandler
functionRemove
RobotInit
usage in examples. Use constructor instead. RobotInit may be deprecated in the future.Deprecate
AxisCamera
C++: Add
FRC_ReportWarning
Implement
Sendable
for HID classesInclude sendable type information in topic metadata
GenericHID.setRumble
: Fix Java integer overflowRename SysId example to SysIdRoutine
Add
Timer.isRunning
methodAdd Java unit support for RobotController
Add a functional interface for MecanumDriveMotorVoltages and deprecate old interface
Add
Koors40
Motor Controller2025.2.1: Add 2025 field image and april tag map
2025.3.1: Add april tag map for AndyMark field. See Team Update 12 for more information.
Commands
Breaking: Remove deprecated
CommandBase
Remove deprecated
TrapzoidProfileCommand
APIBreaking: Remove deprecated C++ method
TransferOwnership
Deprecate
PIDCommand
,PIDSubsystem
,ProfiledPIDCommand
,ProfiledPIDSubsystem
,TrapezoidProfileSubsystem
Deprecate
TrapezoidProfileCommand
. Use TrapezoidProfile DirectlyCache controller
BooleanEvents
/Triggers
and directly constructTriggers
, fixing issues ifBooleanEvents
/Triggers
are created in loopsAdd deadband trigger methods to
CommandGenericHID
Make requirements private
Add
setRumble
andisConnected
toCommandGenericHID
Add
StartRun
command factoryRename
deadlineWith
todeadlineFor
Fix double composition error message truncation
Add
withDeadline
modifier
NetworkTables
Server round robin message processing
Client: only connect to IPv4 addresses
Deprecate setNetworkTablesFlushEnabled
Set NetworkTables 3 client network identity
Data Logging
Added annotation based logging (Epilogue) for Java
Logging the console can be enabled with
DatalogManager.logConsoleOutput
DataLog: Add last value and change detection
DataLogManager: Fix behavior when low on space
Epilogue: Autogenerate nicer data names by default, not just raw element names
Hardware interfaces
Breaking: Rewrite
DutyCycleEncoder
andAnalogEncoder
to simplify and remove rollover detection that was brokenAdd
getVoltage
toPWMMotorController
Add support for Sharp IR sensors
Fix edge cases of CAN ID validation and reporting for CTRE and REV devices
Report Radio LED state
Correct maximum length of DS console send
C++: Refactor AnalogTrigger to use shared_ptr
Add
RobotController.GetCommsDisableCount()
Expose sticky hardware and firmware faults in PDH and PH
Fix potential race in CANAPI
Fix REV PH disabled solenoid list
remove CANDeviceInterface
Refactor and clean up ADIS IMU classes
Propagate
PWMMotorController
stopMotor()
anddisable()
to followersCompressor
: Add more Sendable dataFix
PowerDistribution.GetAllCurrents()
Fix
AsynchronousInterrupt
2025.3.1: AddressableLED: add support for other color orders
Math
Breaking: Remove deprecated TrapezoidProfile constructors
Breaking: Remove deprecated MatBuilder factory
Deprecate
RamseteController
. UseLTVUnicycleController
insteadBreaking: Remove deprecated
MatBuilder
constructor. UseMatBuilder.fill
insteadDiscretize
SimpleMotorFeedForward
,ArmFeedForward
andElevatorFeedForward
SwerveDrivePoseEstimator
: Fix stationary module emitting error when calculating angleAdd
DCMotor.getCurrent()
overload accepting torqueAdd
cosineScale
method toSwerveModuleState
and instance optimizeMake trajectory constraints use
Rectangle2d
andEllipse2d
Add Protobuf and Struct support to many more classes
Add
getAccumulatedError()
toPIDController
Remove
WheelPositions
interface/conceptAdd
kinematics.copyInto()
Add geometry classes for
Rectangle2d
andEllipse2d
Add reset methods to
Odometry
andPoseEstimator
Add ArmFeedforward calculate() overload that takes current and next velocity instead of acceleration
Fix C++ pose estimator poseEstimate initialization
Fix PIDController error tolerance getters
Add time-varying RKDP
Add 2D to 3D geometry constructors
2025.2.1: Implement Translation3d.RotateAround
2025.3.1: Add Pose2d and Pose3d RotateAround
2025.3.1: Fix infinite loop in ArmFeedforward::Calculate(xₖ, vₖ, vₖ₊₁)
2025.3.1: Add setters for Feedforward gains
Simulation
Breaking: Remove gearing input from
FlywheelSim
andDCMotorSim
and calculate from the LinearSystem and DCMotor inputsAdd
SendableChooserSim
Fix Java sim timing on Windows
Fix interrupt edges being flipped in sim
Don’t send joystick data during auto
Initialize DIO to true in sim
Clamp battery voltage to 0
Fix: Update FMS widget when real DS is connected
Fix DS GUI System Joysticks window auto-hiding
Romi/XRP
XRP: Add
GetRotation2d
toGyro
XRP: Add Support for Encoder Period
XRP: Add
GetLED
toOnBoardIO
XRP & Romi: Changed applicable C++ methods to use units library
Java units
The units library has been refactored to have unit-specific measurement classes instead of a single generic
Measure
class. The new measurement classes have clearer names (Distance
instead ofMeasure<Distance>
, orLinearAcceleration
instead ofMeasure<Velocity<Velocity<Distance>>>
), and implement math operations to return the most specific result types possible instead of a wildcardMeasure<?>
.Add resistance units
Use div instead of divide
Add absolute value and copy sign functionality
2025.3.1: Add Measure.per overloads for all known unit types
CameraServer
Update to OpenCV 4.10.0
Wake up even if no frames received
Fix wakeup on sink destruction
HttpCamera: Send width/height/fps stream settings
HttpCamera: Auto-detect mode from stream if not set
Sink: add ability to get most recent frame instead of waiting
2025.2.1: Use frame time in Linux UsbCameraImpl
Util
Breaking: Remove
RuntimeLoader
Deprecate
RuntimeDetector
Add a simple web server for serving files. Example:
WebServer.start(5800, Filesystem.getDeployDirectory());
Branding
WPILib has a new logo.
Shuffleboard
Expose orientation property for NumberSlider
Correct FieldData de/serialization
2025.2.1: Add 2025 field image
2025.3.1: After many reports of a variety of issues, many of the resource optimations have been reverted. Performance should be similar to 2024 Shuffleboard.
SmartDashboard
Importante
SmartDashboard is not supported on Apple Silicon (Arm64) Macs.
Aviso
SmartDashboard is deprecated and will be removed for 2027 due to its usage of Network Tables v3. Users can find additional modern dashboard options here
No changes other than build updates were made to SmartDashboard
Glass / OutlineViewer / Simulation GUI
Save input after clicking away
Check for struct descriptor size 0
Align Field2d border and image padding for custom images
Add Alerts widget
Fix minimum widget width
2025.2.1: Add 2025 field image
2025.2.1: Make picking a Field2d field JSON more obvious
GradleRIO
Use Gradle 8.11
Use shell scripts for launching tools on Linux / macOS, since macOS doesn’t ship Python any more
Add method to delete files on roboRIO that have been deleted in the deploy directory. Set deleteOldFiles to true in the frcStaticFileDeploy block
Gradle now consolidates Java compile errors at the bottom of the terminal to aid discoverability https://docs.gradle.org/8.11/release-notes.html#error-warning
2025.3.1: Warn if multiple versions of the same vendordep is found
WPILib All in One Installer
Update to VS Code 1.96.2
VS Code extension updates: cpptools 1.23.2, javaext 1.38
Use shell scripts for launching tools on Linux / macOS, since macOS doesn’t ship Python any more
Only install scripts if they are used by a specific platform
Make shortcuts use the app icon
Add AppArmor file for electron apps for Ubuntu 24.04, which must be manually installed
Visual Studio Code Extension
Add Dependency Manager extension for easier finding and updating of 3rd party libraries
Add gradle clean command
Use shell scripts for launching tools on Linux / macOS, since macOS doesn’t ship Python any more
Add option to importer to import XRP project
Importer: Update for Java Units changes
Extract WPILib Utility on mac
Define java.configuration.runtimes in settings.json to ensure WPILib JDK is used
Improve intellisense by hiding items not likely to be used in Robot Programs
RobotBuilder
Remove robotInit in favor of Robot constructor
SysId
Fix crash when all data is filtered out during analysis
Remove obsolete WPILib & CTRE presets, rename CTRE presets
Clamp feedback measurement delay to zero or higher
PathWeaver
Aviso
PathWeaver is deprecated and will be removed for 2027. Users may find Choreo or PathPlanner more useful. They both have an intuitive user interface and swerve support.
Fix finding deploy directory when outputdir blank
2025.2.1: Add 2025 field image
AdvantageScope
Update to 2025 AdvantageScope
Elastic
Elastic is bundled in the installer! Elastic is a simple and modern dashboard. Read more here.
WPIcal
WPIcal is new WPILib tool for calibrating FRC Apriltags to correct for field setup error. Read more here.
2025.2.1: Add JSON combiner which allows users to combine multiple AprilTag layouts