One of the key technical challenges was making self-custodial wallets accessible to fans without requiring them to manage seed phrases or understand private keys.
ND Labs implemented passkey-based authentication, allowing users to create and access their wallets through familiar device authentication, including Face ID, Touch ID, and Android biometrics.
To support secure authentication across mobile platforms, we developed native modules for iOS and Android:
– iOS: Swift and AuthenticationServices, with Face ID or Touch ID and passkey synchronization through iCloud Keychain.
– Android: Kotlin and Credential Manager API, supporting biometric authentication or device screen locks, with synchronization through Google Password Manager.
These native components are integrated into the Flutter application through platform channels, allowing the rest of the application logic to remain shared across platforms.
Transaction signing is designed to keep private keys outside the WebView layer, preserving the security boundaries of the self-custodial architecture.
Users can also recover access through passkeys, encrypted backups, and an offline recovery key.
The result is a wallet experience that feels like a familiar mobile application while maintaining self-custodial digital asset ownership.