ReactiveX/RxJava
67.8
Adequate · 24 September 2026
168.8k
lines of production code
Java
primary language
5
measurements over time
What this system is
This system is the RxJava 4.x reactive programming library, providing core asynchronous data stream types such as Flowable, Observable, Single, Maybe, and Completable. It introduces a new package namespace, native Java 26 support, and a new Streamable type alongside immutable configuration records for operators. The codebase includes comprehensive JUnit 5 test suites and JMH performance benchmarks to validate correctness and measure throughput across various reactive patterns.
How it got here
2012 — RxJava 4.x initial setup and cleanup
6 changes.
This period established the foundational structure for the RxJava 4.x release, introducing the new package namespace, Java 26 support, and a modernized Gradle build system. It simultaneously removed legacy IDE configurations, old client/server implementations, and outdated build scripts to streamline the project for the new version.
2016–2026 — RxJava 4 release and modularization
12 changes.
This period focused on the major release of RxJava 4, characterized by migrating the codebase to the new io.reactivex.rxjava4 package namespace and introducing Java 9+ module support. The work included significant API refactoring, such as replacing builder patterns with immutable configuration records and updating disposable management, alongside comprehensive test suite migration to JUnit 5. Additionally, extensive JMH performance benchmarks were added to establish baselines for core operators and parallel streams.
Features
Add Java 9+ module descriptor for RxJava 4
The library now includes a \module-info.java\ file, officially declaring the \io.reactivex.rxjava4\ Java module. This enables native support for the Java Platform Module System (JPMS), allowing users to properly declare dependencies on RxJava 4 within modular applications and ensuring correct encapsulation of internal packages.
src/main/module · high confidence
Added RxJava 4 JMH benchmarks for Flowable and Observable map operators
New JMH performance benchmarks have been added to the \src/jmh/java/io/reactivex/rxjava4/xmapz\ directory for RxJava 4, covering \concatMap\, \flatMap\, and \switchMap\ operators on both \Flowable\ and \Observable\. These benchmarks compare the throughput of generic mapping methods (e.g., \concatMap\ returning \Flowable\/\Observable\) against dedicated type-specific operators (e.g., \concatMapCompletable\, \concatMapMaybe\, \concatMapSingle\) to help users identify performance optimizations when mapping to \Completable\, \Maybe\, or \Single\ types.
src/jmh/java/io/reactivex/rxjava4/xmapz · high confidence
Initial repository structure and documentation for RxJava 4.x
This change establishes the foundational structure for the RxJava 4.x release by adding key documentation and configuration files. It introduces the \README.md\ detailing the new \io.reactivex.rxjava4\ package namespace, native Java 26 support, and the new \Streamable\ type. It also adds \CONTRIBUTING.md\ with specific guidelines for AI-assisted contributions, \SECURITY.md\ for vulnerability reporting, \DESIGN.md\ outlining the v3/v4 design principles, and standard license/copyright files. Additionally, it configures the build environment with \.gitattributes\ for line endings, \pmd.xml\ for code quality rules, and updates the \gradlew\ wrapper and \.gitignore\ to support the new project setup.
(repo-wide) · high confidence
RxJava 4 core types and annotations introduced
The library has shifted from the \io.reactivex.rxjava3\ to the \io.reactivex.rxjava4\ package namespace, introducing the foundational reactive types (\Flowable\, \Observable\, \Single\, \Maybe\, \Completable\) and their associated interfaces (\Source\, \Observer\, \Emitter\, \OnSubscribe\) in the new \core\ package. This release also adds a new \annotations\ package containing metadata markers such as \@BackpressureSupport\, \@SchedulerSupport\, \@NonNull\, and \@Nullable\ to help developers understand operator behavior and null-safety contracts.
src/main/java · high confidence
Removals
Removal of legacy Java client implementation and IDE metadata
The template-client module has removed its legacy Java source code, including the TalkClient implementation, Conversation interface, and Sentence model, along with associated Eclipse project configuration files (.classpath, .project, and .settings). This change eliminates the old client-side logic and IDE-specific build metadata from the project structure.
template-client · high confidence
Removal of legacy template-server REST endpoints and configuration
The template-server module has removed its legacy REST implementation, including the TalkServer class (which exposed /talk endpoints for greeting and farewell) and the associated web.xml configuration for the Jersey REST service. Additionally, Eclipse-specific project metadata files (.classpath, .project, and .settings) have been deleted, indicating a cleanup of IDE-specific build artifacts.
template-server · high confidence
Behavioural changes
Enforced code style and documentation standards via Checkstyle
The project now enforces strict coding standards through a new Checkstyle configuration. This includes mandatory Javadoc for public methods, specific indentation rules (4-space multiples, no tabs), line length limits (175 characters), and trailing space removal. These rules apply to main source code, with specific suppressions for internal implementation classes, tests, and performance benchmarks.
config · high confidence
Removal of legacy SpringSource STS Gradle preferences
The project has removed three legacy configuration files specific to the SpringSource Tool Suite (STS) Gradle integration: \com.springsource.sts.gradle.core.import.prefs\, \com.springsource.sts.gradle.core.prefs\, and \com.springsource.sts.gradle.refresh.prefs\. These files previously controlled Eclipse/STS-specific behaviors such as task execution order (e.g., \cleanEclipse\, \eclipse\), dependency management toggles, and resource filtering. Their removal indicates a shift away from these specific IDE-centric Gradle import/refresh workflows, likely simplifying the build configuration or moving to a different IDE/Gradle plugin setup.
.settings · high confidence
RxJava 4 introduces configuration records and refactors disposable containers
The library introduces a new standard for operator configuration via immutable Java records in the \io.reactivex.rxjava4.core.config\ package, including \OnBackpressureBufferConfig\, \SampleConfig\, \SequenceEqualConfig\, \StandardBufferedConfig\, \StandardConcurrentBufferedConfig\, \StandardConcurrentConfig\, and \StreamableInterceptConfig\, which replace previous builder patterns or ad-hoc parameter lists with structured, type-safe settings. Additionally, the disposable management system has been refactored: \CompositeDisposable\ now implements \DisposableStreamerCancellation\ to support the new \Streamable\ lifecycle, and \Disposable\ no longer implements \AutoCloseable\, requiring explicit disposal calls rather than try-with-resources usage.
rxjava · high confidence
Updated Javadoc stylesheet for improved documentation styling
The project now includes a custom \stylesheet.css\ file in the \gradle\ directory to control the visual appearance of generated Javadoc documentation. This change standardizes the look and feel of the API reference, applying specific font families (DejaVu Sans), colors, and layout rules for navigation bars, code blocks, and typography, ensuring a consistent and readable presentation for users viewing the generated documentation.
gradle · high confidence
Fixes
Suppress ProGuard warnings for Java Flow API
A new ProGuard configuration file for RxJava 4 has been added to suppress warnings related to the \java.util.concurrent.Flow\ classes, ensuring a cleaner build process when code shrinking and obfuscation are enabled.
src/main/resources · high confidence
Test coverage
Added JMH benchmarks for Streamable operators; Added RxJava 4 JMH performance benchmarks; Added global test timeout configuration; Added parallel stream performance benchmarks; RxJava 4 test suite migration and expansion.
Dependencies
RxJava 4.0.0-SNAPSHOT build infrastructure overhaul
The project has been upgraded to version 4.0.0-SNAPSHOT with a complete rebuild of its Gradle build system. The build now targets Java 26 as the baseline compilation version and utilizes modern Gradle plugins, including \com.vanniktech.maven.publish\ (0.37.0) for publishing, \biz.aQute.bnd.builder\ (7.4.0) for OSGi bundle generation, and \me.champeau.jmh\ (0.7.3) for performance benchmarks. Key dependencies have been updated to their latest versions, specifically Mockito 5.23.0, JUnit Jupiter 6.1.3, TestNG 7.12.0, and Guava 33.7.1-jre. The legacy multi-module conventions and manual Maven deployment scripts have been removed in favor of a streamlined single-module configuration with centralized dependency management.
(dependencies) · high confidence
Upgrade Gradle wrapper to version 9.7.1
The Gradle wrapper has been updated to use Gradle 9.7.1 (previously 1.0-milestone-9). This change also introduces new configuration properties for the wrapper, including network timeout, retry logic, and distribution URL validation, to improve build reliability and security.
gradle/wrapper · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 74 → 68 (-5.8)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 78 → 85 (+6.9)
- Architecture 100 → 100 (-0.4)
- Maturity 65 → 65 (-0.0)
- Readiness 82 → 60 (-22.1)
- Security 84 → 81 (-2.1)
Resolved (351)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/core/Flowable.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/core/Streamable.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/jdk8/FlowableMapOptional.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/jdk8/ParallelMapOptional.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableCache.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableCreate.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableFlatMap.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableInterval.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableIntervalRange.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableReduceWithSingle.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableSamplePublisher.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableWindowTimed.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/maybe/MaybeFlatMapNotification.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/maybe/MaybeFlatMapSingle.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/observable/ObservableCollect.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/internal/operators/observable/ObservableSequenceEqual.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/processors/MulticastProcessor.java)
- Duplicated block (10 lines × 2) (src/main/java/io/reactivex/rxjava4/processors/ReplayProcessor.java)
- …and 331 more
New (927)
- ClassTooLong: Completable (src/main/java/io/reactivex/rxjava4/core/Completable.java)
- ClassTooLong: Flowable (src/main/java/io/reactivex/rxjava4/core/Flowable.java)
- ClassTooLong: FlowableCreate (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableCreate.java)
- ClassTooLong: FlowableFlatMap (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableFlatMap.java)
- ClassTooLong: FlowableGroupBy (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableGroupBy.java)
- ClassTooLong: FlowableObserveOn (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableObserveOn.java)
- ClassTooLong: FlowableReplay (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableReplay.java)
- ClassTooLong: FlowableWindowTimed (src/main/java/io/reactivex/rxjava4/internal/operators/flowable/FlowableWindowTimed.java)
- ClassTooLong: Maybe (src/main/java/io/reactivex/rxjava4/core/Maybe.java)
- ClassTooLong: ObservableReplay (src/main/java/io/reactivex/rxjava4/internal/operators/observable/ObservableReplay.java)
- ClassTooLong: ObservableWindowTimed (src/main/java/io/reactivex/rxjava4/internal/operators/observable/ObservableWindowTimed.java)
- ClassTooLong: ParallelFlowable (src/main/java/io/reactivex/rxjava4/parallel/ParallelFlowable.java)
- ClassTooLong: ReplayProcessor (src/main/java/io/reactivex/rxjava4/processors/ReplayProcessor.java)
- ClassTooLong: ReplaySubject (src/main/java/io/reactivex/rxjava4/subjects/ReplaySubject.java)
- ClassTooLong: RxJavaPlugins (src/main/java/io/reactivex/rxjava4/plugins/RxJavaPlugins.java)
- ClassTooLong: Single (src/main/java/io/reactivex/rxjava4/core/Single.java)
- ClassTooLong: Streamable (src/main/java/io/reactivex/rxjava4/core/Streamable.java)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no installation or build instructions (docs/Mathematical-and-Aggregate-Operators.md)
- …and 907 more
Changes since last survey
- 25 commits — 21 feature/other, 4 fixes
By area
- .github/workflows — 10 commits
- (root) — 5 commits
- src/main — 5 commits
- gradle/wrapper — 2 commits
- (repo) — 1 commit
- docs/Getting-Started.md — 1 commit
- src/test — 1 commit
Notable commits
- fix: 4.x: Fix consumer retention in cache() upon subscribe-cancel race (#8283)
- fix: Fix Observable.take scheduler annotation (#8289)
- fix: Fix Streamable.forEach BiConsumer overload ignoring executor (#8302)
- fix: Fix timeout handling in SchedulerToExecutorService.awaitTermination (#8301)
- change: 4.x: Add SchedulerSupport annotation validator (#8292)
- change: 4.x: Streamable.timer to cancel the executor/scheduler upon finish (#8286)
- change: Gradle 9.7.1
- change: Merge branch '4.x' of https://github.com/ReactiveX/RxJava into 4.x
- change: Update 4.x Getting Started documentation (#8290)
- change: Update security policy with reporting guidelines (#8284)
- change: chore(deps): bump actions/setup-java from 5.7.0 to 6.0.0 (#8298)
- change: chore(deps): bump actions/setup-java from 6.0.0 to 6.0.1 (#8303)
- change: chore(deps): bump biz.aQute.bnd.builder from 7.3.0 to 7.4.0 (#8295)
- change: chore(deps): bump codecov/codecov-action from 7.0.0 to 7.1.0 (#8305)
- change: chore(deps): bump codecov/codecov-action from 7.1.0 to 7.1.1 (#8307)
- change: chore(deps): bump com.google.guava:guava from 33.6.0-jre to 33.7.1-jre (#8293)
- change: chore(deps): bump github/codeql-action/upload-sarif (#8276)
- change: chore(deps): bump github/codeql-action/upload-sarif (#8287)
- change: chore(deps): bump github/codeql-action/upload-sarif (#8296)
- change: chore(deps): bump github/codeql-action/upload-sarif (#8300)
- …and 5 more
Architecture
- Containers 0 added · 0 removed · contexts 1 added · 1 removed · edges 0 added · 0 removed
Added bounded contexts (1)
- rxjava
Removed bounded contexts (1)
- .
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ReactiveX/RxJava was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit ec9f38c33595dfd81168832c60cb960a69f8492a — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-5f8d0eb43fd7.