Reactor Core 3.8.0 is part of 2025.0.0 Release Train.
3.8.0 Highlights
Enhanced Null Safety using JSpecify
🦺 Reactor Core 3.8.0 introduces JSpecify annotations for comprehensive null safety, replacing the legacy JSR 305-based annotations with a modern, properly specified standard that prevents NullPointerExceptions through build-time checks. This upgrade provides enhanced IDE support, seamless Kotlin integration with automatic translation to Kotlin's null safety system, and more precise nullability declarations including support for arrays, varargs, and generic types — making Reactor APIs safer and more developer-friendly across the entire ecosystem.
⚠️ Nullability annotations from reactor.util.annotation have been deprecated in favour of JSpecify annotations.
📖 Check the refreshed reference documentation section on Null Safety.
⚠️ Note for Kotlin users: While this change is backwards compatible in the Java ecosystem and does not dictate a new generation of Reactor Core, we do appreciate it can appear as breaking changes for Kotlin codebases. The benefits are well defined nullness of the Reactor API and reduction of the ceremony that was required prior to the introduction of JSpecify annotations.
Repeat Spec
Repeat functionality from Reactor Addons has been ported to Reactor Core under the RepeatSpec class and can be used in conjunction with the Flux#repeatWhen() and Mono#repeatWhen() operators. Make sure to check out the Javadoc.
Reactor Core Micrometer version aligned with Reactor Core version
The reactor-core-micrometer library, which is part of the reactor-core repository is always released together with reactor-core, hence we decided to align their versions starting from 3.8.0 (the previous line was 1.2.x corresponding with 3.7.x of reactor-core).
What's Changed
⚠️ Update considerations and deprecations
✨ New features and improvements
- Bump byteBuddy from 1.17.7 to 1.17.8 by @dependabot[bot] in #4113
- Bump io.projectreactor.tools:blockhound from 1.0.14.RELEASE to 1.0.15.RELEASE by @dependabot[bot] in #4120
- Bump
Micrometerto1.16.0by @chemicL in fedfdd2 - Bump
Context Propagationto1.2.0by @chemicL in fedfdd2 - Repeat specification for use with
repeatWhenoperator by @kwondh5217 in #4027 and refinement by @chemicL in b313f57 - Add
Hooks#isAutomaticContextPropagationEnabledby @sdeleuze in #4090 - Adjust
reactor.util.Loggervararg nullability by @chemicL in #4098 - Adjust
Monomethods:fromCallableandfromSuppliernullability by @chemicL in #4116 - Address NullAway warnings and refine
StepVerifiernullability by @chemicL in #4126 - Nullaway jspecify mode fixes by @chemicL in #4127
- Refine
StepVerifiernullability reflecting non-nullPublishervalues by @chemicL in #4132 - Unify reactor-core-micrometer version with reactor-core by @chemicL in #4136
🐞 Bug fixes
- Fix
RetryBackoffSpecmultiplier handling of fractional values by @chemicL in #4048 - Adjust
Flux#mapmapper to disallownullreturn values by @chemicL in #4103
📖 Documentation
- [docs] Add Null Safety documentation by @chemicL in #4137
- Add more description on
tapoperator by @ttddyy in #4009 - fix doc title displayed as untitled by @dev-jonghoonpark in #4008
New Contributors
- @dev-jonghoonpark made their first contribution in #4008
- @kwondh5217 made their first contribution in #4027
- @jkonicki made their first contribution in #4050
- @georgebanasios made their first contribution in #4036
Full Changelog: v3.7.3...v3.8.0