Getting started
Platform strategy
How Stance works across web, iOS and Android: one token source and shared meaning, with native controls, navigation and accessibility on each platform.
Stance is one design language with three native implementations: React for the web, SwiftUI for iOS and iPadOS, and Jetpack Compose for Android. They share a single token source and the same semantic roles, and each one uses its platform’s own controls, navigation and accessibility features.
What is shared
- Brand. Ivory
#FCF6EBand indigo#140C2E, and the ink scale between them. - Tokens. Colour roles, type scale, spacing, radius, elevation and motion come from one source and are generated for CSS, Swift and Kotlin.
- Themes. Light, dark and high contrast exist on every platform and follow the system setting by default.
- Meaning. A primary action, a danger tone or an error state means the same thing everywhere.
- The accessibility bar. Contrast is verified from the same tokens on every platform.
What adapts
| Concern | Web | iOS and iPadOS | Android |
|---|---|---|---|
| Navigation | Sidebar, tabs, breadcrumbs | NavigationStack, TabView, split view on iPad | Navigation bar, rail or drawer by window size |
| Dialogs | Dialog, AlertDialog | System alerts and confirmation dialogs | Material dialogs |
| Secondary surfaces | Drawer, Popover | Sheets with detents | Modal bottom sheets |
| Transient feedback | Toast | Toast overlay, banners | Snackbar |
| Date and time | Stance Calendar and pickers | System DatePicker | Material pickers |
| Text scaling | rem units, browser zoom | Dynamic Type | sp units, system font scale |
| Minimum target | 24px (40px default controls) | 44pt | 48dp |
| Screen reader | ARIA, semantic HTML | VoiceOver | TalkBack |
Consistency means the same roles, meaning and quality bar. It does not mean identical pixels.
Designed to upgrade
- A design change is one edit to the token source; CSS, Swift and Kotlin are regenerated from it and checked for parity in CI.
- Components depend on role names, never on values, so values can evolve without code changes.
- When Apple or Google revise their design language, the change is absorbed in a thin theme layer, because Stance wraps system controls instead of reimplementing them.
- Each platform package has its own semantic version; a compatibility table records which token version each release was generated from.
- Removals are deprecated first, with compiler warnings on native platforms, and removed only in a later breaking release.
Status
The web packages are at 0.1.1. The iOS and Android libraries are in development at 0.1.0 and are not yet published. Binds and eSignify are web products today; there are no native Binds apps, so no native product has been migrated. See iOS and Android.