FRC Plugin for IntelliJ IDEA
For the 2025 FRC season, I’ve released version 5.0.0 of the (unofficial) FRC Plugin for IntelliJ IDEA . Versions 2024.1.x, 2024.2.x and 2024.3.x of IntelliJ IDEA are supported for all editions: Community, Education, and Ultimate. (2023.3 and older versions of IntelliJ IDEA are no longer supported. It just takes too much time to maintain numerous versions.)
Installation
You can install the plugin in IntelliJ IDEA by going to File | Settings | Plugins, select the “Marketplace” tab, and then search for “FRC”. Select the “FRC” plugin and click the Install button. After it completes, you may need to restart IntelliJ IDEA.
To upgrade, go the File | Settings | Plugins, select the “Installed” tab, then search either for “FRC” or for “/outdated”. Click the “Update” button. After it completes, you may need to restart IntelliJ IDEA.
What’s New
2025 WPILib Support and Templates
I’ve updated of the New FRC Project Wizard to support the 2025 templates. The Java templates are direct ports of the official WPI Lib templates, with the ability to add some enhancements such as Kotlin support, include a customized the .gitignore
file (or exclude it), and more. The Kotlin templates are my conversions of the official Java templates, and are modified to be more Kotlinesque in their design. The Kotlin files are created in src/main/java
rather than src/main/kotlin
so you can very easily use both Java and Kotlin code in the project, with the classes living side by side. (Kotlin natively supports using either source directory structure.)
Kotlin DSL Gradle file
New for 2025, the New FRC Project Wizard now has the ability to create the Gradle build file using the Gradle Kotlin DSL in a build.gradle.kts
file. The usual disclaimers that this is an unofficial implementation apply But for the Kotlin lovers out there, it’s the next step in coding your robot 100% in Kotlin. NOTE: You do not have to write your Robot in Kotlin, or even have Kotlin support in your robot project, to use the Kotlin DSL in your Gradle build.
Run/Debug Configurations storage location changed
The plugin creates IntelliJ IDEA run/debug configurations for building and deploying the robot. These configurations are automatically created 1) when you crate a robot project via the New FRC Project Wizard; 2) the first time you open an externally generated/created FRC robot project in IntelliJ IDEA; 3) “manually” via the menu: Tools | FRC | Create Run/Debug Configurations | Create Build, Deploy, and Debugging Run/Debug Configurations . Previously these were create in a .run
directory in the root of the project. This is the recommended alternative directory name for run/debug configurations that you do not want to store inside the .idea
directory. (Making their inclusion in git easier.) However, I’ve been plagued by a bug in IntelliJ IDEA that will often remove the generated FRC run/debug configurations from the run/debug menu when Gradle is reimported. Even though the files are still present in the .run
directory. Moving them to the default .idea/runConfigurations
directory prevents them from disappearing. So they now are placed in that directory. And a !.idea/runConfigurations
pattern has been added to the .gitignore
file (for projects created via the FRC Plugin’s new project wizard) so the configurations can be shared. (I have opened a bug report with JetBrains on this. So hopefully next season I can move them back to the .run
directory.)
Improved FRC Framework detection
Leveraging a new plugin API added in IntelliJ IDEA 2024.1, the detection of an FRC robot project by the plugin, when opening an externally created or generated project for the first time, has been improved. While the old methodology worked well, there were a few corner cases where it failed. And the new methodology is faster.
Known Issues
K2 Mode compatibility
Just after releasing v5.0.0 of the plugin, I learned that the plugin will not load if you have Kotlin K2 compiler support enabled in IntelliJ IDEA. There is a simple fix for this. I need to add a setting in the plugin’s configuration file that declares it it K2 compatible. Since I am not doing any low level Kotlin interactions in my plugin, I can easily make that declaration. I hope to have a fix published this weekend. It then takes up to 48 hours to appear in the marketplace. So with luck, it will be available Monday, Tuesday at the latest. In the meantime, if you have K2 support enabled, you will need to disable it, restart IntelliJ IDEA, and then re-enable (or possibly even reinstall) the FRC plugin. Sorry for the inconvenience. It’s a challenge keeping up on all the changes to the IntelliJ IDEA Plugin API.
Read Access Exceptions
JetBrains has been greatly restructuring the Threading model within IntelliJ IDEA. Over the past year and a half, each new major version of IntelliJ IDEA has had significant changes to the threading model. I have done my best to catch all the places a change is needed. But if one was missed, IntelliJ IDEA will throw an “Read Access” (or “Write Access”) error. These can be reported via the Error Submitter by clicking on the explanation point icon in the lower right of the IDE.
This of course will show exception in other plugins and the core IDE itself if applicable. Any ones in the FRC plugin will be labeled as such. Reporting these to me via the Error Submitter will help me track them down and resolve them. No personal information is sent with the report. Just the version of IDE, the version of the Plugin, and the exception stacktrace.
Previously Existing Features
For those new to the FRC plugin for IntelliJ IDEA, here is a list of its features. Many screenshots show the legacy IntelliJ IDEA UI. I need to get updated screenshots created. But functionality is the same in the new UI.
New Project Wizard
The plugin provides a New FRC Project Wizard for generating FRC robot projects in either Java or Kotlin. (Kotlin templates are only available for the Project Templates, and not the numerous example templates.) These are direct ports of the official WPI Lib templates. Launch the Wizard either for the “New Project” button on the IntelliJ IDEA Welcome screen, or via File | New| Project. Select “FRC Robot Project” form the list of project generators. select the version of WPI Lib to use, and click “Next”.
Select the desired template and language, Java or Kotlin, to create the files in. As you select a template, a description of the template is shown. Once you have made you selection, click “Next”.
Select the various options:
Command Based Robot Templates
There are several command based robot class templates to make coding easier. Open the context menu (i.e. right click) on any package folder and select New > FRC > Java (or Kotlin) > Template Name. (You can also access this via the main menu under File > New > FRC > …)
For example, when creating a command, you can select required subsystems:
I will note that I need to improve this dialog. If the list of available base commands or subsystems is large, the dialog gets very large. I need to have the UI switch to an alternate layout if there are more than say 6 or 8 items. It’s on the list of things to get to when I have time
The resultant created command will have the appropriate call to addRequirements
:
In Commands written in Kotlin as well:
RioLog Console Tool Window
While the Gradle “riolog” task can be used to view the riolog output in the Gradle build window, the FRC Plugin provides a dedicated RioLog Console Tool Window which allows for pausing, restarting, search, and clearing of the output, either on demand or automatically upon robot restart. It also provides native supports the awesome Grep Console plugin providing you with color syntax highlighting, output folding – so you can have those verbose debug statements folded out of view until you need them – as well as the ability to filter out lines. (FYI, I have no affiliation with the free Grep Console plugin. I just think its a great plugin and therefore wanted to provide support for it, if for no other reason then for my own use )
Run/Debug Configurations
The FRC Plugin will generate run/debug configurations. This not only makes building and deploying easier – and accessible from all the familiar run/debug keyboard shortcuts – but it makes debugging easier. No more digging through the docs or Chief Delphi to refresh your memory on how to configure things to attach your Robot to the debugger. Simply run the “Build & Deploy Robot for Debugging” configuration, then use one of the “Debug Robot” debugger tasks (depending on how you are connected to the robot) to attach IntelliJ IDEA’s debugger.
You can also access the Gradle based run/debug configurations from the Gradle tool window:
You can, as of 2023, also create these run/debug configurations via the menu: Tools | FRC | Create Run/Debug Configurations | Create Build, Deploy, and Debugging Run/Debug Configurations.
Automatic notifications of WPILib Updates Available
When a WPILib update is available, the FRC Plugin will provide a notification to you. And with one click, your Gradle build file will be updated to the new version, and your project re-imported (i.e. sync’ed).
The check for update can also be run manually from the Tool menu:
Notifications for updates only occur for updates for the same season/year. For example, if you open a 2024 robot now, it will not indicate that the 2025.1.1 update is available. This is because new year updates are not backwards compatible. And often you may want to work on a previous years robot.
Note that automatically updating a Kotlin DSL Gradle build file is not yet implemented, I hope to get that implemented in the next week or so.
Vendordeps Addition Detection
If you add a vendordeps file, either manually of via the ./gradlew vendordep --url
command, or modify an existing file, the FRC Plugin will detect the change and trigger a Gradle reimport so the new libraries are picked up and added to the project.
There is a bug that if the vendordeps
directory did not previously exist, the File Watcher implementation does not work properly and does not trigger the Gradle reimport. It is on my list to resolve this issue. In the meantime, as a workaround, you can manually run the Gradle reimport via the “Reload all Gradle projects” button in the Gradle toolwindow.
I have yet to implement a feature to add a vendordeps file via the IntelliJ IDEA UI. Every year I hope to get to it, and every year it slips. So for now, you can simply download or copy the needed file into the vendordeps
directory, or use the ./gradlew vendordep --url
command in the terminal window.
Feedback Welcome
As always, I sincerely appreciate any feedback you have. Please let me know if you are finding the plugin worthwhile by commenting below, or giving it a quick 5 star rating , or leaving a review. The positive feedback is very rewarding, and helps incentivizes me to continue working on the plugin. It takes a lot of time to maintain and enhance the plugin and a positive review makes the work worth it. Also please feel free to open any feature requests, or report any issue via the Project’s Issue Tracker . I have a few more minor tweaks I hope to get done and pushed out soon before my Software Mentoring duties become my main focus for Q1.
Good luck to all the teams this year. I hope this plugin helps you to develop your robot with pleasure.