Releases

What shipped, what it needs, and what to do if you are coming from 1.x.

  1. Which line am I on?
  2. v2.0.0-rc.1
  3. v2.0.0-beta.2
  4. v2.0.0-alpha.1
    1. Install
    2. What is new because the platform is new
    3. What changed for you
    4. Gone
    5. Verified, and not
  5. Coming from 1.x
  6. 1.x

Which line am I on?

Two lines exist and they are not compatible. This is deliberate — 2.x is a hard cut with no 2026 shims, because carrying both would have meant every class in the library branching on a season.

  Catalyst 1.x Catalyst 2.x
Controller roboRIO Limelight Systemcore
WPILib 2026 2027 alpha-7
Java 17 25
Gradle 8.x 9.7+
Commands v2 v3
CAN buses 1 5
Latest v1.12.0 v2.0.0-rc.1
Docs stable you are reading them

Match the release to your supported controller and season. This 2.x source targets WPILib 2027 alpha-7 and Systemcore OS beta 14, not roboRIO/WPILib 2026. The maintainer reports Catalyst was competition-tested at SoCal Showdown and performed well. That historical deployment does not qualify the newly recovered RC1 changes or the separate ARES 2.0 prototype.

Published prerelease and vendordep: v2.0.0-rc.1. The JitPack artifacts and a separate consumer build were verified before the vendordep moved. Phoenix 6 26.70.0-alpha-2, published 2026-09-18, is the first Phoenix build for WPILib alpha-7 — it requires 26.70.x device firmware on every TalonFX, CANcoder and Pigeon. systemcore-alpha6, the source-build-only line for Systemcore image 13, is merged into this line now. See Versions and compatibility.


v2.0.0-rc.1

16 October 2026 - prerelease and artifacts

RC1 carries reviewed current-library repairs, ARES 1.1 multicamera work, shared control, and guarded physics/odometry experiments. The ARES 2.0 prototype remains separate. Full library and example builds passed; the release records the exact CI and installation evidence. Native test classes run in separate JVMs after shared HAL/Phoenix lifecycle failures were observed. A 17 October follow-up diagnosed the downstream Numbers simulation failure and repaired its isolated fixture and desktop drive model: 623 full-build tests and a fresh 4-test repeat passed, with the original shooting assertions unchanged. See the validation evidence for scope and limits. The RC1 binary is unchanged. Experimental paths still require hardware qualification; SoCal Showdown tested the team’s prior competition build.

v2.0.0-beta.2

9 September 2026 · release

The 2027 port, on the WPILib and Systemcore OS pair that actually run together.

Beta rather than 2.0.0, deliberately. It is pinned to WPILib 2027.0.0-alpha-7, and an alpha is not a foundation you can call stable — that one has already changed Mechanism from an interface to a class and back across three builds. At that release date, competition qualification had not been recorded. The API is what 2.0.0 will be; the version says what it is standing on.

Requires Systemcore OS beta 14. That release is titled “(REQUIRES WPILIB ALPHA 7)” and the pairing is not advice — a build made against alpha-7 aborts on beta 13 before any robot code runs. It could not drive CTRE devices at release. Neither Phoenix 6 nor PathPlannerLib had an alpha-7 release at the time; this tag depended on the 26.50.0-alpha-1 and 2027.0.0-alpha-3 alpha-5/6 builds. That changed nine days later: CTRE published Phoenix 6 26.70.0-alpha-2 on 2026-09-18, this line moved to it, and a CTRE robot can run it now — with 26.70.x device firmware on every TalonFX, CANcoder and Pigeon. This historical tag used PathPlanner 2027.0.0-alpha-3; current RC1 source pins 2027.0.0-alpha-4.1 and includes the Commands v2 bridge. See Versions and compatibility.

implementation 'com.github.TomAs-1226:FrcCatalyst:v2.0.0-beta.2'

Installable through the vendordep again. Alpha-6’s release was on no public maven, so JitPack could not build the library at all and every tag after v2.0.0-alpha.1 had to be built from source on a machine with the WPILib installer. Alpha-7 is on frcmaven/release, so that cost is paid.

Fixed: the default field was two seasons out of date. CatalystMath.FIELD_WIDTH, AllianceFlipUtil and VisionConfig all defaulted to 8.21 m — 2024 Crescendo’s width — while the rest of the library used 8.07 m. A team that never called configure(...) had every red-alliance Y flipped about an axis 7 cm off centre: 14 cm of error on every mirrored waypoint, on one alliance only, with nothing reporting a fault.

Fixed: an unsolved MegaTag2 no longer discards the MegaTag1 fix beside it. Measured over 1,540 frames in four IMU configurations, MegaTag1 solved every frame and MegaTag2 none. An unsolved MegaTag2 publishes six zeros, which in blue-origin form is the exact centre of the field — full length, finite, and indistinguishable from a real pose by every check except the centre-origin key.

Breaking: AutoSelector.getChooser() returns Selectable<String>, not SendableChooser<String> — alpha-7 deleted that class. Callers rename setDefaultOption → addDefault and addOption → add. It is the only signature in the library that 2027 forced to change.

Five classes are back in the build (WpiTelemetrySink, TelemetryUtil, MechanismVisualizer, DriverBoard); only PhotonSource is still excluded. 867 tests, 0 failures.


v2.0.0-alpha.1

23 August 2026 · release

The 2027 port.

Install

repositories { maven { url 'https://jitpack.io' } }
dependencies {
    implementation 'com.github.TomAs-1226:FrcCatalyst:v2.0.0-alpha.1'
}

or the vendordep, https://tomas-1226.github.io/FrcCatalyst/beta/vendordep/FrcCatalyst.json.

Then the two flags from Installation, without which the robot boots and dies on the first command scheduled.

What is new because the platform is new

Five CAN buses. CatalystCANBus types them, and CANBusPlanner knows the thing that is invisible from robot code: can_s0+can_s1 share an SPI controller, can_s3+can_s4 share another, can_s2 is alone. Splitting a drivetrain across a pair buys far less than it looks.

A machine that reports on itself. SystemCoreStatus reads processor, temperature, memory, storage, eMMC wear, per-bus CAN utilisation, fault counters, the 3.3 V rail, and the brownout thresholds the device holds — not the roboRIO’s 6.8 V, which is a different number. A roboRIO reported almost none of this, which is why a robot that browned out because four seasons of logs had filled the disk used to fail pointing at nothing at all.

Catalyst Agent. An optional package that runs on the Systemcore and answers what NetworkTables cannot: which core is pinned and by what, what filled the disk, how many times the robot program has restarted and what it printed on the way down. Read-only by design.

OpModes. Autos as annotated classes the Driver Station lists and selects natively — no chooser to publish and nothing to remember when a routine is added.

DriverBoard. Status on the Driver Station itself, which is the one screen a driver is certainly looking at thirty seconds before a match.

Dual IMU. The Pigeon and Systemcore’s onboard IMU read as one, measuring angular acceleration from the difference between two accelerometers rather than differentiating a gyro.

Plus the onboard IMU, typed SmartIO pins, CatalystI2C with the SCL/SDA swap handled, GamePieceDetector on the Hailo NPU, and SystemCoreSim, which makes a full disk or a pinned core reachable in a unit test.

What changed for you

Five decorators were renamed. Commands v3 took the names and gave them incompatible return types, so Java will not allow an override — this is the one place API stability could not be kept:

1.x 2.x
.until(...) .untilTrue(...)
.andThen(...) .then(...)
.alongWith(...) .together(...)
.raceWith(...) .racing(...)
.withTimeout(...) .timeoutAfter(...)

Three more, each forced by something being removed from WPILib or the hardware:

  • AutoSelector is not in this build. SendableChooser is gone from WPILib, and its replacement Selectable exists only in the development snapshot, not the release this build targets — so there is nothing for the chooser to publish to. Excluded from the source set rather than deleted; it returns when a release ships org.wpilib.tunables.
  • ServoMechanism.getServo() is getPwm(). Servos cannot be driven from Systemcore at all — its IO pins are 3.3 V and nowhere near the current — so the class drives raw PWM and says so.
  • Identity/RioSerial and Software/RioImage are now ControllerSerial and ControllerImage. The Rio-named keys are still published for one season so existing dashboards keep resolving.

SwerveSubsystem publishes ModuleVelocities and ChassisVelocities, with ModuleStates and ChassisSpeeds kept as deprecated aliases for one season.

Everything else kept its name. Every builder, every mechanism signature, every binding call.

Gone

  • PhotonVision. No 2027 build, and Systemcore is Limelight-first — the pipeline is in the hardware. PhotonSource is excluded from the compile rather than deleted.
  • ChoreoLib. No build past alpha-2, so followChoreoPath() has no path forward yet.
  • ignoringDisable(boolean) still exists and compiles but is a no-op. v3’s disabled-mode behaviour could not be confirmed against the alpha jars, and guessing at what runs while disabled is not something to do quietly.

PathPlanner works, bridged onto the v3 scheduler by LegacyCommands.fromV2(...) until PathPlanner itself ships for v3.

Verified, and not

540 tests pass on Windows and Linux. The example project builds. It publishes with a complete 18-dependency POM, and JitPack resolves it.

It has not run on a robot. See the list of facts that could not be verified — CAN termination, the camera transform signs, the eMMC value format. Each is somewhere a guess would have looked exactly like knowledge.


Coming from 1.x

Roughly in the order that will save you time.

  1. Install the 2027 toolchain. Java 25 and Gradle 9.7+. Gradle 8 fails with Unsupported class file major version 69, which names neither the JDK nor the dependency.
  2. Add the two --add-opens flags. Everything else can wait; this one stops the robot.
  3. Rename the five decorators. A compile error each, so the compiler finds them all for you.
  4. Change your bus names. "" and "rio" no longer mean anything. can_s0 is the default; run CANBusPlanner.suggest() before you rewire anything.
  5. Remove PhotonVision from your vendordeps.
  6. Phoenix 6 and PathPlanner. Phoenix 6 26.70.0-alpha-2 has a WPILib alpha-7 release — add it, and re-flash every TalonFX, CANcoder and Pigeon to 26.70.x firmware first. PathPlanner still has no alpha-7 release and stays compileOnly, so add it by hand only if you need it: neither vendor publishes a 2027 vendordep JSON at a discoverable URL, so the usual online install fetches a 2026 one, which installs cleanly and fails at build with an error naming none of this.
  7. Check getChooser() and getServo() if you used them.

Then read Systemcore & WPILib 2027 once through. It is the page that explains why things are the way they are, including the hardware behaviour that no amount of reading robot code would reveal.


1.x

The roboRIO line, still maintained. Its release notes live on the stable documentation and in the repository README.

v1.12.0 is the current release and the one to use on a competition robot.


Back to top

Documents Catalyst 2.0.0-beta.2 (Systemcore OS image 14, WPILib 2027.0.0-alpha-7). Other versions: Versions and compatibility. Built for the FRC community. Go build something awesome.

This site uses Just the Docs, a documentation theme for Jekyll.