WPILib Documentation¶
Welcome!
WPILib is the standard programming library for FIRST Robotics, supporting teams competing in FIRST Robotics Competition (FRC) and FIRST Tech Challenge (FTC).
How can we help?
New to WPILib? You're in the right place.
Start with Zero to Robot to connect Systemcore, install WPILib, and write your first robot program. No programming experience is required.
Set Up and Program Your Robot
→Welcome back! Get ready for 2027.
Use the checklist below to install WPILib, import your project, and update vendor libraries. Check the replacement tools before you deploy.
Pre-Season Checklist
- Download and run the 2027 WPILib installer
- Update your Systemcore if needed
- Use Import Project in VS Code to migrate your 2026 code
- Re-add all vendor libraries: they do not carry over when you import your project
- Check for vendor library updates in the Dependency Manager
- Test with the simulator before deploying to hardware
Tools to Replace for 2027
These tools are not available in the 2027 release. Choose a replacement before your first robot test.
- Shuffleboard: update to Elastic or AdvantageScope
- SmartDashboard: update to Glass or Elastic
- PathWeaver: update to PathPlanner or Choreo
- RobotBuilder: being removed with the control system change in 2027
What Is New for 2027
- FRC now uses Systemcore: see the hardware migration guide
- 2027 field images and AprilTag layout data (included in WPILib after kickoff)
- Windows 10 is no longer supported: Windows 11 is required
- Vendor library updates required: check the Dependency Manager
FTC: Choose Your Control System
FTC teams use Systemcore with WPILib or REV Control Hub / Expansion Hub with the FTC SDK. Choose the documentation for your hardware.
Using REV Control Hub / Expansion Hub?Follow FTC Docs for setup, wiring, and programming.
Using Systemcore with WPILib?- Systemcore works with WPILib code; Motioncore connects motors
- See the FTC overview for release status and setup information
- Practice writing and running code on an XRP robot
- WPILib FTC overview
Practice with WPILib
- Use WPILib to read sensors, control motors, and write autonomous routines
- Choose your language and editor in Zero to Robot
- Use the XRP to practice without waiting for a competition robot
Find the Right Documentation
Set up Systemcore, write robot code, and learn how to test and debug it. You’ll also find links to hardware guides and vendor documentation.
Separate site coming soon
Find FRC hardware guides, vendor links, and team resources. These will move to a separate site; until then they are here in WPILib docs.
Find FTC assembly and wiring guides, plus setup and programming help for the REV control system. For Systemcore programming, use WPILib docs.
Core Documentation
Looking for a specific topic? Start with the links below.
Foundations
Everyday Tools
Controls and Autonomous Programming
PR CHANGED FILES
- API Reference
- Style Guide
- Hardware Component Overview
- Software Component Overview
- FTC Robot Wiring Walkthrough
- FTC Robot Wiring Reference
- FTC with WPILib
- Control System Hardware Overview
- Robot Battery Basics
- IP Configurations
- Port Forwarding
- Programming the Romi
- Bang-Bang Control with BangBangController
- Combining Feedforward and PID Control
- Feedforward Control in WPILib
- PID Control in WPILib
- Combining Motion Profiling and PID Control with ProfiledPIDController
- Trapezoidal Motion Profiles in WPILib
- Debouncer
- Linear Filters
- Median Filter
- Slew Rate Limiter
- Translation, Rotation, and Pose
- Transformations
- Debugging State-Space Models and Controllers
- State-Space Controller Walkthrough
- State Observers and Kalman Filters
- Creating an Identification Routine
- Trajectory Constraints
- LTV Unicycle Controller
- Trajectory Generation
- Transforming Trajectories
- Including Git Data in Deploy
- Profiling with VisualVM
- Get Alliance Color
- Coordinate System
- The C++ Units Library
- Robot Project Deploy Directory
- Treating Functions as Data
- Basic Programming
- Java Garbage Collection
- Joysticks
- OpMode Framework
- Setting Robot Preferences
- FIRST CAN Device Specifications
- Binding Commands to Triggers
- Command Compositions
- The Command Scheduler
- Commands
- A Technical Discussion on C++ Commands
- Commands v2 Programming
- Organizing Command-Based Robot Projects
- PID Control in Command-based
- Motion Profiling in Command-based
- Combining Motion Profiling and PID in Command-Based
- Structuring a Command-Based Robot Project
- Subsystems
- What Is “Command-Based” Programming?
- Creating Commands
- How the Scheduler Works
- Commands v3 Programming
- Using Lambda Functions
- Making Commands Run
- Command Mechanisms
- Migrating from Commands v2
- Scopes
- State Machines with Commands
- Structuring Your Project
- Telemetry with Commands
- Command Triggers
- Troubleshooting Commands
- Command-Based Programming
- AdvantageScope
- Widgets for the Command-Based Framework
- The Field2d Widget
- Introduction to Glass
- The Mechanism2d Widget
- Glass Widgets
- WPILib Example Projects
- Driver Station (Operator Console) Best Practices
- Driver Station Debug Graph
- Driver Station Errors/Warnings
- FIRST Driver Station Introduction
- Driver Station Log File Viewer
- FIRST Driver Station
- Manually Setting the Driver Station to Start Custom Dashboard
- FRC Glossary
- Addressable LEDs
- Repeatable Low Power Movement - Controlling Servos with WPILib
- Using Motor Controllers in Code
- Using the WPILib Classes to Drive your Robot
- Generating and Storing Pressure
- Analog Inputs - Software
- Analog Potentiometers - Software
- Digital Inputs - Software
- Gyroscopes - Software
- Programming Limit Switches
- Differential Drive Kinematics
- Differential Drive Odometry
- Kinematics and Odometry
- Introduction to Kinematics and The ChassisVelocities Class
- Mecanum Drive Kinematics
- Mecanum Drive Odometry
- Swerve Drive Kinematics
- Swerve Drive Odometry
- Creating a Client-side Program
- Listening for Changes
- NetworkTables Instances
- NetworkTables Networking
- Migrating from NetworkTables 3.0 to NetworkTables 4.0
- Publishing and Subscribing to a Topic
- Reading Array Values Published by NetworkTables
- Writing a Simple NetworkTables Robot Program
- NetworkTables Tables and Topics
- Programming Snippets
- RobotPy Python Programming
- Troubleshooting
- Systemcore
- Systemcore SSH
- Downloading & Processing Data Logs
- On-Robot Telemetry Recording Into Data Logs
- Recording Faults with Persistent Alerts
- AprilTag Introduction
- Using Multiple Cameras
- Basic Vision Example
- Using CameraServer
- Working with Contours
- 3rd Party Libraries
- Creating a Robot Program
- What is WPILib?
- Drivetrain Simulation Tutorial
- Step 4: Updating Odometry and Visualizing Robot Position
- Step 3: Updating the Drivetrain Model
- Introduction to Robot Simulation
- Physics Simulation with WPILib
- Unit Testing
- WPIcal
- Getting Started with XRP
- Programming the XRP
- 2026 Game Data Details
- Known Issues
- Removed features
- Quick Start for Returning Teams
- New for 2027
- Zero to Robot
- New to WPILib
- Returning This Season
- FRC Robot Wiring Walkthrough
- Step 1: Build and Wire Your Robot
- FRC Robot Wiring Reference
- Kitbot / Starter Bot Assembly
- Installing the FIRST Driver Station
- Step 2: Set Up Your Environment
- Offline Installation Preparation
- Python Installation Guide
- WPILib Installation Guide
- Imaging your Systemcore
- Step 3: Configure Your Control System
- Using the OpenMesh OM5P Radio
- Programming your Radio
- Create Your Test Drivetrain Program
- Step 4: Write and Drive
- Running Your Test Program
- Software Tools