cross-platform-design — translate idiom, not pixels
Goal: ship one codebase that respects each platform's HIG/Material/Fluent — not a Flutter app that looks like Flutter on every OS.
What This Skill Can Do
- Choose cross-platform stacks and explain tradeoffs across Tauri, Electron, React Native, Flutter, Compose Multiplatform, Avalonia, Uno, and MAUI.
- Translate Apple, Android, Windows, and web patterns by idiom instead of copying pixels.
- Preserve UX briefs, state coverage, action hierarchy, tokens, desktop archetype, originality seed, layout sketch, and product metaphor across platforms.
- Define per-platform navigation, controls, typography, icons, motion, density, and accessibility adaptations.
- Warn when one shared UI will harm platform fit or when a single-platform implementation is the better choice.
Step 0 — Preserve UX and UI decisions
If Stark produced a UX decision brief or UI decision brief, keep both as the source of truth. Translate them per platform instead of pixel-cloning.
Read:
../../references/ui-patterns/surface-taxonomy.md
../../references/ui-patterns/ui-decision-brief.md
../../references/ui-patterns/desktop-app-archetypes.md
../../references/ui-patterns/originality-engine.md
../../references/ui-patterns/design-recipes.md
../../references/ui-patterns/anti-default-contrasts.md
../../references/ui-patterns/visual-hierarchy.md
../../references/ui-patterns/motion-budget.md
The shared product should preserve job, state coverage, action hierarchy, visual hierarchy, desktop archetype, originality seed, and layout sketch. Navigation, controls, typography, icons, and motion must become platform-specific, but the chosen shape should remain legible: command center stays a command center, library stays a library, workbench stays a workbench, and monitoring cockpit stays a monitoring cockpit. A product-specific metaphor can translate across platforms; exact pixels and custom controls should not.
Step 1 — Pick the right framework for the design intent
| User priority |
Recommended stack |
| Native feel + Kotlin codebase + iOS support |
Compose Multiplatform 1.8+ (iOS stable since May 2025) |
| Tiny binary, web team, desktop-first |
Tauri 2 (Rust + native webviews; ~3MB) |
| Native Android views + iOS, large ecosystem |
React Native (New Arch + Fabric + Hermes) |
| Single Skia raster across platforms (custom design system) |
Flutter — only if pixel control matters more than native feel |
| .NET shop, XAML cross-platform |
Uno Platform 5+ (reuses WinUI XAML) |
| .NET shop, mobile-first |
.NET MAUI (warn: weaker desktop, weaker iOS feel) |
| Cross-platform desktop + custom theming |
Avalonia 11 with Fluent/Mac themes |
Step 2 — Native-feel ranking by platform
When the user picks a stack, state the fidelity tradeoff per platform in one line each.
Compose Multiplatform 1.8+
- Android: native (excellent)
- iOS: stable but Material widgets won't feel HIG — you must implement Cupertino-styled Compose components, or accept a Material aesthetic on iOS
- Desktop: good for Compose-driven design, not native Fluent
- Web (Wasm): experimental
Tauri 2
- Windows: WebView2 chrome — Mica works via window-backdrop API but font rendering and focus rings will look subtly off vs WinUI 3
- macOS: WKWebView — looks like a web app, not an AppKit/SwiftUI app
- Linux: WebKitGTK
- Mobile (iOS/Android): preview, not production-ready
React Native (New Architecture)
- iOS: real UIKit views, decent. Liquid Glass requires
expo-glass-effect or native modules; partial adoption.
- Android: real Android views, M3 themable but won't get spring physics or shape morphing without manual work.
- Desktop: react-native-windows / react-native-macos exist, fidelity weaker
Flutter
- All platforms: Skia custom-painted. Never feels native to anyone.
- Material 3 widgets exist but lag platform updates (no spring physics parity, no shape morphing primitives, no real dynamic color).
- Avoid for any project where "native feel" is a stated requirement.
Uno Platform
- Windows: native WinUI (excellent)
- iOS / Android / Mac / Web: reuses XAML rendering — distinctive fidelity but not 1:1 with each platform's idiom
- Best XAML cross-platform path
.NET MAUI
- Windows: weak WinUI integration
- macOS: Catalyst (deprecated direction)
- iOS: looks like Android in costume
- Generally avoid for design-first work
Step 3 — Translation rules: same product, different idiom
Settings screen example:
- iOS → grouped
Form with Section { ... } headers, Liquid Glass toolbar, switch toggles
- Android →
LargeTopAppBar + LazyColumn with ListItem rows, switches with M3 thumbs
- Windows →
NavigationView + scrollable SettingsCard stack with Mica backdrop
- Web → asymmetric grid with sidebar nav and editorial section headers
Tab bar example:
- iOS → bottom
TabView (5 tabs max, Liquid Glass)
- Android →
NavigationBar (3–5) or NavigationRail adaptive
- Windows →
NavigationView Top or Left
- Web → top nav with motion-reveal
List detail example:
- iOS →
NavigationSplitView on iPad/Mac, push-pop on iPhone
- Android →
ListDetailPaneScaffold (adaptive)
- Windows → Master-detail with Mica
- Web → URL-driven two-pane with View Transitions
Desktop archetype example:
- Command center → Windows
NavigationView + CommandBar + status rail, macOS NavigationSplitView + toolbar/search, Tauri/Electron command palette + inspector
- Library / collection → Windows
GridView + preview pane, macOS sidebar/content/inspector, web desktop shell with collection grid + detail sheet
- Workbench → Windows command bar + canvas + inspector, macOS document window + toolbar + inspector, web desktop shell with stable toolbars and undo/redo
- Tray/menu-bar utility → Windows tray flyout or compact window, macOS
MenuBarExtra, web desktop shells only when background status and settings justify a full app
Never copy the iOS tab bar onto Windows. Never copy the Android FAB onto iOS. Idiom > pixel.
Step 4 — When to route to a single-platform skill
If the user is shipping to one canonical platform first (almost always the case), route to that platform's skill (apple-design, android-design, windows-design, web-design) and translate later. Don't start in cross-platform mode unless they explicitly say "build cross-platform from day one."
Step 5 — Anti-slop ban list (cross-platform-specific)
- Same UI pixel-for-pixel on every platform
- Defaulting to Flutter without warning about non-native feel
- Defaulting to Electron (use Tauri 2 if web stack is mandated)
- Material widgets unmodified on iOS — must Cupertino-skin or accept "Material on iOS" warning
- Cupertino widgets unmodified on Android — same in reverse
- Ignoring per-platform navigation idioms (always-bottom-tabs, always-hamburger)
- One typeface across all platforms — each OS has a system face
- One motion language across all platforms when native motion differs
- One density level across mobile, tablet, desktop, and web
Step 6 — Reference cross-platform apps that translate well
- Notion — web-first but adapts respectably to each native platform
- Telegram — fully native on each platform; same product, different code per OS
- Spotify — same brand, idiomatic per platform
- Linear — desktop via Electron but obsessively polished; web is canonical
Step 7 — Tokens & assets
When generating cross-platform output, ship tokens once and translate:
- Use the DTCG W3C token format as the source of truth
- See
../../scripts/token_export.py to translate one token JSON into Tailwind theme + Compose Material3 ColorScheme + SwiftUI Color extension + Fluent ResourceDictionary
- See
../../assets/tokens/ for per-platform reference token bundles
Source: hashgraph-online/awesome-codex-plugins → plugins/f0d010c/stark/skills/cross-platform-design/SKILL.md
1---2name: cross-platform-design3description: Use when the user wants one codebase or one product design across web, iOS, Android, Windows, and Mac, asks for the same app on all platforms, asks to translate/port a UI between platforms, or names Compose Multiplatform, Tauri 2, Electron, React Native, Flutter, .NET MAUI, Avalonia, or Uno Platform. Builds cross-platform UI by preserving UX decisions, originality seed, desktop archetype, state coverage, tokens, and product job while translating each surface into the host platform's native idiom rather than pixel-cloning. SKIP when only one platform is targeted and no translation/cross-platform tradeoff is involved.4---567# cross-platform-design — translate idiom, not pixels89Goal: ship one codebase that respects each platform's HIG/Material/Fluent — not a Flutter app that looks like Flutter on every OS.1011## What This Skill Can Do1213- Choose cross-platform stacks and explain tradeoffs across Tauri, Electron, React Native, Flutter, Compose Multiplatform, Avalonia, Uno, and MAUI.14- Translate Apple, Android, Windows, and web patterns by idiom instead of copying pixels.15- Preserve UX briefs, state coverage, action hierarchy, tokens, desktop archetype, originality seed, layout sketch, and product metaphor across platforms.16- Define per-platform navigation, controls, typography, icons, motion, density, and accessibility adaptations.17- Warn when one shared UI will harm platform fit or when a single-platform implementation is the better choice.1819## Step 0 — Preserve UX and UI decisions2021If Stark produced a UX decision brief or UI decision brief, keep both as the source of truth. Translate them per platform instead of pixel-cloning.2223Read:2425- `../../references/ui-patterns/surface-taxonomy.md`26- `../../references/ui-patterns/ui-decision-brief.md`27- `../../references/ui-patterns/desktop-app-archetypes.md`28- `../../references/ui-patterns/originality-engine.md`29- `../../references/ui-patterns/design-recipes.md`30- `../../references/ui-patterns/anti-default-contrasts.md`31- `../../references/ui-patterns/visual-hierarchy.md`32- `../../references/ui-patterns/motion-budget.md`3334The shared product should preserve job, state coverage, action hierarchy, visual hierarchy, desktop archetype, originality seed, and layout sketch. Navigation, controls, typography, icons, and motion must become platform-specific, but the chosen shape should remain legible: command center stays a command center, library stays a library, workbench stays a workbench, and monitoring cockpit stays a monitoring cockpit. A product-specific metaphor can translate across platforms; exact pixels and custom controls should not.3536## Step 1 — Pick the right framework for the design intent3738| User priority | Recommended stack |39|---|---|40| Native feel + Kotlin codebase + iOS support | **Compose Multiplatform 1.8+** (iOS stable since May 2025) |41| Tiny binary, web team, desktop-first | **Tauri 2** (Rust + native webviews; ~3MB) |42| Native Android views + iOS, large ecosystem | **React Native** (New Arch + Fabric + Hermes) |43| Single Skia raster across platforms (custom design system) | **Flutter** — only if pixel control matters more than native feel |44| .NET shop, XAML cross-platform | **Uno Platform 5+** (reuses WinUI XAML) |45| .NET shop, mobile-first | **.NET MAUI** (warn: weaker desktop, weaker iOS feel) |46| Cross-platform desktop + custom theming | **Avalonia 11** with Fluent/Mac themes |4748## Step 2 — Native-feel ranking by platform4950When the user picks a stack, **state the fidelity tradeoff per platform** in one line each.5152### Compose Multiplatform 1.8+53- Android: native (excellent)54- iOS: stable but Material widgets won't feel HIG — you must implement Cupertino-styled Compose components, or accept a Material aesthetic on iOS55- Desktop: good for Compose-driven design, not native Fluent56- Web (Wasm): experimental5758### Tauri 259- Windows: WebView2 chrome — Mica works via window-backdrop API but font rendering and focus rings will look subtly off vs WinUI 360- macOS: WKWebView — looks like a web app, not an AppKit/SwiftUI app61- Linux: WebKitGTK62- Mobile (iOS/Android): preview, not production-ready6364### React Native (New Architecture)65- iOS: real UIKit views, decent. Liquid Glass requires `expo-glass-effect` or native modules; partial adoption.66- Android: real Android views, M3 themable but won't get spring physics or shape morphing without manual work.67- Desktop: react-native-windows / react-native-macos exist, fidelity weaker6869### Flutter70- All platforms: Skia custom-painted. Never feels native to anyone.71- Material 3 widgets exist but lag platform updates (no spring physics parity, no shape morphing primitives, no real dynamic color).72- **Avoid** for any project where "native feel" is a stated requirement.7374### Uno Platform75- Windows: native WinUI (excellent)76- iOS / Android / Mac / Web: reuses XAML rendering — distinctive fidelity but not 1:1 with each platform's idiom77- Best XAML cross-platform path7879### .NET MAUI80- Windows: weak WinUI integration81- macOS: Catalyst (deprecated direction)82- iOS: looks like Android in costume83- **Generally avoid for design-first work**8485## Step 3 — Translation rules: same product, different idiom8687**Settings screen example:**88- iOS → grouped `Form` with `Section { ... }` headers, Liquid Glass toolbar, switch toggles89- Android → `LargeTopAppBar` + `LazyColumn` with `ListItem` rows, switches with M3 thumbs90- Windows → `NavigationView` + scrollable `SettingsCard` stack with Mica backdrop91- Web → asymmetric grid with sidebar nav and editorial section headers9293**Tab bar example:**94- iOS → bottom `TabView` (5 tabs max, Liquid Glass)95- Android → `NavigationBar` (3–5) or `NavigationRail` adaptive96- Windows → `NavigationView` Top or Left97- Web → top nav with motion-reveal9899**List detail example:**100- iOS → `NavigationSplitView` on iPad/Mac, push-pop on iPhone101- Android → `ListDetailPaneScaffold` (adaptive)102- Windows → Master-detail with Mica103- Web → URL-driven two-pane with View Transitions104105**Desktop archetype example:**106- Command center → Windows `NavigationView` + `CommandBar` + status rail, macOS `NavigationSplitView` + toolbar/search, Tauri/Electron command palette + inspector107- Library / collection → Windows `GridView` + preview pane, macOS sidebar/content/inspector, web desktop shell with collection grid + detail sheet108- Workbench → Windows command bar + canvas + inspector, macOS document window + toolbar + inspector, web desktop shell with stable toolbars and undo/redo109- Tray/menu-bar utility → Windows tray flyout or compact window, macOS `MenuBarExtra`, web desktop shells only when background status and settings justify a full app110111Never copy the iOS tab bar onto Windows. Never copy the Android FAB onto iOS. Idiom > pixel.112113## Step 4 — When to route to a single-platform skill114115If the user is shipping to one canonical platform first (almost always the case), route to that platform's skill (`apple-design`, `android-design`, `windows-design`, `web-design`) and translate later. Don't start in cross-platform mode unless they explicitly say "build cross-platform from day one."116117## Step 5 — Anti-slop ban list (cross-platform-specific)118119- Same UI pixel-for-pixel on every platform120- Defaulting to Flutter without warning about non-native feel121- Defaulting to Electron (use Tauri 2 if web stack is mandated)122- Material widgets unmodified on iOS — must Cupertino-skin or accept "Material on iOS" warning123- Cupertino widgets unmodified on Android — same in reverse124- Ignoring per-platform navigation idioms (always-bottom-tabs, always-hamburger)125- One typeface across all platforms — each OS has a system face126- One motion language across all platforms when native motion differs127- One density level across mobile, tablet, desktop, and web128129## Step 6 — Reference cross-platform apps that translate well130131- **Notion** — web-first but adapts respectably to each native platform132- **Telegram** — fully native on each platform; same product, different code per OS133- **Spotify** — same brand, idiomatic per platform134- **Linear** — desktop via Electron but obsessively polished; web is canonical135136## Step 7 — Tokens & assets137138When generating cross-platform output, ship tokens once and translate:139- Use the **DTCG W3C token format** as the source of truth140- See `../../scripts/token_export.py` to translate one token JSON into Tailwind theme + Compose Material3 ColorScheme + SwiftUI Color extension + Fluent ResourceDictionary141- See `../../assets/tokens/` for per-platform reference token bundles142143---144145**Source:** [`hashgraph-online/awesome-codex-plugins`](https://github.com/hashgraph-online/awesome-codex-plugins) → `plugins/f0d010c/stark/skills/cross-platform-design/SKILL.md`