Ktor 1.6.4 Help

Pebble

Ktor allows you to use Pebble templates as views within your application by installing the Pebble plugin (previously known as feature).

Add dependencies

To enable Pebble support, you need to include the ktor-pebble artifact in the build script:

implementation "io.ktor:ktor-pebble:$ktor_version"
implementation("io.ktor:ktor-pebble:$ktor_version")
<dependency> <groupId>io.ktor</groupId> <artifactId>ktor-pebble</artifactId> <version>${ktor_version}</version> </dependency>

Install Pebble

To install the Pebble plugin, pass it to the install function in the application initialization code. Depending on the way used to create a server, this can be the embeddedServer function call ...

import io.ktor.features.* // ... fun main() { embeddedServer(Netty, port = 8080) { install(Pebble) // ... }.start(wait = true) }

... or a specified module.

import io.ktor.features.* // ... fun Application.module() { install(Pebble) // ... }

Inside the install block, you can configure the PebbleEngine.Builder for loading Pebble templates.

Configure Pebble

Configure template loading

To load templates, you need to configure how to load templates using PebbleEngine.Builder. For example, the code snippet below enables Ktor to look up templates in the templates package relative to the current classpath:

install(Pebble) { loader(ClasspathLoader().apply { prefix = "templates" }) }

Send a template in response

Imagine you have the index.html template in resources/templates:

<html> <body> <h1>Hello, {{user.name}}</h1> </body> </html>

A data model for a user looks as follows:

data class User(val id: Int, val name: String)

To use the template for the specified route, pass PebbleContent to the call.respond method in the following way:

get("/index") { val sampleUser = User(1, "John") call.respond(PebbleContent("index.html", mapOf("user" to sampleUser))) }
Last modified: 06 August 2021