shekhar23/claude-zero-to-hero-android-kmp/android-di-koin
Claude Code and agent skill by shekhar23/claude-zero-to-hero-android-kmp
- community
Checking that the SKILL.md file is still in the repository.
Koin dependency injection setup for Android/KMP - module definitions per layer, ViewModel injection, assembling modules in :app, and koinViewModel() in composables. Use this skill whenever setting up Koin, defining a DI module, providing a repository or ViewModel, injecting a dependency, or wiring modules in the Application class. Trigger on phrases like "set up Koin", "add a Koin module", "inject a dependency", "DI module", "koinViewModel", "provide a ViewModel", "startKoin", or "single/viewModel/factory".
Install
npx vskill@latest install shekhar23/claude-zero-to-hero-android-kmp/android-di-koinSKILL.md
Android / KMP Dependency Injection (Koin)
Principles
- One Koin module per feature layer — create it only if there are dependencies to provide.
- Modules are assembled in
:app, never in feature modules themselves. - In Compose root composables, always inject ViewModels via
koinViewModel().
Module Definitions
Prefer the constructor-reference overloads (singleOf, viewModelOf, factoryOf) — they are more concise and let Koin resolve parameters automatically. Only fall back to the lambda overloads (single { ... }, viewModel { ... }, factory { ... }) when constructor injection alone is not enough, e.g. when you need to call a factory method, pass a named/qualified dependency, or do post-construction setup.
Data layer module
Presentation layer module
Core data module (example)
Assembly in :app
Register all modules in the Application class:
Injecting in Composables
Always use koinViewModel() in Root composables:
Never pass ViewModels down the composable tree — inject at the Root level only.
Scoping Rules
| Scope | Preferred form | Fallback form | When to use | |
|---|---|---|---|---|
| Singleton | singleOf(::Impl) { bind<Interface>() } | single { ... } | One instance for the app lifetime (repositories, HttpClient, DB) | |
| ViewModel | viewModelOf(::MyViewModel) | viewModel { ... } | ViewModel instances scoped to their lifecycle | |
| Factory | factoryOf(::Impl) | factory { ... } | New instance on every injection (rare — prefer singleton or ViewModel) |
Use the *Of constructor-reference form by default. Only use the lambda form when you cannot express the binding with a constructor reference (factory methods, named qualifiers, manual setup).
Naming Conventions
| Thing | Convention | Example | |
|---|---|---|---|
| Koin module | <feature><Layer>Module | notesDataModule, notesPresentationModule |
Checklist: Adding DI for a New Feature
- [ ] Define
val <feature>DataModule = module { ... }infeature:data - [ ] Define
val <feature>PresentationModule = module { ... }infeature:presentation - [ ] Register both modules in
:app'sstartKoin { modules(...) } - [ ] Use
koinViewModel()in all Root composables
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/android-di-koin/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/shekhar23/claude-zero-to-hero-android-kmp/android-di-koin)