Skip to content

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 #FCF6EB and 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

ConcernWebiOS and iPadOSAndroid
NavigationSidebar, tabs, breadcrumbsNavigationStack, TabView, split view on iPadNavigation bar, rail or drawer by window size
DialogsDialog, AlertDialogSystem alerts and confirmation dialogsMaterial dialogs
Secondary surfacesDrawer, PopoverSheets with detentsModal bottom sheets
Transient feedbackToastToast overlay, bannersSnackbar
Date and timeStance Calendar and pickersSystem DatePickerMaterial pickers
Text scalingrem units, browser zoomDynamic Typesp units, system font scale
Minimum target24px (40px default controls)44pt48dp
Screen readerARIA, semantic HTMLVoiceOverTalkBack

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.