home / skills / pluginagentmarketplace / custom-plugin-kotlin / kotlin-ktor

kotlin-ktor skill

/skills/kotlin-ktor

npx playbooks add skill pluginagentmarketplace/custom-plugin-kotlin --skill kotlin-ktor

Review the files below or copy the command above to add this skill to your agents.

Files (6)
SKILL.md
1.9 KB
---
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")
```