Generate OpenAPI specifications from your Ktor code at compile time.
Zero runtime overhead. Full type safety. Always in sync.
```kotlin title=”build.gradle.kts” plugins { kotlin(“jvm”) version “2.3.0” id(“io.ktor.plugin”) version “3.0.0” id(“io.github.tabilzad.inspektor”) version “0.10.0-alpha” }
swagger { documentation { info { title = “My API” version = “1.0.0” } } }
### 2. Annotate Your Routes
```kotlin title="Application.kt"
@GenerateOpenApi
fun Application.module() {
routing {
route("/api/users") {
@KtorDescription(summary = "List all users")
get {
responds<List<User>>(HttpStatusCode.OK)
// Implementation
}
@KtorDescription(summary = "Create user")
post {
responds<User>(HttpStatusCode.Created)
responds<ErrorResponse>(HttpStatusCode.BadRequest)
val request = call.receive<CreateUserRequest>()
// Implementation
}
}
}
}
./gradlew build
Your OpenAPI spec is generated at build/resources/main/openapi/openapi.yaml :material-check-circle:{ .success }
| Feature | Description |
|---|---|
| Route Detection | Automatically detects routes from Ktor’s routing DSL |
| Schema Generation | Generates schemas from Kotlin data classes |
| Request Bodies | Infers request schemas from call.receive<T>() |
| Response Types | Documents responses with the responds<T>() function |
| Path Parameters | Detects parameters from {param} syntax |
| Query Parameters | Extracts query parameters from code |
| KDoc Integration | Extracts descriptions from KDoc comments |
| Security Schemes | Supports JWT, API Key, OAuth2, and more |
| Sealed Classes | Full support for polymorphic types with discriminators |
| Generic Types | Handles generic wrappers like Response<T> |
| Incremental Builds | Configurable regeneration modes for fast builds |