Twirl is the Play template engine.
Twirl is automatically available in Play projects and can also be used stand-alone without any dependency on Play.
See the Play documentation for the template engine for more information about the template syntax.
Twirl can also be used outside of Play. An sbt plugin is provided for easy integration with Scala or Java projects.
sbt-twirl requires sbt 1.3.0 or higher.
To add the sbt plugin to your project add the sbt plugin dependency in
project/plugins.sbt
:
// twirl 2.0 and newer:
addSbtPlugin("org.playframework.twirl" % "sbt-twirl" % "LATEST_VERSION")
// twirl 1.6:
addSbtPlugin("com.typesafe.play" % "sbt-twirl" % "1.6.1")
// twirl 1.5.1 and before:
addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.5.1")
Replacing the LATEST_VERSION
with the latest version published, which should be . And enable the plugin on projects using:
someProject.enablePlugins(SbtTwirl)
If you only have a single project and are using a build.sbt
file, create a
root project and enable the twirl plugin like this:
lazy val root = (project in file(".")).enablePlugins(SbtTwirl)
Twirl template files are expected to be placed under src/main/twirl
or
src/test/twirl
, similar to scala
or java
sources. The source locations for
template files can be configured.
Template files must be named {name}.scala.{ext}
where ext
can be html
,
js
, xml
, or txt
.
The Twirl template compiler is automatically added as a source generator for
both the main
/compile
and test
configurations. When you run compile
or
Test/compile
the Twirl compiler will generate Scala source files from the
templates and then these Scala sources will be compiled along with the rest of
your project.
To add additional imports for the Scala code in template files, use the
templateImports
key. For example:
TwirlKeys.templateImports += "org.example._"
To configure the source directories where template files will be found, use the
compileTemplates / sourceDirectories
key. For example, to have template
sources alongside Scala or Java source files:
Compile / TwirlKeys.compileTemplates / sourceDirectories := (Compile / unmanagedSourceDirectories).value
To use the Twirl plugin in your project add the Maven plugin and
Twirl API as a dependency into pom.xml
:
<dependencies>
<dependency>
<groupId>org.playframework.twirl</groupId>
<artifactId>twirl-api_${SCALA_VERSION}</artifactId>
<version>${TWIRL_VERSION}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.playframework.twirl</groupId>
<artifactId>twirl-maven-plugin_${SCALA_VERSION}</artifactId>
<version>${TWIRL_VERSION}</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Replacing the TWIRL_VERSION
with the latest version published, which should be .
Twirl template files are expected to be placed under src/main/twirl
or
src/test/twirl
, similar to scala
or java
sources. The additional source
locations for template files can be configured.
Template files must be named {name}.scala.{ext}
where ext
can be html
,
js
, xml
, or txt
.
To add additional imports for the Scala code in template files, use the
templateImports
parameter. For example:
<plugin>
<groupId>org.playframework.twirl</groupId>
<artifactId>twirl-maven-plugin_${SCALA_VERSION}</artifactId>
<version>${TWIRL_VERSION}</version>
<configuration>
<templateImports>
<import>org.example._</import>
</templateImports>
</configuration>
</plugin>
To configure the source directories where template files will be found, use the
sourceDir
parameter. For example:
<plugin>
<groupId>org.playframework.twirl</groupId>
<artifactId>twirl-maven-plugin_${SCALA_VERSION}</artifactId>
<version>${TWIRL_VERSION}</version>
<configuration>
<sourceDir>${project.basedir}/src/main/templates</sourceDir>
</configuration>
<executions>
<execution>
<id>additional-source-directory</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDir>${project.basedir}/src/main/other-templates</sourceDir>
</configuration>
</execution>
</executions>
</plugin>
To configure the Scala version just use the suffix in artifactId
.
Also, you can use the next parameters:
<plugin>
<groupId>org.playframework.twirl</groupId>
<artifactId>twirl-maven-plugin_${SCALA_VERSION}</artifactId>
<version>${TWIRL_VERSION}</version>
<configuration>
<constructorAnnotations>
<annotation>@org.example.MyAnnotation()</annotation>
</constructorAnnotations>
<templateFormats>
<csv>play.twirl.api.TxtFormat</csv>
</templateFormats>
<sourceEncoding>UTF-8</sourceEncoding>
</configuration>
</plugin>
To use a snapshot version add the Sonatype Snapshot repository into pom.xml
:
<pluginRepositories>
<pluginRepository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
org.playframework.twirl
plugin requires Gradle 7.1 or higher.
To use the Twirl plugin in your project add the gradle plugin and
Twirl API as a dependency into build.gradle.kts
:
plugins {
...
id("org.playframework.twirl") version "LATEST_VERSION"
}
dependencies {
implementation("org.playframework.twirl", "twirl-api_${scalaVersion}", "LATEST_VERSION")
}
Replacing the LATEST_VERSION
with the latest version published, which should be .
Twirl template files are expected to be placed under src/main/twirl
or
src/test/twirl
, similar to scala
or java
sources. The additional source
locations for template files can be configured.
src/main/scala
, but it can be customized.
Template files must be named {name}.scala.{ext}
where ext
can be html
,
js
, xml
, or txt
.
To add additional imports for the Scala code in template files, use the
templateImports
key. For example:
sourceSets {
main {
twirl {
templateImports.add("org.example._")
}
}
}
To configure the source directories where template files will be found, use the
srcDir
method for SourceDirectorySet. For example:
sourceSets {
main {
twirl {
srcDir("app")
}
}
}
To configure the Scala version use the scalaVersion
property of TwirlExtension (2.13
by default). For example:
twirl {
scalaVersion.set("3")
}
Also, you can use the next properties:
sourceSets {
main {
twirl {
// Annotations added to constructors in injectable templates
constructorAnnotations.add("@org.example.MyAnnotation()")
// Defined custom twirl template formats
templateFormats.put("csv", "play.twirl.api.TxtFormat")
// Source encoding for template files and generated scala files
sourceEncoding.set("<enc>")
}
}
}
To use a snapshot version add the Sonatype Snapshot repository into settings.gradle.kts
:
pluginManagement {
repositories {
maven {
url = uri("https://oss.sonatype.org/content/repositories/snapshots")
}
}
}
See https://github.com/playframework/.github/blob/main/RELEASING.md
The name twirl was thought up by the Spray team and refers to the
magic @
character in the template language, which is sometimes called "twirl".
The first stand-alone version of Twirl was created by the Spray team.
An optimized version of the Twirl parser was contributed by the Scala IDE team.