I don’t know if you are using Scala or Java with Play, I use Java, so my comments will be coming from Java perspective.
-
Dependency injection (runtime) with Guice. Most Java developers would be familiar with DI using Spring or something else. DI is introduced in Play 2.4, and it made things feel “more natural” for Java developers that come from a Spring MVC background where DI is the norm. Granted you can use DI with 2.3, but having it out of box is really nice.
-
Akka HTTP as an alternative to Netty, with HTTP/2 support (although still experimental afaik).
-
Standardizing on Java 8’s new API. Although personally I have mixed feelings with Play’s Promise vs Java 8’s CompletionStage, but that’s the “future” of Java, and as a Java developer using Java with Play, this is a good thing in the big picture, I think.
-
I believe the version of Scala, SBT used by Play 2.7 would give you faster compile time. Not sure if that is a factor for you or not.
-
Improved Java API, such as you can write filters in Java starting 2.6 (or maybe 2.5, I can’t remember), so you are not forced to use Scala for these kind of things.
-
Various bug fixes and improvements that are not backported to 2.3, such as CORS.
As far as runtime performance is concerned, I am not sure if it got better or worse. I believe 2.4 or 2.5 is a release that contains performance improvements, especially for Java, but I have not heard or seen anything regarding performance in 2.6 and 2.7.
These are the main things that come to mind. Of course, there are other things such as updated library dependencies, etc… but those things you can probably do yourself anyway.