Javalin is a minimalist web framework designed for Java and Kotlin developers who crave simplicity without sacrificing functionality. Unlike heavyweight frameworks like Spring Boot, Javalin avoids magic (e.g., annotations, reflection) and focuses on direct, readable code. It’s perfect for small-to-medium projects, APIs, or learning web development.
Why Javalin?
- No boilerplate: Start a server in 3 lines of code.
- Flexible routing: Define HTTP endpoints with lambda expressions.
- WebSocket support: Build real-time features effortlessly.
- Async-ready: Handle long-running tasks without blocking threads.
- Kotlin-friendly: Leverage Kotlin’s concise syntax for even cleaner code.
Getting Started: Hello World in Java & Kotlin
1. Java Example
Add Maven dependency:
<dependency>
<groupId>io.javalin</groupId>
<artifactId>javalin</artifactId>
<version>6.3.0</version> <!-- Check for latest version -->
</dependency>
Start the server:
import io.javalin.Javalin;
public class HelloWorld {
public static void main(String[] args) {
var app = Javalin.create().start(7070);
app.get("/", ctx -> ctx.result("Hello from Java!"));
}
}
Output:
Visit http://localhost:7070 in your browser. You’ll see:
Hello from Java!
2. Kotlin Example
Add Gradle dependency:
implementation("io.javalin:javalin:6.3.0")
Start the server:
import io.javalin.Javalin
fun main() {
val app = Javalin.create().start(7070)
app.get("/") { ctx -> ctx.result("Hello from Kotlin!") }
}
Output:
Visit http://localhost:7070:
Hello from Kotlin!
Key Features with Code Examples
1. Routing & Path Parameters
app.get("/greet/:name", ctx -> {
String name = ctx.pathParam("name");
ctx.result("Hello, " + name + "!");
});
Test:
http://localhost:7070/greet/Alice →
Hello, Alice!
2. JSON Responses
app.get("/api/users", ctx -> {
Map<String, Object> user = Map.of("id", 1, "name", "Bob");
ctx.json(user); // Auto-converts to JSON
});
Output:
{"id":1,"name":"Bob"}
3. WebSocket (Real-Time Updates)
app.ws("/chat", ws -> {
ws.onConnect(ctx -> System.out.println("Client connected!"));
ws.onMessage(ctx -> {
String message = ctx.message();
ctx.send("Echo: " + message);
});
});
Test:
Use a WebSocket client (e.g., browser dev tools) to connect to ws://localhost:7070/chat and send a message.
4. Async Handling
app.get("/async", ctx -> {
ctx.future(() -> {
Thread.sleep(1000); // Simulate delay
return "Async response!";
}).thenAccept(ctx::result);
});
Output (after 1 second):
Async response!
Conclusion
Javalin is ideal for developers who want a fast, unopinionated way to build web apps in Java/Kotlin. Its simplicity doesn’t compromise power—you can scale from tiny APIs to complex apps with plugins (e.g., OpenAPI, templating engines).
Next Steps:
- Explore Javalin’s official docs.
- Try the Kotlin CRUD tutorial.
- Join the Discord community for help.
Happy coding! 🚀