Simal UI

Platform matrix

What Simal UI guarantees on iOS, Android, and web, and how each surface is verified.

Simal UI supports iOS, Android, and React Native Web from one public package. The public API and semantic meaning stay stable; platform treatment may differ when native behavior is better than visual sameness.

Current playground coverage

SurfaceInteractive playgroundAutomated visual evidenceDevice evidence
WebEmbedded Storybook on every component pageEvery story, light and dark, Playwright baselinesProduct web E2E
iOSComponent API and platform-specific sourceShared stories compile through the packageRequired in consuming-app simulator/device QA
AndroidComponent API and Material implementationShared stories compile through the packageRequired in consuming-app emulator/device QA

The browser preview is not a native simulator

The embedded demo is React Native Web. It proves API composition, tokens, responsive behavior, browser accessibility, and web interaction. It does not prove UIKit or Android rendering. Native results must be reported separately.

Platform rules

  • Use .ios.tsx, .android.tsx, .native.tsx, and .web.tsx when interaction or control chrome should follow the platform.
  • Do not hide materially different behavior inside Platform.OS branches. File-level splits are inspectable, testable, and survive the package boundary.
  • A shared file means the same implementation is intentional on all surfaces.
  • A platform-only component must say so in its Storybook description and API page. It must not fail silently when imported on an unsupported surface.

Variant evidence

Every visual or behavioral variant belongs in Storybook once. The specification for that story records whether the expected result is:

  • identical on all platforms;
  • shared semantics with native control treatment;
  • web-only;
  • native-only; or
  • awaiting device verification.

The release gate is the evidence matrix below:

ChangeWeb StorybookWeb DOM/a11yiOSAndroid
Token or typographyLight + dark baselineComputed contrastConsumer smoke testConsumer smoke test
Shared layout primitiveResponsive storiesOverflow + target sizesSimulator/deviceEmulator/device
Form controlAll states and variantsKeyboard, focus, name, errorNative interactionNative interaction
Platform splitWeb variantWeb contractiOS-specific testAndroid-specific test
Overlay/sheetOpen/closed/errorFocus/modal semanticsGesture + keyboardBack button + keyboard

Native playground direction

The current Storybook is deliberately web-hosted so documentation, live demos, and pixel baselines share one deterministic runtime. The next native expansion should be an Expo development client that reuses the same CSF stories for iOS and Android rather than creating a second catalogue. Until that runner exists, component pages must label native-only behavior and product PRs must include simulator/emulator evidence for native changes.

On this page