////
Style guidelines:

* Refer to the project in prose as simply Jooby, with no adornment or formatting. Enclose the class
  name `Jooby` in back ticks so readers can distinguish references to the `Jooby` class from 
  references to the Jooby project as a whole.
* 100 characters per line, except when you can't break it up e.g. links or asciidoc directives
* Avoid class definition on Jooby code examples. Always start an example with `{...}`
* Avoid JUnit boilerplate in code examples. Assertions are ok if they complement the example.
* External links should use a caret at the end of the link title e.g.
  link:path/to/doc[the title^] so they open in separate tabs. See
  http://asciidoctor.org/docs/asciidoc-writers-guide/#target-window-and-role-attributes-for-links
* Be funny. Nobody like reading dry documentation.
* Be inclusive: keep usage of male and female names equal in code examples.
* Best edited while drunk

////

[discrete]
== &infin; do more, more easily

Jooby is a modular, high-performance web framework for Java and Kotlin. Designed for simplicity and speed, it gives you the freedom to build on your favorite server with a clean, modern API.

.Welcome!
[source,java,role="primary"]
----
import io.jooby.Jooby;

public class App extends Jooby {
  {
    get("/", ctx -> "Welcome to Jooby!");
  }

  public static void main(String[] args) {
    runApp(args, App::new);
  }
}
----

.Kotlin
[source,kotlin,role="secondary"]
----
import io.jooby.kt.runApp

fun main(args: Array<String>) {
  runApp(args) {
    get("/") { "Welcome to Jooby!" }
  }
}
----

[discrete]
=== Features

* **Lightweight and Fast:** See the https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite&l=xan9tr-1r[TechEmpower Benchmark].
* **High Productivity:** Built-in <<tooling-and-operations-development-compilation-and-restart, hot-reload for development>>.
* **Flexible Routing:** Use the fluent Script/Lambda API or <<web-mvc-api, MVC annotations>> (Jooby or JAX-RS).
* **Modern Tooling:** Full link:modules/openapi[OpenAPI 3] support.
* **Execution Options:** Choose between <<core-execution-model, Event Loop or worker threads>>.
* **Reactive Ready:** Support for <<core-responses, reactive responses>> (CompletableFuture, RxJava, Reactor, Mutiny, and Kotlin Coroutines).
* **Server Choice:** Run on https://www.eclipse.org/jetty[Jetty], https://netty.io[Netty], https://vertx.io[Vert.x], or http://undertow.io[Undertow].
* **Extensible:** Scale to a full-stack framework using extensions and link:modules[modules].

[TIP]
====
Latest Release: https://github.com/jooby-project/jooby/releases/tag/v{joobyVersion}[{joobyVersion}].

Looking for a previous version?

* Access link:v3[3.x] documentation. link:{uiVersion}/migration/4.x[Migrating from 3.x to 4.x]
* Access link:v2[2.x] documentation. link:{uiVersion}/migration/3.x[Migrating from 2.x to 3.x]
* Access link:v1[1.x] documentation.
====

include::getting-started.adoc[]

include::core.adoc[]

include::web.adoc[]

include::ecosystem.adoc[]

include::tooling.adoc[]

== Appendix

include::migration.adoc[]
