io.github.alien-tools:roseau-cli

Fast and accurate API breaking change analysis of Java libraries.

https://github.com/alien-tools/roseau

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.7%) to scientific vocabulary

Keywords

api backward-compatibility breaking-changes diff java
Last synced: 6 months ago · JSON representation ·

Repository

Fast and accurate API breaking change analysis of Java libraries.

Basic Info
  • Host: GitHub
  • Owner: alien-tools
  • License: mit
  • Language: Java
  • Default Branch: main
  • Homepage:
  • Size: 16.4 MB
Statistics
  • Stars: 12
  • Watchers: 5
  • Forks: 3
  • Open Issues: 10
  • Releases: 6
Topics
api backward-compatibility breaking-changes diff java
Created over 2 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Roseau: Breaking Change Analysis for Java Libraries

Roseau is a fast and accurate tool for detecting breaking changes between two versions of a library, similar to other tools like japicmp, Revapi or Clirr. Whether you're a library maintainer or a developer worrying about upgrading your dependencies, Roseau helps ensure backward compatibility across versions.

Key Features

  • Detects both binary-level and source-level breaking changes
  • Indifferently analyzes Java source code (using JDT or Spoon) and compiled JARs (using ASM)
  • Excellent accuracy and performance
  • Supports Java up to version 21 (including records, sealed classes, etc.)
  • CLI-first and scriptable

Like other JAR-based tools, Roseau integrates smoothly into CI pipelines and can analyze artifacts from remote repositories such as Maven Central. But unlike others, Roseau can also analyze source code directly, making it ideal for checking commits, pull requests, or local changes in an IDE, as well as libraries hosted on platforms like GitHub for which compiled JARs are not readily available.

In a nutshell

  1. Roseau infers an API model from each version of the library to analyze
  2. It performs side-by-side comparison of the two API models to detect any breaking changes

Roseau builds lightweight, technology-agnostic API models that list all the exported symbols in a library—including types, methods, and fields—along with their properties. These models can be easily serialized and stored (e.g., as JSON) for further analysis or archival. Roseau relies on either JDT or Spoon to extract API models from source code, and on ASM to extract API models from bytecode. The breaking change inference algorithm is completely agnostic of the underlying parsing technology.

The list of breaking changes considered in Roseau is specified here and drawn from various sources, including the Java Language Specification, japicmp's implementation, Revapi's list of API Differences, the API evolution benchmark and our own extensive tests. We consider both source-level and binary-level compatibility changes.

Usage

As a standalone CLI tool

Download the latest stable version of the CLI JAR from the releases page or build it locally:

bash $ git clone https://github.com/alien-tools/roseau.git $ mvn package $ ls cli/target/roseau-cli-0.2.0-jar-with-dependencies.jar

Identify breaking changes between two versions, either from source trees or compiled JARs:

$ java -jar roseau-cli-0.2.0-jar-with-dependencies.jar --diff --v1 /path/to/v1.jar --v2 /path/to/v2.jar CLASS_NOW_ABSTRACT com.pkg.ClassNowAbstract com/pkg/ClassNowAbstract.java:4 $ java -jar roseau-cli-0.2.0-jar-with-dependencies.jar --diff --v1 /path/to/sources-v1 --v2 /path/to/sources-v2 METHOD_REMOVED com.pkg.Interface.m(int) com/pkg/Interface.java:18

Roseau supports different modes, output formats, and options:

$ java -jar roseau-cli-0.2.0-jar-with-dependencies.jar --help Usage: roseau [--api] [--diff] [--fail] [--plain] [--verbose] [--classpath=<classpathString>] [--extractor=<extractorFactory>] [--format=<format>] [--json=<apiPath>] [--pom=<pom>] [--report=<reportPath>] --v1=<v1> [--v2=<v2>] --api Serialize the API model of --v1; see --json --classpath=<classpathString> A colon-separated list of elements to include in the classpath --diff Compute breaking changes between versions --v1 and --v2 --extractor=<extractorFactory> API extractor to use: JDT or SPOON (from sources), ASM (from JARs) --fail Return a non-zero code if breaking changes are detected --format=<format> Format of the report; possible values: CSV, HTML, JSON --json=<apiPath> Where to serialize the JSON API model of --v1; defaults to api.json --plain Disable ANSI colors, output plain text --pom=<pom> A pom.xml file to build a classpath from --report=<reportPath> Where to write the breaking changes report --v1=<v1> Path to the first version of the library; either a source directory or a JAR --v2=<v2> Path to the second version of the library; either a source directory or a JAR --verbose Print debug information

Git Integration

Roseau can easily be integrated with Git to compare arbitrary commits, refs, branches, etc. The following minimal .gitconfig registers Roseau as a difftool aliased to bc:

[difftool "roseau"] cmd = /path/to/roseau --diff --v1 "$LOCAL" --v2 "$REMOTE" [alias] bc = difftool -d -t roseau

Then, Roseau can be invoked on Git objects using the usual syntax, for example:

bash $ git bc # BCs in unstaged changes $ git bc HEAD # BCs in uncommitted changes (including staged ones) $ git bc --staged # BCs in staged changes $ git bc path/to/File.java # BCs in specific file $ git bc main..feature # BCs between two branches $ git bc HEAD~2 HEAD # BCs between two commits

Citing Roseau

If you use Roseau for academic purposes, please cite: "Roseau: Fast, Accurate, Source-based Breaking Change Analysis in Java". Corentin Latappy, Thomas Degueule, Jean-Rémy Falleri, Romain Robbes, Lina Ochoa. In IEEE International Conference on Software Maintenance and Evolution (ICSME 2025).

bibtex @inproceedings{latappy25roseau, author = {Corentin Latappy and Thomas Degueule and Jean-Rémy Falleri and Romain Robbes and Lina Ochoa}, title = {{Roseau}: Fast, Accurate, Source-based Breaking Change Analysis in {Java}}, booktitle = {{IEEE} International Conference on Software Maintenance and Evolution, {ICSME} 2025, Auckland, New Zealand, September 7-12, 2025}, publisher = {{IEEE}}, year = {2025} }

License

This repository—and all its content—is licensed under the MIT License. („• ‿ •„)

Owner

  • Name: ALIEN
  • Login: alien-tools
  • Kind: organization

Citation (CITATION.cff)

cff-version: 1.2.0
preferred-citation:
  title: "Roseau: Fast, Accurate, Source-based Breaking Change Analysis in Java"
  authors:
    - given-names: Corentin
      family-names: Latappy
      orcid: https://orcid.org/0000-0003-1512-0980
    - given-names: Thomas
      family-names: Degueule
      orcid: https://orcid.org/0000-0002-5961-7940
    - given-names: Jean-Rémy
      family-names: Falleri
      orcid: https://orcid.org/0000-0002-8284-7218
    - given-names: Romain
      family-names: Robbes
      orcid: https://orcid.org/0000-0003-4569-6868
    - given-names: Lina
      family-names: Ochoa
      orcid: https://orcid.org/0000-0002-8767-036X
  type: conference-paper
  conference:
    name: IEEE International Conference on Software Maintenance and Evolution (ICSME)
    location: Auckland, New Zealand
  publisher: IEEE
  year: 2025

GitHub Events

Total
  • Create event: 62
  • Release event: 4
  • Issues event: 5
  • Watch event: 6
  • Delete event: 43
  • Issue comment event: 17
  • Member event: 2
  • Push event: 278
  • Pull request event: 68
Last Year
  • Create event: 62
  • Release event: 4
  • Issues event: 5
  • Watch event: 6
  • Delete event: 43
  • Issue comment event: 17
  • Member event: 2
  • Push event: 278
  • Pull request event: 68

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 8
  • Total pull requests: 48
  • Average time to close issues: 27 days
  • Average time to close pull requests: 8 days
  • Total issue authors: 4
  • Total pull request authors: 5
  • Average comments per issue: 0.38
  • Average comments per pull request: 0.17
  • Merged pull requests: 24
  • Bot issues: 0
  • Bot pull requests: 35
Past Year
  • Issues: 2
  • Pull requests: 40
  • Average time to close issues: 15 days
  • Average time to close pull requests: 9 days
  • Issue authors: 2
  • Pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.18
  • Merged pull requests: 17
  • Bot issues: 0
  • Bot pull requests: 35
Top Authors
Issue Authors
  • tdegueul (4)
  • jrfaller (2)
  • sormuras (1)
  • gus33000 (1)
Pull Request Authors
  • dependabot[bot] (31)
  • jrfaller (6)
  • tdegueul (3)
  • Tourlat (3)
  • sapir-backline (1)
Top Labels
Issue Labels
Pull Request Labels
dependencies (31) java (28) github_actions (3) enhancement (2)

Packages

  • Total packages: 3
  • Total downloads: unknown
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 0
    (may contain duplicates)
  • Total versions: 6
repo1.maven.org: io.github.alien-tools:roseau-cli

Fast and accurate API breaking change analysis of Java libraries

  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 33.1%
Average: 40.2%
Dependent packages count: 47.3%
Last synced: 6 months ago
repo1.maven.org: io.github.alien-tools:roseau-parent

Fast and accurate API breaking change analysis of Java libraries

  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 33.1%
Average: 40.2%
Dependent packages count: 47.3%
Last synced: 6 months ago
repo1.maven.org: io.github.alien-tools:roseau-core

Fast and accurate API breaking change analysis of Java libraries

  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 33.1%
Average: 40.2%
Dependent packages count: 47.3%
Last synced: 6 months ago

Dependencies

.github/workflows/build.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • dorny/test-reporter v1 composite
  • stCarolas/setup-maven v4.4 composite
pom.xml maven
  • org.junit:junit-bom 5.9.3 import
  • com.google.guava:guava 32.1.2-jre
  • fr.inria.gforge.spoon:spoon-core 10.3.0
  • org.hamcrest:hamcrest 2.2 test
  • org.junit.jupiter:junit-jupiter test
src/test/resources/api-extractor-tests/without-modules/v1/pom.xml maven
src/test/resources/api-extractor-tests/without-modules/v2/pom.xml maven
.github/workflows/release.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite