Releases: vavr-io/vavr
v1.0.1
Fixes a native HashMap serialization bug, which serialized the internal HashArrayMappedTrie structure including the pre-computed hash values of keys.
For keys like enums that use Object.hashCode() (non-deterministic across JVM restarts), these stored hash values would differ in another process, causing lookups to fail.
Full Changelog: v1.0.0...v1.0.1
v1.0.0
Vavr started in 2014 as Javaslang, a small experiment in bringing functional programming to Java. Over the years, it grew into a comprehensive library trusted by thousands of projects.
This is the first* stable major release. It marks the point where the API is mature, battle-tested, and ready for long-term production use with full semantic versioning guarantees going forward. Vavr 1.0.0 is intentionally not a revolution. The goal of this release is to formalize the stability that 0.x users have relied on for years, not to reinvent the library.
The 1.0.0 label reflects what has been true in practice for a long time: Vavr is production-ready, stable, and not dead
Thank you to every contributor who filed issues, submitted pull requests, improved documentation, and helped shape the library over the past 12 years.
Philosophy of 1.0.0
1.0.0 is a drop-in replacement for 0.11.0. The API you know is the API you get. If your project compiles against 0.11.0, upgrading to 1.0.0 should be a version bump and nothing more (unless you used the experimental Task API, which was the only removal).
Larger changes - such as an aggressive minimum Java version bump, potential API redesigns, and leveraging modern JVM features - are deliberately staged for Vavr 2.x. The 1.0.0 line will remain a conservative, Java 8-compatible foundation for projects that need long-term stability above all else.
What's Changed
- Fix: Missing .mapTo / .mapToVoid override on Either by @adamkopec (#3218)
- hundreds of tiny JavaDocs issues by @pivovarit
Full Changelog: v0.11.0...v1.0.0
v0.11.0
The day has come - Vavr 0.11.0 is out, marking the first minor release in several years.
From here on, the focus shifts toward Vavr 1.0.0, starting with a significant Java version bump.
The 0.11.x line will continue to receive bugfixes and maintenance updates, but no new features are planned. Roadmap details can be found here.
Huge thanks to everyone who contributed in any form.
Significant Additions
Lazy For() Comprehension (#3085)
The for-comprehension API has been expanded with lazy, evaluation-friendly signatures that accept functions instead of eagerly-evaluated objects:
Option<Integer> result = API.For(
calculate1(),
(r1) -> calculate2(r1),
(r1, r2) -> calculate3(r1, r2))
.yield((r1, r2, r3) -> r1 + r2 + r3);JSpecify Integration (#3113)
Vavr now integrates JSpecify annotations, enhancing null-safety support in IDEs and modern static analysis tools.
Better Future Cancellation (#3107)
As a result of internal refactoring, cancellation is now possible for Futures that have not yet started execution.
Various API Additions
Either/Validation.cond()Value.mapTo(U)andValue.mapToVoid()Try.toEither(Throwable -> L)
What's Changed
- New feature: Either.cond by @adamkopec in #3061
- New feature: Validation.cond by @adamkopec in #3062
- New feature: For-comprehensions for Eithers and Validations by @adamkopec in #3063
- New feature:
.mapTo(U)and.mapToVoid()for Value by @adamkopec in #3086, #3090 - Lazy For() Comprehension Generator by @pivovarit in #3085
- New feature:
Try.toEither(Throwable -> L)by @adamkopec in #3088 - Fix: Missing javadocs for types in For comprehensions by @adamkopec in #3089
- Fix: Missing javadocs for pattern matching and other components by @adamkopec in #3095
- Fix: flaky tests of set comparison by @lycoris106 in #3104
- Remove Future.Computation and streamline task execution/cancellation by @pivovarit in #3107
- Lazily-evaluated Iterator.unfoldRight by @pivovarit in #3112
- Fix bit indexing in BitSet to use word-relative offsets by @pivovarit in #3116
- JSpecify integration by @pivovarit in #3113
- Javadocs overhaul by @pivovarit in #3125, #3129, #3130, #3110, #3114
- Fix TreeMultimap Java map conversion by @pivovarit in #3132
- ... and many more
New Contributors
- @adamkopec made their first contribution in #3061
- @lycoris106 made their first contribution in #3104
Full Changelog: v0.10.7...v0.11.0
v0.10.7
Patch Release 0.10.6
This release brings Virtual-Thread-friendliness and documentation updates.
This is the last planned patch release for the 0.10.x train. 0.11.x incoming!
Changes
- Replace synchronization by Lock in FutureImpl by @Koziolek in #2912
- Replace synchronized by Lock in Future#find by @Koziolek in #2910
- Replace synchronized by lock in functions generator by @Koziolek in #2909
- Remove outdated comment by @bvkatwijk in #2957
- Fix CheckedRunnableTest#shouldApplyAnUncheckedFunctionThatThrows by @bvkatwijk in #2954
Full Changelog: v0.10.5...v0.10.6
Committers
🎉 MANY THANKS TO ALL COMMITTERS! 🎉
- ⭐️@Koziolek
- ⭐️@bvkatwijk
- ⭐️@pivovarit
Patch Release 0.10.5
Vavr is back with a new maintainer, roadmap, and... a release.
This release brings various performance enhancements, bugfixes, and explicit jlink-friendly module declarations instead of automatic modules.
Committers
🎉 MANY THANKS TO ALL COMMITTERS! 🎉
@KrnSaurabh @achinaou @sleepytomcat @j-baker @Kevin222004 @pivovarit
Changes
- Qualify all yield() calls by @pivovarit in #2799
- Fix Array.appendAll() arraycopy type mismatch by @pivovarit in #2795
- Performance improvement for List::unfold, List::unfoldLeft by @sleepytomcat in #2689
- Traversable.zipWithIndex() javadoc fix by @sleepytomcat in #2706
- Faster LinkedHashMap by tail() by @j-baker in #2725
- Actual faster LinkedHashSet tail by @j-baker in #2726
- Faster LinkedHashSet head() by @j-baker in #2728
- minor: make private class final with default constructor by @Kevin222004 in #2740
- Replace synchronized method/block with reentrant lock by @KrnSaurabh in #2845
- Update Scala to 3.5 by @achinaou in #2858
- Suppress Tuple elements serialization warning by @pivovarit in #2872
- Suppress various serialization warnings by @pivovarit in #2873 #2874 #2875 #2876 #2877
- Don't reference ThreadDeath directly due to its future removal by @pivovarit in #2878
- Fix remaining Java Serialization issues with JDK21 by @KrnSaurabh in #2880
- Full Java Platform Module System support for Java 9+ by @pivovarit in #2846
- Various JavaDoc fixes by @pivovarit in #2888 #2889 #2895 #2896 #2897 #2898
Patch Release 0.10.4
Info
This is a maintenance release for the 0.10.x release train. It back ports bug fixes and improvements from the upcoming 1.0.0 release.
Please find the complete list of changes here.
The API Docs can be found here
Committers
🎉 MANY THANKS TO ALL COMMITTERS! 🎉
- ⭐️ anton0xf (@anton0xf)
- ⭐️ Gualtiero Testa (@gualtierotesta)
- ⭐️ Joachim Bargsten (@jwbargsten)
- ⭐️ Mincong Huang (@mincong-h)
- ⭐️ Sergei Semenov (@sleepytomcat)
Changes
- Option<>.collect() not to call PartialFunction collector on arguments where it is not defined (#2580) @sleepytomcat
- Iterate once to create two iterators in partition (#2577) @mincong-h
- Wrong parameter name in Either.filterOrElse JavaDoc (#2618) @gualtierotesta
- Fix Array#update(int, T) complexity (#2648) @anton0xf
- more robust slideby classifier function handling (#2642) @jwbargsten
- Vector.of(T element) performance improvement (#2659) @sleepytomcat
Patch Release 0.10.3
Info
This is a maintenance release for the 0.10.x release train.
Please find the complete list of changes here.
The API Docs can be found here
Committers
🎉 MANY THANKS TO ALL COMMITTERS! 🎉
- ⭐️ Mincong Huang (@mincong-h)
- ⭐️ Daniel Dietrich (@danieldietrich)
Changes
Patch Release 0.10.2
This patch release fixes the bug of overlapping JPMS module names by removing the Automatic-Module-Name attributes from the MANIFEST.MF files.
The upcoming release v1.0.0 will not have Automatic-Module-Name attributes.
The next release v2.0.0 will have proper JPMS modules.
Bugfix Release 0.10.1
Info
This is a maintenance release for the 0.10.x release train.
Please find the complete list of changes here.
The API Docs can be found here
Committers
🎉 MANY THANKS TO ALL COMMITTERS! 🎉
- ⭐️ Daniel Dietrich (@danieldietrich)
- ⭐️ Theodor A. Dumitrescu (@thadumi)
- ⭐️ Bram Schuur (@craffit)
Changes
- Bugfix: #2430 Future.reduce considers executor
- Bugfix: #2426 Fixes DistictIterator to not eat null values
- Bugfix: #2405 Fixes patmat corner case that might produce a ClassCastException
- Bugfix: #2403 ClassCastException during pattern matching
- Bugfix: #2399 Fix: CharSeq implements Comparable
- Improvement: #2400 Improve performance of last() call on TreeMap


