android-rxjava-to-coroutines-migration
Migrate Android RxJava code to Kotlin coroutines and Flow with safe lifecycle-aware replacements.
Works with
--- name: android-rxjava-to-coroutines-migration description: Migrate Android RxJava code to Kotlin coroutines and Flow with safe lifecycle-aware replacements. license: MIT --- # Android RxJava To Coroutines Migration ## When To Use - Use this skill when the request is about: rxjava to coroutines android, observable to flow android, replace composite disposable android. - Primary outcome: Migrate Android RxJava code to Kotlin coroutines and Flow with safe lifecycle-aware replacements. - Reach for this skill when the codebase still exposes `Single`, `Observable`, schedulers, or disposables and the goal is to move to `suspend`, `Flow`, `StateFlow`, or `SharedFlow`. - Read `references/patterns.md` for the type-mapping matrix and operator red-flag checklist. - Read `references/scenarios.md` for staged migration and inventory-first workflows. - Handoff skills when the scope expands: - `android-modernization-upgrade` - `android-coroutines-flow` ## Workflow 1. Scan the codebase for RxJava imports, base types, subjects, and scheduler usage before changing any API surface. 2. Classify each usage as one-shot work, stream work, hot state, hot events, callback bridging, or backpressure-sensitive work. 3. Replace repository and domain APIs first, then move UI-layer subscriptions to lifecycle-aware collection. 4. Rewrite scheduler and disposable management as dispatcher, scope, structured-concurrency ownership, and lifecycle-aware collection such as `repeatOnLifecycle`. 5. Leave a checklist for ambiguous operators or custom bridges instead of pretending every chain can be auto-converted safely. ## Guardrails - Prefer `suspend` functions for one-shot work and `Flow` for streams; do not force everything into `Flow`. - Preserve lifecycle ownership when replacing `CompositeDisposable` and manual subscription chains. - Call out operator semantics that need human review, especially `flatMap`, `switchMap`, replay, and threading assumptions. - Preserve hot-state and replay semantics explicitly with `StateFlow`, `SharedFlow`, `shareIn`, or `stateIn` instead of assuming cold `Flow` is equivalent. - Treat migration as behavior-preserving refactor work, not a chance to redesign unrelated business logic. ## Anti-Patterns - Converting every Rx type to `Flow` even when a `suspend` function is the better match. - Dropping replay, buffering, or hot-stream semantics during subject migration. - Leaving `observeOn` and `subscribeOn` assumptions undocumented after moving to dispatchers. - Rewriting repository, ViewModel, and UI layers all at once with no staged verification. ## Review Focus - Type mapping: `Single`, `Maybe`, `Completable`, `Observable`, `Flowable`, and Subjects. - Hot vs cold semantics, replay behavior, and backpressure expectations. - Dispatcher ownership, `viewModelScope`, and lifecycle collection. - Testing fallout for coroutine timing, cancellation, and stream assertions. ## Examples ### Happy path - Scenario: Scan a legacy RxJava sample and generate a migration checklist for repositories, ViewModels, and UI subscriptions. - Command: `bash skills/android-rxjava-to-coroutines-migration/scripts/run_examples.sh` ### Edge case - Scenario: Inventory subjects, disposables, and scheduler usage before converting state or one-off events. - Command: `python3 skills/android-rxjava-to-coroutines-migration/scripts/scan_rxjava_usage.py examples/fixtures/rxjava-legacy-sample --json` ### Failure recovery - Scenario: Produce a deterministic checklist when parts of the chain still need manual operator review. - Command: `python3 skills/android-rxjava-to-coroutines-migration/scripts/generate_migration_checklist.py examples/fixtures/rxjava-legacy-sample` ## Done Checklist - RxJava types and operators were inventoried before code changes were proposed. - One-shot APIs, streams, hot state, and hot events are mapped to the right coroutine primitives. - Lifecycle ownership and dispatcher assumptions are explicit. - Ambiguous operators or bridging cases are recorded as manual follow-up work. ## Official References - [https://developer.android.com/kotlin/coroutines](https://developer.android.com/kotlin/coroutines) - [https://developer.android.com/kotlin/flow](https://developer.android.com/kotlin/flow) - [https://developer.android.com/kotlin/coroutines/coroutines-best-practices](https://developer.android.com/kotlin/coroutines/coroutines-best-practices) - [https://developer.android.com/topic/libraries/architecture/coroutines](https://developer.android.com/topic/libraries/architecture/coroutines) - [https://developer.android.com/kotlin/flow/stateflow-and-sharedflow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow) - [https://kotlinlang.org/docs/flow.html](https://kotlinlang.org/docs/flow.html)
More Mobile skills
animation-vocabulary
emilkowalski/skills
Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and wants the right word to prompt an AI or designer with. For naming an effect, not designing or building one.
xcode-project-setup
firebase/agent-skills
Safely modifies Xcode projects (.pbxproj) to add Swift Packages and link files. Use this skill whenever an iOS project needs dependencies installed (e.g. Firebase, Alamofire).
cross-border-ecommerce
nexscope-ai/ecommerce-skills
Cross-border e-commerce expansion advisor. Scores target markets on 8 weighted dimensions (market size, ecommerce penetration, competition, regulatory complexity, logistics infrastructure, payment ecosystem, cultural distance, IP protection), compares 5 fulfillment models with cost and transit data, provides country-by-country tax/duty compliance guides (EU VAT/IOSS, UK VAT, US sales tax, CA GST, AU GST, JP consumption tax), maps local payment preferences by market, and builds a phased expansion roadmap. No API key required.

