DBDelve
Dive deep into your data. A fast, native, multi-engine database client written in Rust. Free and open source, no telemetry.
Lightweight, embeddable HTTP web server for Kotlin and the JVM, with support for current standards such as Open API, JWT auth, Websockets and more.
Developer toolsKotlin · PythonGitHub @KaliumhexacyanoferratOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Fast and simple webserver for Kotlin.
Loading the full README.
Read the full README ↗genhttp-kt is a lightweight, modular web server for Kotlin with a strong focus on developer experience. It allows developers to quickly create web services on the JVM and concentrate on the functionality rather than on configuration files or complex concepts. genhttp-kt is the Kotlin port of GenHTTP (see About the Port).
Website and documentation: genhttp.org/kotlin
genhttp-kt requires JDK 25 or newer. Add a dependency on genhttp-full to your project and spin off a new host:
// build.gradle.kts
dependencies {
implementation("org.genhttp:genhttp-full:11.2.0.0")
}
import org.genhttp.engine.internal.Host
import org.genhttp.modules.apibrowsing.*
import org.genhttp.modules.functional.*
import org.genhttp.modules.layouting.*
import org.genhttp.modules.openapi.*
import org.genhttp.modules.practices.*
suspend fun main() {
// use a handler of your choice (see the samples below)
val api = Inline.create()
.get { a: Int, b: Int -> a + b }
val app = Layout.create()
.add(api)
.addOpenApi()
.addScalar()
Host.create()
.handler(app)
.defaults()
.run() // or .start() to return immediately
}
Running this snippet will provide the following endpoints:
| Endpoint | Description |
|---|---|
| http://localhost:8080/?a=1&b=2 | Serves the API, answering requests by calculating the sum of two query arguments. |
| http://localhost:8080/openapi.json | Serves the automatically generated Open API specification of the API. |
| http://localhost:8080/scalar/ | Serves a graphical viewer of the API, using Scalar. |
If you only need the engine and the basic modules (IO, layouting and best practices), depend on genhttp-core instead
and add the modules you need individually (genhttp-modules-<name>, see the
list of modules). To run on the Netty engine, depend on
genhttp-full-netty or genhttp-core-netty and import org.genhttp.engine.netty.Host (see Engines).
The documentation describes every framework, handler, concern and concept of genhttp-kt, with Kotlin samples that are compiled against the release they describe:
It is the documentation of GenHTTP, ported page by page, and kept in sync with GenHTTP's documentation and with genhttp-kt the same way the port is (see SYNC.md).
The playground project provides a quick starting point to view sample code. See the documentation for all available capabilities.
genhttp-kt runs on different engines that can simply be switched by changing a single dependency and the import of the
Host. Engines are tested to be compatible with all modules, so you can switch the engine without any further
adjustments.
| Engine | Protocols | Performance | Use Cases |
|---|---|---|---|
| Internal | 1.1 | Embedding; web applications behind a reverse proxy; blocking handlers | |
| Netty | 1.1 | High performance web applications on Linux via epoll or io_uring |
The internal engine (genhttp-full, genhttp-core, org.genhttp.engine.internal.Host) serves every connection on
virtual threads, so handlers may block. The Netty engine (genhttp-full-netty, genhttp-core-netty,
org.genhttp.engine.netty.Host) is the counterpart of GenHTTP's ioxide engine: one event loop per CPU core serves its
connections from start to finish, including websockets and TLS via OpenSSL. Handlers run on the loop and must suspend
rather than block - move blocking calls such as JDBC to withContext(Dispatchers.IO).
According to HTTP Arena, genhttp-kt is among the fastest Kotlin web servers for HTTP/1.1: with the Netty engine it ranks second of all the Java and Kotlin frameworks without tuning, and the internal engine is 1.4 times faster than Ktor and 2.6 times faster than Spring Boot (results of October 24, 2026). The features page shows the full comparison.
If you encounter issues implementing your application, feel free to join the GenHTTP Discord community to get help. Issues specific to genhttp-kt can be reported in this repository.
To build the server from source, clone this repository and run the playground project:
git clone https://github.com/Kaliumhexacyanoferrat/genhttp-kt.git
cd genhttp-kt
./gradlew :playground:run
This will build the playground project with all the server dependencies and launch the server process on port 8080.
genhttp-kt is an automated port of GenHTTP, generated and maintained by Claude as a proof of concept: can a framework be kept in sync across ecosystems by agents? GenHTTP stays the source of truth and genhttp-kt follows it commit by commit. The public API and behavior mirror GenHTTP, expressed in idiomatic Kotlin (coroutines, NIO and virtual threads). The documentation of genhttp-kt is the documentation of GenHTTP ported to Kotlin, so samples written for GenHTTP translate mechanically (Coming from GenHTTP).
Versions follow GenHTTP: 11.2.0.0 is based on GenHTTP 11.2.0, the last component counts port-only releases. Features
and behavioral changes are contributed to GenHTTP first and reach genhttp-kt with the next sync (see
CONTRIBUTING.md).
docs/PORT.md describes how C# translates to Kotlin, how the engine works, how the port is kept in sync and verified, and where it intentionally differs from GenHTTP.