Skip to main content

Configuration

Invirt is a singleton object. The framework is initialised through Invirt.configure(...) which sets development mode and customises the Pebble template engine used to render views.

object Invirt {

fun configure(
developmentMode: Boolean = Environment.ENV.developmentMode,
pebble: InvirtPebbleConfig = InvirtPebbleConfig()
)
}

The first reference to Invirt triggers a default configuration via its init block, so for the simplest applications no explicit call is required. Calling Invirt.configure(...) is needed when you want to override the defaults — for example to register Pebble extensions or change the template classpath location. Configuration is global; call configure(...) once during application startup, before serving any requests.

fun main() {
Invirt.configure(
developmentMode = Environment.ENV.developmentMode,
pebble = InvirtPebbleConfig(
classpathLocation = "webapp/views",
extensions = listOf(/* ... */),
globalVariables = mapOf("staticAssetsVersion" to gitCommitId())
)
)

val server = Netty(8080).toServer(routes(/* ... */)).start()
}

Pebble configuration​

InvirtPebbleConfig holds the settings for the Pebble template engine.

class InvirtPebbleConfig(
val classpathLocation: String = "webapp/views",
val hotReloadDirectory: String = "src/main/resources/webapp/views",
val extensions: List<Extension> = emptyList(),
val globalVariables: Map<String, Any> = emptyMap(),
val contextVariables: Map<String, (Request) -> Any?> = emptyMap()
)
  • classpathLocation — classpath path where templates are loaded from when developmentMode is false.
  • hotReloadDirectory — filesystem path where templates are loaded from when developmentMode is true.
  • extensions — custom Pebble Extension instances. See the security-authentication example for an application using a custom Pebble extension.
  • globalVariables — variables available in every Pebble template. Useful for application-wide constants like a static assets version.
  • contextVariables — per-request variables computed from the current Request and exposed to the template. The lambda is invoked at render time with the request that produced the response.

Development mode​

developmentMode controls template loading:

  • true — templates are loaded from hotReloadDirectory with no caching, so edits to a template are visible immediately on a browser refresh. Typically used during local development.
  • false — templates are loaded from classpathLocation with http4k's caching template loader. Typically used in production.

By default developmentMode is read from the DEVELOPMENT_MODE environment variable (see Environment.developmentMode) and defaults to false when the variable is not set.