Releases: typelevel/fs2
v2.0.0
This is the first release of the 2.0 series, featuring support for Cats 2.0.0 and Cats Effect 2.0.0.
This release is NOT binary compatible nor source compatible with the 1.0 series. The breaking source changes between 1.0 and 2.0 are relatively minor in the fs2-core JAR but the fs2-io JAR has some significant changes. See release notes of 1.1.0-M1 and 1.1.0-M2 releases for more details.
This is the final release of what was the 1.1 milestone series. As of this release, FS2 is using semantic versioning, following the major.minor.micro
naming convention. Future 2.x releases will be binary compatible with all other releases in 2 series.
This release is built for Scala 2.11, 2.12, and 2.13.
Since 1.1.0-M2, the following changes have occurred:
- Removed resource constructors that supported explicit / manual cancelation and added
s.pull.headOrError
(#1603) - Added
s.pull.lastOrError
(#1609) - Added
unfoldLoop
andunfoldLoopEval
(#1594) - Added
onFinalizeWeak
,bracketWeak
,bracketCaseWeak
, andscope
operations (#1593) - Added
Stream.evals
andStream.evalSeq
(#1596 #1582) - Additional internal performance improvements (#1597)
Please see release notes for 1.1.0-M1 and 1.1.0-M2 for additional changes since 1.0.5.
For a full list of changes in 2.0.0, see: https://github.com/functional-streams-for-scala/fs2/pulls?q=is%3Apr+milestone%3A2.0.0+is%3Aclosed
git shortlog -sn --no-merges "v1.1.0-M2".."v2.0.0"
15 Michael Pilquist
5 Christopher Davenport
4 Scala Steward
1 Diego E. Alonso-Blas
1 Jakub Kozłowski
1 Paul Cleary
The full list of contributors since 1.0.5:
➜ git shortlog -sn --no-merges "v1.0.5".."v2.0.0"
48 Michael Pilquist
20 Scala Steward
13 Diego E. Alonso-Blas
7 shn-amn
7 AdrianRaFo
6 Christopher Davenport
5 Jakub Kozłowski
5 Ikrom
4 Yannick Heiber
4 Luka Jacobowitz
4 GabrielAsman
2 zakolenko
2 Diego E. Alonso Blas
2 Fabio Labella
2 Tim Fisken
1 Luis Miguel Mejía Suárez
1 Lucas Satabin
1 Andrew Bushmin
1 Vitaly Lavrov
1 Georgi Krastev
1 heraklos
1 Bjørn Madsen
1 Paul Cleary
v1.1.0-M2
This is the second milestone release for FS2 1.1.0. The fs2-core project is almost fully backwards compatible with the previous releases in the 1.0.x series but it depends on cats-effect 2.0.0-RC2, which has a few small API changes.
Most importantly, this release revamps the bracketing/scoping mechanism to more closely align with expectations. Specifically, resources are now promptly released immediately after the bracket
in which they were acquired -- for example, Stream.bracket(r)(f) ++ s
now guarantees that f
is run before s
is evaluated. As a result of this change, the scope
method on Stream
has been removed. When upgrading, it can safely be deleted. For (much) more detail, see #1574.
This release is built for Scala 2.11, 2.12, and 2.13. The milestone cycle will be very short, with a final release coming right after cats-core 2.0 and cats-effect 2.0, likely in about a week.
The following notable changes are included:
- Changed resource finalization behavior to be as eager as possible (#1574)
- Added
Stream.evals
andStream.evalSeq
(#1582) - Added significant new functionality to
fs2.io.file
package (#1540 #1541) - Added support for new socket options (#1549)
- Changed
Chunk#scanLeft
to match stdlib behavior (#1544) - Improved type inference of
Stream.fromIterator
(#1536) - More type class instances for
Chunk
(#1517) - Added combinators for working with scodec-bits (#1514)
- Changed
Pull#stream
to require result to to beUnit
(#1512) - Added
fs2.io.file.tail
for tailing a file (#1506) - Added
Stream#compile.toMap
for compiling a stream to a map (#1509) - Changed internals of
Stream
for memory efficiency (#1528)
For a full list of changes in 1.1.0, see: https://github.com/functional-streams-for-scala/fs2/pulls?q=is%3Apr+milestone%3A1.1.0+is%3Aclosed
Thanks to the following contributors:
git shortlog -sn --no-merges "v1.1.0-M1".."v1.1.0-M2"
15 Scala Steward
14 Michael Pilquist
12 Diego E. Alonso-Blas
7 shn-amn
5 Ikrom
4 Jakub Kozłowski
4 Luka Jacobowitz
4 Yannick Heiber
4 GabrielAsman
2 Fabio Labella
2 Tim Fisken
2 Diego E. Alonso Blas
2 zakolenko
1 Luis Miguel Mejía Suárez
1 Georgi Krastev
1 Lucas Satabin
1 Andrew Bushmin
v1.1.0-M1
This is the first milestone release for FS2 1.1.0. The fs2-core project is almost fully backwards compatible with the previous releases in the 1.0.x series but it depends on cats-effect 2.0.0-M4, which has a few small API changes, and methods that took a blocking ExecutionContext
have been updated to now take the new cats.effect.Blocker
type. The fs2-io project is not backwards compatible but the changes are all mechanical.
This release is built for Scala 2.11, 2.12, and 2.13. The milestone cycle will be short, with a final release coming right after cats-core 2.0 and cats-effect 2.0.
The following changes are included:
- Replaced all usages of blocking
ExecutionContext
s withcats.effect.Blocker
(#1508) - Updated TCP and UDP packages to use safely constructed
{tcp/udp}.SocketGroup
objects instead of relying on implicit unsafeAsynchronousChannelGroup
andAsynchronousSocketGroup
values. Additionally, sockets are created via methods onSocketGroup
now. (#1497) - Addressed a few places in
fs2.io.file
package that did blocking / OS calls viaF.delay
instead of via aBlocker
(also #1497) - Added
isOpen
method tofile.io.tcp.Socket
(#1289)
For help with upgrading, see the changes to the tests and docs in #1508 and #1497.
For a full list of changes, see: https://github.com/functional-streams-for-scala/fs2/pulls?q=is%3Apr+milestone%3A1.1.0+is%3Aclosed
Thanks to the following contributors:
git shortlog -sn --no-merges "v1.0.5".."v1.1.0-M1"
19 Michael Pilquist
7 AdrianRaFo
1 Bjørn Madsen
1 Christopher Davenport
1 Scala Steward
v1.0.5
This release is fully backwards compatible with previous releases in the 1.0.x series. This release is built for Scala 2.11 and 2.12. The forthcoming 1.1.x series will support 2.11, 2.12, and 2.13. The following changes are included:
- Added
Chunk#toNel
(#1422) - Added
fs2.io.toInputStreamResource
(#1425) - Added printing sinks that do blocking IO on blocking context (#1427)
- Added
Stream#rechunkRandomly
(#1428) - Made Resource compilation cancelable (#1429)
- Added
chunkMin
combinator (#1438) - Added
FunctionK
instances forStream
andPull
(#1440) - Updated
Stream.emits
to avoid callingsize
(#1442) - Added dual constructors for
fs2.concurrent
(#1444) - Fixed subscriber unregister under heavy load (#1466)
- Changed
fs2.concurrent
package to ensure internal calls tosize
are O(1) and not O(n) (#1468) - Avoid execution function twice in
mapFilter
(#1486) - Fixed a bug in
parJoin
with error propagation (#1492) - Added
Stream#translateInterrupt
(#1443 #1495) - Modified
OutputStream
support to eagerly flush (#1496) - Fixed a few offset bugs in handling byte arrays (#1499)
- Updated
text.utf8Decode
to handle UTF-8 byte order marks (#1501)
For a full list of changes, see: https://github.com/functional-streams-for-scala/fs2/pulls?q=is%3Apr+milestone%3A1.0.5+is%3Aclosed
Thanks to the following contributors:
git shortlog -sn --no-merges "v1.0.4".."v1.0.5"
27 Michael Pilquist
9 gchew
8 Scala steward
7 Tim McIver
6 Fabio Labella
6 Travis Brown
5 Arnau Abella Gassol
4 Alex Berezovskiy
4 Chris Davenport
3 Ross A. Baker
2 Adam Chlupacek
2 Diego E. Alonso-Blas
2 Dmitry Polienko
2 Akhtyam Sakaev
2 Christopher Davenport
1 wedens
1 Brian P. Holt
1 Damien Bailly
1 Gabriel Volpe
1 Jakub Kozłowski
1 Mark Tomko
1 Mike Gibson
1 Oleg Pyzhcov
1 Paulius Imbrasas
1 Piotr Gabara
1 Scala Steward
1 Seth Tisue
1 Thrasos Thrasyvoulou
1 erlangxk
1 rhong
v1.0.4
This release is fully backwards compatible with previous releases in the 1.0.x series. The following changes are included:
eval
nodes are now interruptible (#1419)- Added
MonoidK
instance forStream
(#1418) - Simplified internal handling of resource finalization (#1417)
- Added
FunctorFilter
instances forStream
andChunk
(#1416) - Updated
Chunk
APIs on 2.13 to usescala.collection.Seq
to avoid differing APIs on 2.12/2.13 (#1413) - Fixed a bug in
groupWithin
where empty groups were emitted (#1404 #1405) - Added
scanMap
andscanMonoid
toStream
(#1403)
Note: because of #1417, in some rare cases, finalizers may be run later than they were in previous releases. This is normally okay but if you run in to an issue where the delay in finalization causes a problem, you can insert a manual scope on the stream (via s.scope
) to restore the early finalization behavior. Take a look at the commits on #1417 for a couple of examples of this -- specifically, the TCP/UDP tests.
For a full list of changes, see: https://github.com/functional-streams-for-scala/fs2/pulls?q=is%3Apr+milestone%3A1.0.4+is%3Aclosed
Thanks to the following contributors:
git shortlog -sn --no-merges "v1.0.3".."v1.0.4"
39 amarrella
20 Michael Pilquist
5 Fabio Labella
2 Tamer Abdulradi
1 Jakub Kozłowski
1 Alessandro Marrella
1 Scala steward
1 Sebastian Bruckner
1 Brian P. Holt
v1.0.3
This is the second release of the FS2 1.0.x series. This release is fully backwards compatible with previous releases in the 1.0.x series. The following changes are included:
- Added Scala 2.13.0-M5 support (#1378)
- Deprecated
Sink
. UsePipe
as a replacement for theSink
alias. The various methods on theSink
companion object have moved to methods onStream
. (#1386) - Added gzip compression/decompression (#1387)
- Added the ability to compile a stream to a resource (#1388)
- Fixed the append mode in
io.file.writeAll
(#1371) - Added
Stream#repeatN
(#1369)
For a full list of changes, see: https://github.com/functional-streams-for-scala/fs2/milestone/18?closed=1
Thanks to the following contributors:
git shortlog -sn --no-merges "v1.0.2".."v1.0.3"
15 Michael Pilquist
13 Diego E. Alonso-Blas
12 Fabio Labella
5 Scala steward
3 Daniel Spiewak
3 Gabriel Volpe
1 Michal
1 Joe Ferris
1 Tim McIver
1 Yannick Heiber
1 fabio-labella
v0.10.7
v1.0.2
v1.0.1
This is the second release of the FS2 1.0.x series. This is a bug fix release and is fully backwards compatible with 1.0.0. The following fixes are included:
- Upgraded to cats 1.5.0 and cats-effect 1.1.0
- Changed
fs2.io.{tcp,udp}
packages to useConcurrent[F]
andContextShift[F]
instead ofConcurrentEffect[F]
(#1322 #1356) - Changed
Stream#map
to always be lazy (#1335) - Improved performance of
Queue#dequeue1
(#1302) - Added
bracketCancellable
(#1317) - Fixed leak in
groupWithin
(#1312) - Fixed stall in
parEvalMap
(#1311) - Fixed leak in
Queue#get
(#1308) - Added
metered
combinator (#1294) - Added
spawn
combinator (#1291)
For a full list of changes, see: https://github.com/functional-streams-for-scala/fs2/issues?utf8=✓&q=is%3Aclosed+milestone%3A1.0.1+
Thanks to the following contributors:
git shortlog -sn --no-merges "v1.0.0".."v1.0.1"
33 Michael Pilquist
11 Diego E. Alonso-Blas
11 fabio-labella
9 Scala steward
3 Vladimir Pavkin
3 Jakub Kozłowski
2 Viktor Lövgren
2 Christopher Poenaru
2 Pierre Ricadat
1 Luciano
1 Diego E. Alonso Blas
1 Fabio Labella
1 Igor Tovstopyat-Nelip
1 Karol Czulkowski
1 Ajay Chandran
1 Pavel Chlupacek
1 dd
v1.0.0
This is the first release of the FS2 1.0.x series. There are a substantial number of changes from 0.10 to 1.0. Primarily, this release provides interoperability with cats-effect 1.0.0. The migration guide contains details on how to migrate from 0.10 to 1.0. In addition to the changes listed in the migration guide, 1.0.0 contains the following notable changes:
- Significantly better performance overall
- Simpler API overall, including much less need for type annotations /
covary
calls - Removal of
Segment
in favor ofChunk
, resulting in both faster and simpler to understand code - Faster and more flexible queues
- Fast, efficient support for fanout via
fs2.concurrent.{Broadcast, Balance}
types along with methods likeStream#broadcast
andStream#balance
- Interop with cats-effect cancelation support (e.g., a compiled stream can be started and then the resulting fiber canceled with all the normal resource finalization guarantees)
- Support for grouping
n
elements in bounded time viagroupWithin
- Stream switching via
switchMap
- Addition of "fallible streams" -- streams which may fail with an error but are otherwise pure. Pure streams are now truly pure -- they cannot fail with an error.
- Flexible stream compilation support, featuring a single API for compilation of pure streams, fallible streams, and effectful streams.
There are also two new modules:
- fs2-reactive-streams - This module is the work of @zainab-ali and was imported from https://github.com/zainab-ali/fs2-reactive-streams. It is now a submodule of the fs2 repository.
- fs2-experimental - This module contains APIs that aren't yet considered stable but might nonetheless be useful. At the present time, this includes the new
PubSub
datatype, which is used internally to implement queues & signals as well as broadcast & balancing support. Library authors: please do not use this module -- it's intended for use in applications only (leaves of the dependency graph) so as to avoid binary compatibility problems. New APIs will incubate here and eventually move to the core module.
Also, note the fs2-scodec module has been removed and ByteVectorChunk
is now in the core module, inside the Chunk
companion object.
This release has been made possible by 32 direct contributors as well as many others who have participated in discussions on the issue tracker, in the Gitter channel, and other project spaces. Thanks to all of you!
git shortlog -sn --no-merges 19f7fcdc.."v1.0.0"
- Michael Pilquist
- Pavel Chlupacek
- Fabio Labella
- Tom Lin
- Adam Chlupacek
- Changlin Li
- Zainab Ali
- Guillaume Martres
- Jose C
- Gabriel Volpe
- Brian P. Holt
- Ross A. Baker
- Sarunas Valaskevicius
- Jakub Kozłowski
- Eike Kettner
- Milan Raulim
- Derek Williams
- Qi Wang
- Rob Norris
- Sam Desborough
- Christopher Davenport
- Yilin Wei
- Zelenya
- Andrzej Sołtysik
- Kenji Yoshida
- Akhtyam Sakaev
- Felix Mulder
- Frank S. Thomas
- Gavin Bisesi
- Kazuhiro Sera
- Keir Lawson
- Luciano Joublanc
- Kevin Walter