Rapidoid - Extremely Fast, Simple and Powerful Java Web Framework!

Rapidoid consists of several modules which can be used separately or together:
Add rapidoid-quick as Maven dependency:
docker pull rapidoid
Getting started with Rapidoid
  • For a quick start please use the rapidoid-quick module.
  • It includes rapidoid-web, Hibernate, Logback, Hibernate Validator and MySQL Connector.

Running this single line of code will start a web server embedded in your application.

By default, the server listens on port 8888 and address (matching any IP address).

Navigating to http://localhost:8888/size?msg=abc will return 3.

// On GET /size return the length of the "msg" parameter
On.get("/size").json((String msg) -> msg.length());
GET /size?msg=abc
import org.rapidoid.annotation.Valid;
import org.rapidoid.jpa.JPA;
import org.rapidoid.setup.App;
import org.rapidoid.setup.On;
public class Main {
    public static void main(String[] args) {
        App.bootstrap(args).jpa(); // bootstrap JPA
        On.get("/books").json(() -> JPA.of(Book.class).all()); // get all books
        On.post("/books").json((@Valid Book b) -> JPA.save(b)); // insert new book if valid
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
public class Book {
    public Long id;
    public String title;
    public int year;

Let's send some HTTP requests and check the results:

POST /books {"title":"Java Book","year":2016}
{"id":1,"title":"Java Book","year":2016}
GET /books
[{"id":1,"title":"Java Book","year":2016}]
POST /books {"year":2004}
{"error":"Validation failed: Book.title (may not be null)","code":422,"status":"Unprocessable Entity"}
GET /books
[{"id":1,"title":"Java Book","year":2016}]

HTTP server routes information:

Verb Path Zone Content type MVC View name Roles
GET /books main json
POST /books main json