home / skills / pluginagentmarketplace / custom-plugin-kotlin / kotlin-ktor
npx playbooks add skill pluginagentmarketplace/custom-plugin-kotlin --skill kotlin-ktorReview the files below or copy the command above to add this skill to your agents.
---
name: kotlin-ktor
description: Ktor framework - routing, authentication, WebSockets
version: "1.0.0"
sasmp_version: "1.3.0"
bonded_agent: 05-kotlin-backend
bond_type: PRIMARY_BOND
execution:
timeout_ms: 30000
retry:
max_attempts: 3
backoff: exponential
initial_delay_ms: 1000
parameters:
required:
- name: topic
type: string
validation: "^(routing|plugins|auth|websocket|testing)$"
optional:
- name: ktor_version
type: string
default: "2.3.8"
logging:
level: info
events: [skill_invoked, topic_loaded, error_occurred]
---
# Kotlin Ktor Skill
Build production-ready backends with Ktor.
## Topics Covered
### Routing
```kotlin
fun Application.module() {
install(ContentNegotiation) { json() }
routing {
route("/api/v1") {
get("/users") { call.respond(userService.findAll()) }
get("/users/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: throw BadRequestException("Invalid ID")
call.respond(userService.findById(id) ?: throw NotFoundException())
}
}
}
}
```
### JWT Authentication
```kotlin
install(Authentication) {
jwt("auth") {
verifier(JWT.require(Algorithm.HMAC256(secret)).build())
validate { credential ->
if (credential.payload.getClaim("userId").asString().isNotEmpty())
UserPrincipal(credential.payload)
else null
}
}
}
authenticate("auth") { userRoutes() }
```
### Testing
```kotlin
@Test
fun `GET users returns list`() = testApplication {
application { module() }
client.get("/api/v1/users").apply {
assertThat(status).isEqualTo(HttpStatusCode.OK)
}
}
```
## Troubleshooting
| Issue | Resolution |
|-------|------------|
| 404 for valid route | Order specific routes before wildcards |
| JSON not parsed | Install ContentNegotiation plugin |
## Usage
```
Skill("kotlin-ktor")
```