Secure, seedless wallet recovery for modern applications
Documentation β’ Website β’ Examples β’ Changelog
The Unforgettable SDK is a comprehensive, multi-platform toolkit for implementing secure, seedless wallet recovery in your applications. It enables users to recover their private keys using biometric factors (face recognition, physical objects) and traditional methods (passwords) without storing sensitive data on servers.
β¨ Seedless Recovery - No mnemonics or seed phrases to manage
π End-to-End Encryption - Client-side cryptography, zero-knowledge architecture
π― Multi-Factor Authentication - Combine face recognition, images, and passwords
π± Cross-Platform - TypeScript/JavaScript, iOS (Swift), Android (Kotlin), React Native
π Easy Integration - Simple APIs, React hooks, and native SDKs
π Self-Sovereign - Users control their own recovery process
The SDK is organized into platform-specific packages:
| Package | Platform | Version | Documentation |
|---|---|---|---|
@rarimo/unforgettable-sdk |
TypeScript/JavaScript (Core) | Docs | |
@rarimo/unforgettable-sdk-react |
React Components | Docs | |
com.github.rarimo.unforgettable-sdk:android |
Android (Kotlin) | Docs | |
UnforgettableSDK |
iOS (Swift) | Docs |
- Works in browsers and Node.js environments
- Cryptographic key generation and encryption
- Recovery URL generation with embedded and custom parameters
- Polling mechanism for recovery completion
- TypeScript type definitions
- Pre-built QR code component (
UnforgettableQrCode) - React hooks for recovery flow management
- Automatic polling and state management
- Customizable styling and error handling
- Native Kotlin implementation
- Coroutines support for async operations
- WebView integration helpers
- Comprehensive error types
- Native Swift implementation with Swift Package Manager
- Async/await support
- Combine framework integration
- iOS 13+ support
npm install @rarimo/unforgettable-sdk @rarimo/unforgettable-sdk-react
# or
yarn add @rarimo/unforgettable-sdk @rarimo/unforgettable-sdk-reactimport UnforgettableQrCode from '@rarimo/unforgettable-sdk-react'
import { RecoveryFactor } from '@rarimo/unforgettable-sdk'
function App() {
return (
<UnforgettableQrCode
mode="create"
factors={[RecoveryFactor.Face, RecoveryFactor.Password]}
onSuccess={(privateKey) => {
console.log('Recovery key:', privateKey)
}}
/>
)
}repositories {
maven { url = uri("https://jitpack.io") }
}
dependencies {
implementation("com.github.rarimo.unforgettable-sdk:android:1.0.0")
}import com.rarimo.unforgettable.*
val sdk = UnforgettableSDK(
UnforgettableSdkOptions(
mode = UnforgettableMode.CREATE,
factors = listOf(RecoveryFactor.FACE, RecoveryFactor.PASSWORD)
)
)
val recoveryUrl = sdk.getRecoveryUrl()
val recoveredKey = sdk.getRecoveredKey() // suspending functiondependencies: [
.package(url: "https://github.com/rarimo/unforgettable-sdk.git", from: "1.0.0")
]import UnforgettableSDK
let sdk = try UnforgettableSDK(
mode: .create,
factors: [.face, .image, .password]
)
let recoveryUrl = try sdk.getRecoveryUrl()
let recoveredKey = try await sdk.getRecoveredKey()The repository includes comprehensive examples for each platform:
| Platform | Description | Location | Live Demo |
|---|---|---|---|
| React | Web app with QR code component | examples/react |
|
| React Native | iOS & Android mobile app | examples/react-native |
- |
| Android | Native Kotlin app with WebView | examples/android |
- |
| iOS | Native Swift app | examples/ios |
- |
Each example demonstrates:
- Creating new recovery setups
- Restoring existing accounts
- Factor selection and configuration
- WebView/QR code integration
- Automatic polling for recovery completion
- Key display and management
The SDK follows a zero-knowledge architecture:
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β Your App ββββββββββΆβ Unforgettableβββββββββββ User Device β
β (SDK) β β App (WebView)β β (Camera) β
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β β
β β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββ
β Unforgettable API (Encrypted Data) β
β β’ No private keys stored β
β β’ Only encrypted shards β
β β’ Cannot decrypt without factors β
βββββββββββββββββββββββββββββββββββββββ
- Key Generation: Client generates ephemeral key pairs
- Encryption: Recovery data encrypted client-side
- Storage: Only encrypted shards stored on API
- Recovery: User provides only factors β decryption happens client-side
- Zero-Knowledge: Server never sees private keys or decrypted data
- Node.js 18+ and Yarn 4.x
- Java 17 (for Android development)
- Xcode 14+ (for iOS development)
- Gradle 8.1+ (for Android builds)
-
Clone the repository:
git clone https://github.com/rarimo/unforgettable-sdk.git cd unforgettable-sdk -
Install dependencies:
yarn install
-
Build all packages:
yarn build
-
Run tests:
yarn test # All tests yarn test:ts # TypeScript/JavaScript tests yarn test:swift # iOS Swift tests yarn test:kotlin # Android Kotlin tests
unforgettable-sdk/
βββ packages/
β βββ core/ # TypeScript/JavaScript SDK
β βββ react/ # React components and hooks
β βββ android/ # Android SDK (Kotlin)
β βββ ios/ # iOS SDK (Swift)
βββ examples/
β βββ react/ # React web example
β βββ react-native/ # React Native mobile example
β βββ android/ # Android example app
β βββ ios/ # iOS example app
βββ scripts/ # Build and release scripts
yarn build # Build all packages
yarn lint # Lint TypeScript code
yarn test # Run all tests
yarn publish:stable # Publish packages to NPMIf you encounter this error:
Cannot find a Java installation on your machine matching: {languageVersion=17}
Solution (macOS):
# Install Java 17
brew install openjdk@17
# Link it
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
# Verify
/usr/libexec/java_home -V# Clean and rebuild
yarn clean
yarn install
yarn buildcd packages/ios
rm -rf Pods Podfile.lock
pod install- Core SDK Documentation
- React SDK Documentation
- Android SDK Documentation
- iOS SDK Documentation
- Full Documentation
- API Reference
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code style (ESLint for TypeScript, Ktlint for Kotlin, SwiftLint for Swift)
- Add tests for new features
- Update documentation
- Ensure all tests pass (
yarn test)
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright Β© 2025 Zero Block Global Foundation
Built with β€οΈ by the Rarimo team and contributors.
Powered by:
- @noble/curves - Cryptographic curves
- @noble/ciphers - Encryption
- @noble/hashes - Hash functions