Setup
Javalin Routing Extensions is a set of modular plugins that extend Javalin's routing system with popular patterns like annotations, DSL, and coroutines. Each module is distributed as a separate artifact -- install only what you need.
Requirements
- Java 17+
- Javalin 7.x
Installation
kotlin
repositories {
mavenCentral()
}
dependencies {
val routingExtensions = "7.0.0-beta.1"
// Core (required by all modules)
implementation(
"io.javalin.community.routing:routing-core:$routingExtensions"
)
// Annotated routing (Java & Kotlin)
implementation(
"io.javalin.community.routing:routing-annotated:$routingExtensions"
)
// DSL routing (Kotlin)
implementation(
"io.javalin.community.routing:routing-dsl:$routingExtensions"
)
// Coroutines routing (Kotlin)
implementation(
"io.javalin.community.routing:routing-coroutines:$routingExtensions"
)
}groovy
repositories {
mavenCentral()
}
dependencies {
def routingExtensions = "7.0.0-beta.1"
implementation "io.javalin.community.routing:routing-core:$routingExtensions"
implementation "io.javalin.community.routing:routing-annotated:$routingExtensions"
implementation "io.javalin.community.routing:routing-dsl:$routingExtensions"
implementation "io.javalin.community.routing:routing-coroutines:$routingExtensions"
}xml
<dependencies>
<!-- Core (required by all modules) -->
<dependency>
<groupId>io.javalin.community.routing</groupId>
<artifactId>routing-core</artifactId>
<version>7.0.0-beta.1</version>
</dependency>
<!-- Annotated routing (Java & Kotlin) -->
<dependency>
<groupId>io.javalin.community.routing</groupId>
<artifactId>routing-annotated</artifactId>
<version>7.0.0-beta.1</version>
</dependency>
<!-- DSL routing (Kotlin) -->
<dependency>
<groupId>io.javalin.community.routing</groupId>
<artifactId>routing-dsl</artifactId>
<version>7.0.0-beta.1</version>
</dependency>
<!-- Coroutines routing (Kotlin) -->
<dependency>
<groupId>io.javalin.community.routing</groupId>
<artifactId>routing-coroutines</artifactId>
<version>7.0.0-beta.1</version>
</dependency>
</dependencies>You only need to include the modules you plan to use. All modules depend on routing-core transitively, so you don't need to add it explicitly if you're using any of the routing modules.
Compiler Configuration
If you use annotated routing with named parameters (e.g., @Param String name without specifying the parameter name explicitly), you must pass the -parameters flag to your Java compiler to preserve parameter names in bytecode:
kotlin
tasks.withType<JavaCompile> {
options.compilerArgs = listOf("-parameters")
}groovy
tasks.withType(JavaCompile) {
options.compilerArgs = ['-parameters']
}xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>For Kotlin, enable javaParameters in the compiler options:
kotlin
kotlin {
compilerOptions {
javaParameters.set(true)
}
}Module Compatibility
| Module | Languages | Reflection | Use Case |
|---|---|---|---|
| Annotated | Java, Kotlin | Yes | Annotation-driven routing |
| DSL In-place | Kotlin | Optional | Inline route definitions |
| DSL Properties | Kotlin | Optional | Route containers with property-based definitions |
| Coroutines | Kotlin | No | Async/non-blocking endpoint execution |
Next Steps
- Overview — understand the architecture and choose your approach
- Annotated Routing — get started with annotation-driven routing
- DSL Routing — get started with Kotlin DSL routing
- Coroutines Routing — get started with async routing