compose-state-hoisting

Installation
SKILL.md

Compose state hoisting

Core principle

Hoist state only as far as the logic needs it. Keep simple UI element state local, move shared UI element state to the lowest common composable owner, extract a plain state holder when UI-only behavior becomes a concept, and use a screen state holder when business logic or app data is involved.

Decision guide

Situation Owner
One composable reads/writes simple state Keep local with remember / rememberSaveable
Sibling or parent composables need to read/write it Hoist state and events to their lowest common composable ancestor
Related UI element state plus UI logic is making a composable hard to read, preview, or test Extract a plain state holder class remembered in composition
Repository calls, persistence, business rules, or screen UI state production are involved Use a screen-level state holder such as a ViewModel or component

UI element state includes things like expansion, sheet visibility, scroll position, focus, text field editing state, selection, and animation/interaction state. Screen UI state is app data prepared for display.

If UI element state is an input to business logic, it may need to live in the screen state holder too. For example, text used to query repository-backed suggestions belongs with the state holder that produces those suggestions.

Installs
332
GitHub Stars
777
First Seen
May 21, 2026
compose-state-hoisting — chrisbanes/skills