Native iOS/Android wrapper for Glow PWA.
Built with Capacitor to wrap the existing Glow PWA in a native shell with:
- Native passkey PRF — biometric authentication via ASAuthorization (iOS) and CredentialManager (Android), since WebAuthn is unavailable in WebViews
- Native secure vault — wallet seed stored in iOS Keychain / Android Keystore with biometric binding enforced by the OS, not just a JS-side gate. Adding a new Face ID / Touch ID / fingerprint enrollment voids the stored seed automatically
- Dedicated unlock screen — cancelling the biometric prompt lands on a retry/abandon flow instead of dropping the user onto onboarding, where they could accidentally create a new passkey label and orphan the stored wallet
- Branded native shell — app icons, splash screen, launch theme, system bar colors, safe-area-aware layout, and portrait orientation lock on iOS and Android
- Native camera for QR scanning — CAMERA / NSCameraUsageDescription wired into the existing QR scanner dialog, with image-upload fallback if the user denies the permission
- Native share + in-app browser — log export goes through the system share sheet via
@capacitor/share, and Buy Bitcoin provider URLs open in Chrome Custom Tabs / SFSafariViewController via@capacitor/browserinstead of navigating the app's WebView - Soft keyboard and back-button polish — proper keyboard resize on both platforms, per-field
enterKeyHintaction buttons, form submit retracts the keyboard, and the Android hardware back button dismisses open sheets / drawers / dialogs in LIFO order before falling through to "minimise the app" - CI on every PR — GitHub Actions builds the web + Android on every PR and iOS (label-gated) + preview builds on release tags, with Dependabot auto-updates. Preview builds go to Firebase App Distribution for stakeholder testing
- Push notifications (planned, Phase 5) — notifications for Lightning address payments
glow-app/
glow-web/ # git submodule (breez/glow-web)
ios/ # Xcode project
android/ # Android Studio project
plugins/
capacitor-passkey-prf/ # Native passkey PRF bridge (ASAuthorization / CredentialManager)
capacitor-native-vault/ # Biometric-bound Keychain / Keystore seed storage
capacitor.config.ts # Capacitor configuration
The web app (glow-web) is built with Vite and the output (glow-web/dist/) is loaded into native WebViews by Capacitor. Two in-house Capacitor plugins bridge to native APIs that aren't available in WebViews: capacitor-passkey-prf for passkey + PRF extension, and capacitor-native-vault for biometric-bound secure storage.
- Node.js 22+
- For iOS: macOS with Xcode 16+ (iOS 18+ required for passkey PRF)
- For Android: Android Studio with SDK 28+ (API 28 = Android 9)
# Clone with submodule
git clone --recursive https://github.com/breez/glow-app.git
cd glow-app
# If already cloned without --recursive:
git submodule update --init --recursive
# Install dependencies
npm install
# Build the web app
cd glow-web && npm install && npm run build && cd ..
# Sync web assets to native projects
npx cap syncThe passkey PRF plugin depends on local Spark SDK builds. See DEVELOPMENT.md for full setup instructions, or:
make setup # full first-time setup
make ios # build for iOS
make android # build for AndroidSee PLAN.md for what's next and open follow-ups.
| Phase | Status |
|---|---|
| 1. Capacitor scaffold | ✅ |
| 2. Passkey PRF plugin | ✅ |
| 3. Native secure vault | ✅ |
| 4A. App polish | ✅ |
| 4B. CI | ✅ |
| 4C. Distribution (internal) | ✅ |
| 5. Push notifications | 🔜 Next |
| 6. Public store publishing | 🔜 After 5 |