Play Framework is an open-sourceweb application framework that implements the model–view–controller (MVC) design pattern. Developed primarily in Scala, it also accommodates other JVM languages such as Java. The framework boosts developer efficiency by leveraging principles like convention over configuration, enabling hot code reloading, and providing error feedback directly within the browser.
Support for Scala was introduced starting with version 1.1. With the release of version 2.0, the core system was fully rewritten in Scala, the build and deployment processes transitioned to SBT, and the template engine shifted from Apache Groovy to Scala-based templates.
History
Play Framework was initially developed by Guillaume Bort at Zengularity SA (previously known as Zenexity). Its earliest versions trace back to May 2007, with pre-release versions accessible via Zenexity’s website.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Initial source code was published on Launchpad; the complete 1.0 version was officially released in October 2009.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Transitioned from Launchpad to GitHub; replaced Apache MINA with JBoss Netty; incorporated Scala support; introduced native GlassFish container; added asynchronous web services library along with OAuth and HTTPS capabilities.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Implemented dependency management via Apache Ivy; enabled WebSocket functionality; integrated database migration tools (without rollback); changed default development database to H2.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Updated libraries including Netty and Hibernate; added support for multiple databases and customizable template naming conventions.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Added compatibility with Java 7 while discontinuing Java 6 support; introduced configurable SSL protocol options.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Upgraded to Hibernate 5.x; ended support for Java versions earlier than 1.8.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Ensured compatibility with Java 14; updated several libraries.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Added support for Java 17; dropped compatibility with Java versions below 11; updated Play scripts to Python 3.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Sadek Drobi joined Guillaume Bort in developing Play 2.0 alongside the launch of Typesafe Stack 2.0.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Upgraded to Scala 2.10; introduced modular architecture, a new JSON API, filters, and RequireJS integration.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Updated SBT to version 0.13; enhanced buffering, added gzip compression support, provided native packaging for OS X, Linux, Windows, and zip archives.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Launched Activator command-line tool; improved static asset management; supported Java 8 and Scala 2.11; boosted performance and enhanced web service features including Actors and WebSockets integration.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Introduced built-in dependency injection; allowed embedding Play within other applications; improved Java 8 compatibility; adopted HikariCP as the default connection pool; expanded testing APIs.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Shifted asynchronous IO and streaming to use Akka Streams; replaced custom functional types with standard Java 8 types such as CompletionStage; provided equivalent Java APIs for features previously exclusive to Scala, resulting in a performance increase of approximately 20%.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Adopted Akka HTTP as the default server backend with experimental HTTP/2 support; compatible with Scala 2.12; removed internal global state usage; introduced JSON Web Token format for cookies; enhanced security and configuration options.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Added support for Scala 2.13; integrated Caffeine cache implementation; updated HikariCP and Guice dependencies; improved form validation and file upload capabilities.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Enabled Java 11 compatibility; refreshed Akka and Jackson libraries; incorporated pre-seek sources functionality for range queries.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Introduced support for Scala 3, Java 17, and Java 21.
This page is a redirect. The following categories are used to track and monitor this redirect:
From a page move: This is a redirect from a page that has been moved (renamed). This page was kept as a redirect to avoid breaking links, both internal and external, that may have been made to the old page name.
From a modification: This is a redirect from a modification of the target's title or a closely related title. For example, the words may be rearranged.
In cases of modification from distinctly longer or shorter names, please use {{R from long name}} or {{R from short name}}, respectively. An abbreviation should be tagged with {{R from initialism}} or, if it can be spoken like a word such as NASA and RADAR, use {{R from acronym}}.
Use this rcat instead of {{R from other capitalisation}} and {{R from plural}} in namespaces other than mainspace for those types of modification. This may also apply to several other subcategories of modification; please check those templates' output before saving if using outside of mainspace.
When appropriate, protection levels are automatically sensed, described and categorized.
||Replaced Akka with Apache Pekko as a result of licensing changes affecting Akka.
Motivation
The Play Framework draws its inspiration from ASP.NET MVC, Ruby on Rails, and Django, positioning itself within this category of web frameworks. Applications built with Play are developed using Scala or Java, providing a development experience that is less constrained by the traditional limitations of Java Enterprise Edition. By circumventing the restrictions imposed by Java EE, Play offers a more streamlined and straightforward development process compared to conventional Java-based platforms.
While earlier versions like Play 1.x allowed deployment as WAR archives on typical Java EE application servers, Play 2.x is architected to operate solely on embedded Akka HTTP or Netty web servers.
Key distinctions from Java frameworks
Stateless design: Play 2 fully embraces RESTful principles, eliminating the use of Java EE sessions per connection.
Built-in testing capabilities: Native support for JUnit and Selenium is included within the core.
Extensive API provision: Most essential components are available out-of-the-box.
Asynchronous I/O handling: Utilizing Akka HTTP, Play manages long-running requests asynchronously, a feature often absent in many Java EE frameworks that lack Servlet 3.0 asynchronous support.
Modular structure: Like Ruby on Rails and Django, Play facilitates modular development.
Embedded Scala integration: Play 2 is implemented in Scala and delivers both Scala and Java APIs that adhere to the idiomatic styles of each language, ensuring seamless interoperability.
Testing framework
Play supports testing frameworks tailored for both Scala and Java ecosystems. For Scala developers, it integrates with Scalatest and Specs2; for Java, it works with JUnit 4. Both languages benefit from integration with Selenium (software). Testing is executed and reports are generated through SBT. Additionally, code coverage analysis can be enabled using sbt plugins such as scoverage or jacoco4sbt.
In August 2011, Heroku announced native compatibility with Play applications on its cloud computing platform, building upon earlier module-based support for Play 1.0 on Google App Engine as well as documented compatibility with Amazon Web Services.
, Play Framework held the position as the most widely used Scala project on GitHub. By July 2015, it ranked third among popular Scala libraries on GitHub, with 21.3% of leading Scala projects adopting Play as their framework.