The Play team is proud to announce the release of Play 2.5.0! The two major focuses of this release have been streams and Java API feature parity, and for the first time we can say anything that you can do using the Play Scala API, you can also do using the Play Java API.
Iteratees served us well as Play's asynchronous IO API, developed at a time when there weren't many options around for asynchronous streaming. The world has changed a lot since then, with many asynchronous APIs available that implement the reactive streams spec. We have replaced iteratees with Akka streams, which are much friendlier to newcomers, and have a first class API for both Java and Scala. We've also provided a reactive streams implementation for iteratees, allowing a simple migration pathway from existing iteratees code to Akka streams.
Since Akka streams provides a simple to use Java API, we've been able to take advantage of this to allow feature parity between the Java and Scala APIs. Things that were not practical to do in Java before, such as write custom body parsers and HTTP filters, are now as easy to do in Java as they are in Scala.
In our ongoing effort to support Java 8, Play has replaced many of its existing functional APIs with Java 8 equivalents. These include Function interfaces, Option with Optional, and Promise with CompletionStage. By further embracing the Java 8 APIs, we allow Play Java developers to more fully take advantage of the broader Java 8 ecosystem.
Play would not be where it is today without the contributions, from code to documentation to testing to feedback, from the community. A total of 135 committers were involved in the development of Play 2.5, including 94 who had not contributed to Play before. If you want to be involved in Play, don't hesitate to read our Get Involved page to start contributing.