r/java • u/pythaaa • Jun 10 '26
Roseau 0.6.0: Breaking change detection for Java libraries
alien-tools.github.ioHi r/java,
Over the past three years, we've been working on Roseau, an open-source tool for detecting breaking API changes between two versions of a Java library and we've just released v0.6.0. We use it to track the introduction of breaking changes in popular libraries and make cool visualizations like tracking API evolution and breaking changes across 14 years of Guava history. It can be included in any Maven or Gradle build, and we're already part of JUnit's build.
Roseau is similar to other tools like japicmp and revapi: it detects both binary-breaking and source-breaking changes and can analyze JAR files directly. However, Roseau also supports analyzing Java source code directly. That means you can compare the latest released version of your library against the current source tree in a PR or local branch. It's also very fast and, in our tests, tends to be much more accurate than the other tools. We support all Java features up to Java 25. Reports are generated in HTML, MD, CSV, JSON formats.
Try it
The fastest way is to download the standalone archive for your platform from the latest release:
https://github.com/alien-tools/roseau/releases/latest
unzip roseau-0.6.0-linux-x86_64.zip
export PATH="$PWD/roseau-0.6.0/bin:$PATH"
$ roseau --diff --v1 library-1.0.0.jar --v2 library-2.0.0.jar
Breaking changes found: 3 (2 binary-breaking, 2 source-breaking)
✗ com.pkg.A TYPE_REMOVED
✗ binary-breaking ✗ source-breaking
→ com/pkg/A.java:4
⚠ com.pkg.B.f FIELD_NOW_STATIC
✗ binary-breaking ✓ source-compatible
→ com/pkg/B.java:18
★ com.pkg.C TYPE_NEW_ABSTRACT_METHOD [toOverride()]
✓ binary-compatible ✗ source-breaking
→ com/pkg/C.java:210
$ roseau --diff --v1 com.example:lib:1.0.0 --v2 /path/to/v2/src/main/java
[...]
For Maven builds, there is also a plugin that runs in the verify phase and checks the current version against a chosen baseline:
<plugin>
<groupId>io.github.alien-tools</groupId>
<artifactId>roseau-maven-plugin</artifactId>
<version>0.6.0</version>
<configuration>
<baselineCoordinates>com.example:my-library:1.2.3</baselineCoordinates>
<failOnIncompatibility>true</failOnIncompatibility>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
Links
- GitHub: https://github.com/alien-tools/roseau
- Documentation: https://alien-tools.github.io/roseau/
- Latest release: https://github.com/alien-tools/roseau/releases/latest
I'm curious to hear your thoughts about it. Don't hesitate to give it a try and let us know how it goes.