<commit_before>////
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

////

= Welcome to Jooby!
Jooby Project <<EMAIL>>
{joobyVersion}

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

== Introduction

Jooby is a modern, performant and easy to use web framework for Java and Kotlin built on top of your
favorite web server.

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

Looking for previous version? The link:v1[1.x] documentation is still available. 
====

.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.runApp

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

Source code is available at https://github.com/jooby-project/jooby[GitHub]

=== Features

* Java and Kotlin API
* Fast startup time and <<hot-reload, Hot-Reload for development>> using Maven or Gradle
* Script/lambda routes using fluent API
* <<mvc-api, MVC routes>> using Jooby or JAX-RS annotations
* link:modules/openapi[OpenAPI 3] supports
* <<execution-model, Event Loop and blocking execution modes>>
* <<responses, Reactive responses>> (Completable Futures, RxJava and Reactor types and Kotlin Coroutines)
* <<server, Multi-server>> including https://www.eclipse.org/jetty[Jetty], https://netty.io[Netty] and http://undertow.io[Undertow]<commit_msg>doc: add link to TEB<commit_after>////
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

////

= Welcome to Jooby!
Jooby Project <<EMAIL>>
{joobyVersion}

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

== Introduction

Jooby is a modern, performant and easy to use web framework for Java and Kotlin built on top of your
favorite web server.

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

Looking for previous version? The link:v1[1.x] documentation is still available. 
====

.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.runApp

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

Source code is available at https://github.com/jooby-project/jooby[GitHub]

=== Features

* Lightweight and fast. See https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=fortune&l=zik0vz-f[Tech Empower Benchmark]
* Fast startup time and <<hot-reload, Hot-Reload for development>> using Maven or Gradle
* Script/lambda routes using fluent API
* <<mvc-api, MVC routes>> using Jooby or JAX-RS annotations
* link:modules/openapi[OpenAPI 3] supports
* <<execution-model, Event Loop and blocking execution modes>>
* <<responses, Reactive responses>> (Completable Futures, RxJava and Reactor types and Kotlin Coroutines)
* <<server, Multi-server>> including https://www.eclipse.org/jetty[Jetty], https://netty.io[Netty] and http://undertow.io[Undertow]
{'fraction_non_alphanumeric': 0.11973788721207307, 'fraction_numerical': 0.0029785544082605244, 'mean_word_length': 4.1767728674203495, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 31, 'https://': 9, 'lorem ipsum': 0, 'www.': 3, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3676970', 'n_tokens_mistral': 1612, 'n_tokens_neox': 1546, 'n_words': 570}