article / 7 min
An honest, beginner-friendly comparison of the three WPILib-supported FRC languages — Java, C++, and Python (RobotPy) — with vendor support and how to choose.
/ 1,429 words / 6 sections
One of the first real decisions a new FRC team makes is which language to write robot code in. The good news: there is no wrong answer that will keep you off the field. WPILib officially supports three languages — Java, C++, and Python — and a robot written well in any of them can win events. The differences are about how easy the language is to learn, how fast your code runs, and how much help you can find when you get stuck. This guide breaks down all three honestly so you can pick the one that fits your team.
WPILib is the standard software library every FRC team uses to talk to motors, sensors, and the driver station. According to the WPILib documentation, Java, C++, and Python "were chosen for the officially-supported languages due to their appropriate level-of-abstraction and ubiquity in both industry and high-school computer science classes."
You may also hear about LabVIEW, a graphical language National Instruments historically supported for FRC. It still exists in the ecosystem, but the modern, actively documented path for new teams is one of the three text-based languages above, so that is where this guide focuses.
Here is the short version before we dig in:
| Language | Best for | Tradeoff |
|---|---|---|
| Java | Most teams, especially new ones | Slightly slower than C++ (rarely matters) |
| C++ | Teams wanting maximum control/performance | Manual memory management; easier to crash |
| Python (RobotPy) | Beginners and Python-first programs | Newer, smaller community; some vendor gaps |
Java is the most popular FRC language and, for most teams, the recommended starting point. The WPILib docs put it plainly: "New/inexperienced users are encouraged to use Java." It hits a sweet spot between being readable and being safe — the language manages memory for you (so a forgotten cleanup will not silently corrupt your robot), and the compiler catches many mistakes before code ever runs.
The practical advantage of Java is the ecosystem around it. Because so many teams use it, the example code, tutorials, and Chief Delphi forum answers you will find are overwhelmingly in Java. Every vendor ships a polished Java library on day one, and WPILib's own example projects are published with official feature parity across Java, C++, and Python. When your robot misbehaves at 11 p.m. before a competition, having the largest pool of people who have hit your exact problem is worth a lot.
Java code interacts with WPILib classes like TimedRobot, CommandScheduler, and motor controller classes such as SparkMax (REV) or TalonFX (CTRE). Heads up that vendor class names drift between seasons — REV's controller class, for example, was renamed from CANSparkMax to SparkMax in the 2025 library, so older code you find online may use the previous name. Always confirm names against the current vendor docs. Either way, the overall structure you learn in Java carries over almost identically to the other two languages.
C++ is the choice for teams that want the absolute best performance and the most direct control over the hardware. The WPILib docs describe the tradeoff well: C++ "offers better high-end performance, at the cost of increased user effort. Memory must be handled manually, and the C++ compiler does not do much to ensure user code will not crash at runtime."
That last part is the catch. In Java and Python, the language cleans up memory for you. In C++, you are responsible for it, and a mistake there can crash your robot code mid-match — exactly when you cannot afford it. Modern C++ has tools (like smart pointers) that make this much safer than it used to be, but it is still more to think about.
So who actually benefits? In practice, the roboRIO (the robot's main controller) is fast enough that a typical robot program written in Java runs perfectly well. The performance gap C++ offers mostly matters for unusually heavy computation — for example, running custom vision or control math on the robot itself. Many veteran programmers also simply prefer C++ because they like the control, or because their team has used it for years and has a mature codebase. If that is not you, the performance benefit alone is rarely a reason to choose C++ over Java as a new team. The same WPILib classes (TimedRobot, command-based framework, vendor motor classes) are all available in C++.
Python became an officially supported FRC language in 2024, and it is the most approachable of the three for true beginners. The project that makes this work is RobotPy — a community of FRC mentors and students who maintain the Python bindings. Its documentation lives at robotpy.readthedocs.io.
The biggest surprise for newcomers is performance. You might assume "interpreted Python must be slow," but the RobotPy FAQ explains that Python is "fast enough" and "almost certainly just as fast as Java for typical WPILib-using robot code." The reason: RobotPy is a thin Python layer over the same native C++ WPILib that the other languages use. The heavy lifting happens in compiled C++; only your robot-specific logic is interpreted. So for normal robot code, performance is a non-issue.
Python's honest tradeoffs are elsewhere:
RobotPy also includes a robot simulator, so you can test logic on a laptop without the robot connected — important given the crash-safety note above.
Your robot code is only as useful as the vendor libraries it can call. Here is where the three languages stand for the most common vendors:
| Vendor / Library | Java / C++ | Python (RobotPy) |
|---|---|---|
CTRE Phoenix 6 (Kraken/Falcon, TalonFX) | Yes (vendordep) | Yes — official phoenix6 on PyPI |
| REV REVLib (SPARK MAX/Flex) | Yes (vendordep) | Yes — RobotPy package |
| PhotonVision | Yes | Yes — photonlibpy |
| PathPlanner | Yes | Yes — robotpy-pathplannerlib |
| navX (IMU) | Yes | Yes — robotpy-navx |
CTRE provides an official Python distribution for Phoenix 6, installable with pip install phoenix6 per the Phoenix 6 install docs. For Java and C++, you add Phoenix 6 and REVLib through WPILib's vendor-dependency (vendordep) system in VS Code, as described in the WPILib third-party libraries guide. The takeaway: the libraries most teams need exist in all three languages, but Java/C++ remain the most complete and earliest-updated. Exact package names and versions change each season, so check the current vendor docs before you install.
A few honest rules of thumb:
Whatever you pick, the concepts transfer. The command-based framework, TimedRobot structure, and PID control you learn in one language map directly onto the others, so a switch later is far easier than learning to program from scratch. Want a structured path from your first line of robot code to a competition-ready program? Start with the LearnFRC Programming track.
where this came from
This article is AI-assisted: drafted from primary sources, then reviewed and edited by hand. Errors still get through. When one is reported we fix it and write down what changed, in public, in the corrections log.
dept / programming-software
You came for one answer. These teach the same subject properly, in the order a team actually learns it. All 51 are free, and none of them need an account to read.
if you want to keep the ticks
LearnFRC has 394 free FRC lessons across every department. Create a free account to save your place, track your progress, and earn a certificate.
Create a free accountReading never needs one. This is only for saving where you got to.
these are the closest, not the newest
8 min read
What FRC's rules allow for 3D printed parts, which ones are worth printing versus machining, and the filament and settings that survive a match.
read it20 min read
Learn how to install WPILib and VS Code for FRC step by step: download the installer, create a robot project, add vendordeps, and deploy to the roboRIO.
read it13 min read
How to structure an FRC command-based robot project the right way — subsystems, commands, RobotContainer, and Constants — verified against official WPILib docs.
read itend of sheet
Keep going with the other 102 articles, or work through all 394 lessons across 11 departments.