Releases: vavr-io/vavr
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
Preview Release 1.0.0 alpha 3
Info
Caution: This is a preview release of the upcoming major release 1.0.0. It is highly under development and the API is subject to change. Please do not use it in production.
We are still in the process of moving the changes from the original 1.0.0 branch to master.
Additionally there are stashed changes that did not make it into the minor release 0.10.0, that may make it into the upcoming 1.0.0 release. This is also work in progress.
The API Docs can be found here (🚧 currently unavailable because https://www.javadoc.io seems to be down)
Comitters
🎉 MANY THANKS TO ALL COMMITTERS! 🎉
- ⭐️ Daniel Dietrich (@danieldietrich)
- ⭐️ baant
- ⭐️ Alexandru Stana (alexandrustana)
- ⭐️ Mark Raynsford (io7m)
- ⭐️ Theodor A. Dumitrescu (@thadumi)
- ⭐️ Juan Antonio Breña Moral (jabrena)
- ⭐️ Bram Schuur (@craffit)
- ⭐️ Mincong Huang (mincong-h)
Changes
Please find the complete list of changes here.
Minor Release 0.10.0
Info
The minor release 0.10.0 focuses on several API improvements.
Please find the complete list of changes here.
The API Docs can be found here
Comitters
🎉 MANY THANKS TO ALL COMMITTERS (AND THEIR PATIENCE)! 🎉
- ⭐️ Amy (@amygithub)
- ⭐️ Andreas Gebhardt (@agebhar1)
- ⭐️ Audun Halland (@audunhalland)
- ⭐️ Daniel Dietrich (@danieldietrich)
- ⭐️ Emmanuel Touzery (@emmanueltouzery)
- ⭐️ Erlend Hamnaberg (@hamnis)
- ⭐️ Florian Stefan (@florian-stefan)
- ⭐️ Grzegorz Gałęzowski (@grzesiek-galezowski)
- ⭐️ Igor Konoplyanko (@cauchypeano)
- ⭐️ J. B. Rainsberger (@jbrains)
- ⭐️ James Lorenzen (@jlorenzen)
- ⭐️ Jia Chen (@grievejia)
- ⭐️ Julien Debon (@Sir4ur0n)
- ⭐️ Nándor Előd Fekete (@nfekete)
- ⭐️ Nataliia Privezentseva (@nataliiaprivezentseva)
- ⭐️ Maciej Górski (@mg6maciej)
- ⭐️ Mathias Düsterhöft (@mduesterhoeft)
- ⭐️ Michał Patejko (@miszasty93)
- ⭐️ Michael Ummels (@ummels)
- ⭐️ Mikołaj Fejzer (@mfejzer)
- ⭐️ Nazarii Bardiuk (@nbardiuk)
- ⭐️ Pap Lőrinc (@paplorinc)
- ⭐️ Pascal Schumacher (@PascalSchumacher)
- ⭐️ Peter Buckley (@dx-pbuckley)
- ⭐️ Robert Erdin (@roberterdin)
- ⭐️ Ruslan Sennov (@ruslansennov)
- ⭐️ Sebastian Zarnekow (@szarnekow)
- ⭐️ Sergey Pereverzov (@serp92)
- ⭐️ Stephen Kestle (@skestle)
- ⭐️ Valery (@valery1707)
- ⭐️ Victor Buldakov (@v1ctor)
Note: A few contributions didn't made it into 0.10.0 because of backward incompatibilities.
Changes
Instead of describing all changes in detail, I will provide a list and show some examples.
Beside new features there were also several (internal) improvements not shown here.
Core/API
- Change (internal): Removed internal interface io.vavr.Lambda which was on top of the (Checked)Function type hierarchy. It was not public.
- Feature: For-comprehension supports List, Option, Future, Try
- Feature: Tuple - append(), concat() and hash()
- Feature: CheckedConsumer, CheckedPredicate and CheckedRunnable enhancements
- Feature: PartialFunction now implements Function1
- Feature: Predicates.not()
- Feature: Value: toJavaArray(IntFunction), toTree(Function, Function)
- Deprecation (for removal): API.Map(Tuple2)
- Deprecation (for removal): API.LinkedMap(Tuple2)
- Deprecation (for removal): API.SortedMap(Tuple2)
- Deprecation (for removal): API.SortedMap(Comparator, Tuple2)
- Deprecation (for removal): API.SortedMap(java.util.Map)
- Deprecation (for removal): Value.toLeft()
- Deprecation (for removal): Value.toRight()
- Deprecation (for removal): Value.toValid()
- Deprecation (for removal): Value.toInvalid()
Collections
- Feature: Traversable: forEachWithIndex, reject(Predicate)
- Feature: Iterator/Stream: fill(int, Object)
- Feature: Map/Multimap: reject(BiPredicate), rejectKeys(Predicate), rejectValues(Predicate), keysIterator(), valuesIterator()
- Feature: Map/Seq: asPartialFunction()
- Feature: Seq.rotateLeft, rotateRight, takeRight, takeRightUntil, takeRightWhile
Concurrent
- Change: Future now uses Executor instead of ExecutorService. The executorService() works as before if Future was initialized with an ExecutorService, otherwise it throws. User executor() instead.
- Change: Future DEFAULT_EXECUTOR: ForkJoinPool.commonPool()
- Feature: Future.await(long timeout, TimeUnit unit)
- Feature: Future.isCancelled()
- Feature (experimental): (Experimental) Future.run(Task), Future.run(Executor, Task)
- Deprecation (for removal): Seq/Map/Set withDefault, withDefaultValue
Controls
- Feature: Either.sequence, Either.sequenceRight
- Feature: Either.traverse, Either.traverseRight
- Feature: Either.filterOrElse
- Feature: Either.toValidation
- Feature: Option.traverse
- Feature: Option.fold
- Feature: Try.traverse
- Feature: Try.onFailure
- Feature: Try.fold
- Feature: Try.toValidation
- Feature: Validation.fromTry
- Feature: Validation.traverse
- Deprecation (for removal): Either.left(), Either.right()
- Deprecation (for removal): Either.LeftProjection, Either.RightProjection




