Builds native iOS and Android apps with Hotwire Native: iOS/Android setup, path configuration for server-driven routing, bridge components for web-to-native communication, native navigation patterns, authentication flows, and Rails backend integration. Use when building mobile apps, wrapping a Rails app in a native shell, iOS app, Android app, Hotwire Native iOS, Hotwire Native Android, bridge components, or native features. Cross-references: turbo-navigation-rendering for web view navigation, stimulus-controllers for bridge component JavaScript.
npx claudepluginhub ether-moon/hotwire-frontend-skills --plugin hotwire-frontend-skillsThis skill is limited to using the following tools:
Build native mobile apps that wrap an existing Rails web application using server-driven navigation and bridge components for platform-specific UX enhancements.
examples/bridge-component-cookbook.mdhandbook/INDEX.mdhandbook/hotwire-native-jetpack-compose-native-screens.mdhandbook/hotwire-native-monetization-bridge-components.mdhandbook/hotwire-native-swiftui-native-screens.mdhandbook/hotwire-native-turbo-failure-app.mdreferences/INDEX.mdreferences/bridge-components.mdreferences/native-authentication.mdreferences/native-navigation.mdreferences/path-configuration.mdreferences/rails-native-backend.mdreferences/turbo-android-setup.mdreferences/turbo-ios-setup.mdProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Analyzes competition with Porter's Five Forces, Blue Ocean Strategy, and positioning maps to identify differentiation opportunities and market positioning for startups and pitches.
Share bugs, ideas, or general feedback.
Build native mobile apps that wrap an existing Rails web application using server-driven navigation and bridge components for platform-specific UX enhancements.
Ensure the Rails web app works well on a mobile viewport before wrapping it in a native shell:
| Check | Why |
|---|---|
| Responsive layout at 375px width | Native web views render at device width |
| Touch-friendly tap targets (44pt minimum) | No hover states on mobile |
| Fast page loads under 3G throttling | Mobile networks are slower |
| Forms work without JavaScript | Bridge components enhance, not replace |
Create the iOS or Android project with the Hotwire Native SDK. The native app is a thin wrapper: a navigation controller hosting a web view.
| Platform | SDK | Reference |
|---|---|---|
| iOS | hotwire-native-ios | turbo-ios-setup.md |
| Android | hotwire-native-android | turbo-android-setup.md |
The Hotwire Native SDKs (iOS and Android) evolve across versions -- class names, method signatures, and import paths change. When specific API code is needed, use context7 (resolve-library-id → query-docs) to fetch the latest official documentation. The reference files in this skill describe architectural patterns and workflows but intentionally omit version-dependent implementation details.
Path configuration is the central routing mechanism — a JSON file served from your Rails app that tells the native client how to present each URL: push, modal, replace, or native screen.
| Native Screen Needed | Web View Sufficient |
|---|---|
| Camera/photo picker | Profile pages |
| Push notification settings | Lists and forms |
| Biometric authentication | Search and filters |
| Maps with real-time location | Content detail pages |
| AR/ML features | Settings pages |
Bridge components provide two-way communication between web JavaScript and native Swift/Kotlin. Use them for UX enhancements: share sheets, native menus, haptic feedback, native action buttons.
Business logic stays in the web app. Never duplicate Rails logic in Swift or Kotlin. The native shell is a presentation layer only.
Use path configuration for routing decisions. Never hardcode URL-to-presentation mappings.
GOOD: {"patterns": ["/settings"], "properties": {"context": "modal", "presentation": "default"}}
BAD: if url.contains("settings") { presentModally() }
Bridge components are for UX enhancements only. They expose platform-native UI for content the web page already owns.
Progressive enhancement — web must work without the native shell. Use turbo_native_app? to conditionally enhance, not gate functionality.
# GOOD: Web shows its own button; native hides it
<div data-bridge-form-submit class="<%= 'hidden' if turbo_native_app? %>">
<%= f.submit "Save" %>
</div>
# BAD: Feature only works in native
<% if turbo_native_app? %>
<%# No web fallback %>
<% end %>
Share cookies between web views. All WKWebView/WebView instances must share the same cookie store.
Set a custom user agent including "Turbo Native". The Rails backend detects this for conditional rendering.
Handle web view failures gracefully. Show native error screens for network failures, 401 redirects, and page load timeouts. Do not leave the user staring at a blank web view.
Ensure cookies persist across web view instances. Use a shared WKProcessPool (iOS) or shared CookieManager (Android) to prevent authentication loss when opening new web views.
| Topic | File |
|---|---|
| iOS setup | references/turbo-ios-setup.md |
| Android setup | references/turbo-android-setup.md |
| Path configuration (routing) | references/path-configuration.md |
| Bridge components | references/bridge-components.md |
| Native navigation | references/native-navigation.md |
| Authentication / sessions | references/native-authentication.md |
| Rails backend integration | references/rails-native-backend.md |
| Bridge component cookbook | examples/bridge-component-cookbook.md |
Full catalog: references/INDEX.md. Official guides: handbook/INDEX.md.
Out-of-scope requests: route back to frontend-craft for triage.