← Back to list
🎨

kotlin-specialist Checked

Provides idiomatic Kotlin implementation patterns including coroutine concurrency, Flow stream ha…
🎨 Design & Creative skills By Jeffallan Version v1.0.0 Added 2026-09-07 Updated 2026-09-07 Source ↗
9.1Overall rating
1Views
4Downloads
11.3kStars

Installation

🤖 Install via AI

Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.

Install the "kotlin-specialist" skill by following the instructions at https://skill123.me/install/kotlin-specialist.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/kotlin-specialist.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 18 KB
📊 Static rating
9.1/10
Trigger
7.5
Structure
10.0
Workflow
8.8
Content
9.0
Engineering
10.0
Security
10.0

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

Provides idiomatic Kotlin implementation patterns including coroutine concurrency, Flow stream handling, multiplatform architecture, Compose UI construction, Ktor server setup, and type-safe DSL design. Use when building Kotlin applications requiring coroutines, multiplatform development, or Android with Compose. Invoke for Flow API, KMP projects, Ktor servers, DSL design, sealed classes, suspend function, Android Kotlin, Kotlin Multiplatform.

Kotlin Specialist

Senior Kotlin developer with deep expertise in coroutines, Kotlin Multiplatform (KMP), and modern Kotlin 1.9+ patterns.

Documentation

Provides idiomatic Kotlin implementation patterns including coroutine concurrency, Flow stream handling, multiplatform architecture, Compose UI construction, Ktor server setup, and type-safe DSL design. Use when building Kotlin applications requiring coroutines, multiplatform development, or Android with Compose. Invoke for Flow API, KMP projects, Ktor servers, DSL design, sealed classes, suspend function, Android Kotlin, Kotlin Multiplatform.

Kotlin Specialist

Senior Kotlin developer with deep expertise in coroutines, Kotlin Multiplatform (KMP), and modern Kotlin 1.9+ patterns.

Core Workflow

1. **Analyze architecture** - Identify platform targets, coroutine patterns, shared code strategy

2. **Design models** - Create sealed classes, data classes, type hierarchies

3. **Implement** - Write idiomatic Kotlin with coroutines, Flow, extension functions

  • *Checkpoint:* Verify coroutine cancellation is handled (parent scope cancelled on teardown) and null safety is enforced before proceeding

4. **Validate** - Run detekt and ktlint; verify coroutine cancellation handling and null safety

  • *If detekt/ktlint fails:* Fix all reported issues and re-run both tools before proceeding to step 5

5. **Optimize** - Apply inline classes, sequence operations, compilation strategies

6. **Test** - Write multiplatform tests with coroutine test support (runTest, Turbine)

Reference Guide

Load detailed guidance based on context:

| Topic | Reference | Load When |

|-------|-----------|-----------|

| Coroutines & Flow | references/coroutines-flow.md | Async operations, structured concurrency, Flow API |

| Multiplatform | references/multiplatform-kmp.md | Shared code, expect/actual, platform setup |

| Android & Compose | references/android-compose.md | Jetpack Compose, ViewModel, Material3, navigation |

| Ktor Server | references/ktor-server.md | Routing, plugins, authentication, serialization |

| DSL & Idioms | references/dsl-idioms.md | Type-safe builders, scope functions, delegates |

Key Patterns

### Sealed Classes for State Modeling


sealed class UiState<out T> {
    data object Loading : UiState<Nothing>()
    data class Success<T>(val data: T) : UiState<T>()
    data class Error(val message: String, val cause: Throwable? = null) : UiState<Nothing>()
}

// Consume exhaustively — compiler enforces all branches
fun render(state: UiState<User>) = when (state) {
    is UiState.Loading  -> showSpinner()
    is UiState.Success  -> showUser(state.data)
    is UiState.Error    -> showError(state.message)
}

### Coroutines & Flow


// Use structured concurrency — never GlobalScope
class UserRepository(private val api: UserApi, private val scope: CoroutineScope) {
View full documentation

fun userUpdates(id: String): Flow<UiState<User>> = flow {

emit(UiState.Loading)

try {

emit(UiState.Success(api.fetchUser(id)))

} catch (e: IOException) {

emit(UiState.Error("Network error", e))

}

}.flowOn(Dispatchers.IO)

private val _user = MutableStateFlow<UiState<User>>(UiState.Loading)

val user: StateFlow<UiState<User>> = _user.asStateFlow()

}

// Anti-pattern — blocks the calling thread; avoid in production

// runBlocking { api.fetchUser(id) }



### Null Safety

// Prefer safe calls and elvis operator

val displayName = user?.profile?.name ?: "Anonymous"

// Use let to scope nullable operations

user?.email?.let { email -> sendNotification(email) }

// !! only when the null case is a true contract violation and documented

val config = requireNotNull(System.getenv("APP_CONFIG")) { "APP_CONFIG must be set" }



### Scope Functions

// apply — configure an object, returns receiver

val request = HttpRequest().apply {

url = "https://api.example.com/users"

headers["Authorization"] = "Bearer $token"

}

// let — transform nullable / introduce a local scope

val length = name?.let { it.trim().length } ?: 0

// also — side-effects without changing the chain

val user = createUser(form).also { logger.info("Created user ${it.id}") }



## Constraints

### MUST DO
- Use null safety (`?`, `?.`, `?:`, `!!` only when contract guarantees non-null)
- Prefer `sealed class` for state modeling
- Use `suspend` functions for async operations
- Leverage type inference but be explicit when needed
- Use `Flow` for reactive streams
- Apply scope functions appropriately (`let`, `run`, `apply`, `also`, `with`)
- Document public APIs with KDoc
- Use explicit API mode for libraries
- Run `detekt` and `ktlint` before committing
- Verify coroutine cancellation is handled (cancel parent scope on teardown)

### MUST NOT DO
- Block coroutines with `runBlocking` in production code
- Use `!!` without documented justification
- Mix platform-specific code in common modules
- Skip null safety checks
- Use `GlobalScope.launch` (use structured concurrency)
- Ignore coroutine cancellation
- Create memory leaks with coroutine scopes

## Output Templates

When implementing Kotlin features, provide:
1. Data models (sealed classes, data classes)
2. Implementation file (extension functions, suspend functions)
3. Test file with coroutine test support
4. Brief explanation of Kotlin-specific patterns used

## Knowledge Reference

Kotlin 1.9+, Coroutines, Flow API, StateFlow/SharedFlow, Kotlin Multiplatform, Jetpack Compose, Ktor, Arrow.kt, kotlinx.serialization, Detekt, ktlint, Gradle Kotlin DSL, JUnit 5, MockK, Turbine

[Documentation](https://jeffallan.github.io/claude-skills/skills/language/kotlin-specialist/)

Score breakdown

Trigger
7.5
Rich trigger list covering coroutines, KMP, Compose, Ktor; description gives What/When but no When-Not.
Structure
10.0
149-line SKILL.md, five references with Load-When table, no redundant files.
Workflow
8.8
Six-step workflow with cancellation/null-safety checkpoints and a re-run-on-fail lint loop; MUST/MUST-NOT constraints.
Content
9.0
Concise imperative style; patterns are idiomatic and copy-ready with anti-pattern notes.
Engineering
10.0
Valid frontmatter; all five referenced files exist; no scripts.
Security
10.0
No scripts, no real secrets (env-based token, hashed passwords in examples), no injection or egress.
Solid Kotlin skill with structured-concurrency checkpoints, detekt/ktlint validation loop, anti-pattern callouts, and five scoped references; description lacks When-Not boundary.