AlgoKit Wallet SDK

This mobile utils library project provides common wallet UI components and screens out of the box, allowing native developers to skip building standard wallet functionality and focus more on unique, value-added features for their mobile applications.
How to Use
Add the following to your build.gradle.kts:
dependencies {
implementation("com.michaeltchuang.algokit.walletsdk:wallet-sdk-ui:3.202602.8")
implementation("com.michaeltchuang.algokit.walletsdk:wallet-sdk-core:3.202602.8")
}
Note: Check Maven Central for the latest
versions: wallet-sdk-ui | wallet-sdk-core
Overview
---
title: AlgoKit Wallet SDK High Level Overview
---
graph TD
subgraph "Apps"
App1["App 1"]
App2["App 2"]
end
subgraph wallet["AlgoKit Wallet SDK"]
SDK1["Wallet SDK Service<br/>(Android Only)"]
SDK2["Wallet SDK UI<br/>(Embedded Wallet UI)"]
SDK3["Wallet SDK Core<br/>(Headless Wallet Engine)"]
end
subgraph "Algorand SDKs"
Core["AlgoKit-Core Rust SDK"]
xHD["Algo xHD Kotlin/Swift SDK"]
JavaSDK["Algo Java SDK"]
GoSDK["Algo Falcon Go SDK"]
end
App1 <--> wallet
App2 <--> wallet
SDK1 <--> SDK2
SDK2 <--> SDK3
SDK3 <--> Core
SDK3 <--> xHD
SDK3 <--> JavaSDK
SDK3 <--> GoSDK
The demo apps (Android & iOS) in this repo demonstrate wallet-sdk library usage through a simplified "Pera-lite" sample wallet application. Current and planned features include:
- Create and recover accounts (Algo25, Universal HD, Falcon24)
- Theme customization
- Network switching between mainnet/testnet (code hasn't been audited, so use mainnet at your own risk)
- QR code scanning for account imports and keyreg transactions
- Algo-only & USDC experience for now (to swap memecoins...please use Pera app, Haystack app, etc)
- Account detail screen
- Passphrase management
- Localization
AlgoKit Wallet SDK currently uses UI theming inspired by Pera Android as a placeholder until official Algorand Foundation branding guidelines are available.
Project structure
This repo has the following modules:
This project is developed using Android Studio (stable version) and the Kotlin Multiplatform Plugin. As a mobile development project, it is primarily developed on macOS, support for Windows and Linux is quite limited. We also follow the KMP compatibility guide.
Screenshots
Running Screenshot Tests
Record/Generate Reference Images:
./gradlew :wallet-sdk-ui:executeScreenshotTests -Precord
This command will run all screenshot tests and save the captured screenshots as reference images.
./gradlew :wallet-sdk-ui:executeScreenshotTests -Pandroid.testInstrumentationRunnerArguments.class=com.michaeltchuang.walletsdk.ui.settings.screens.PasskeysScreenshotTest -Precord
This command will run screenshot tests for a single class and save the captured screenshots as reference images.
Verify Screenshots:
./gradlew :wallet-sdk-ui:executeScreenshotTests
This command will run the tests and compare current screenshots against the previously recorded
reference images. If there are differences, the test will fail and generate a comparison report.
Screenshot Default Storage Location:
wallet-sdk-ui/screenshots/debug/*.png
Note: Screenshot tests require an Android device or emulator to be connected.
Sample App - Accounts List
Fetching All Accounts Flow
Wallet-SDK Screens
Interactive Screenshot Viewer:
View all Wallet SDK screens with an interactive gallery that allows you to filter by locale
(English, Hindi, Italian), theme (Dark/Light), and view various user flows. Open Screenshot Gallery →
Architecture
Database Schema
---
title: AlgoKitDatabase
---
erDiagram
custom_account_info {
String algo_address PK
String custom_name
Int order_index
Boolean is_backed_up
}
custom_hd_seed_info {
Int seed_id PK,FK
String entropy_custom_name
Int order_index
Boolean is_backed_up
}
algo_25 {
String algo_address PK
ByteArray encrypted_secret_key
}
ledger_ble {
String algo_address PK
String device_mac_address
Int account_index_in_ledger
String bluetooth_name
}
no_auth {
String algo_address PK
}
hd_seeds {
Int seed_id PK
ByteArray encrypted_entropy UK
ByteArray encrypted_seed UK
}
falcon_24 {
String algo_address PK
Int seed_id FK
ByteArray public_key UK
ByteArray encrypted_secret_key
}
hd_keys {
String algo_address PK
ByteArray public_key UK
ByteArray encrypted_private_key
Int seed_id FK
Int account
Int change
Int key_index
Int derivation_type
}
sites {
Long id PK
String url UK
String name
}
passkey_table {
String credential_id PK
Long site_id FK
String address
String user_id
String user_name
String user_display_name
Long last_used_time_ms
}
seed_vault {
String public_key PK
String address
String chainId
String account_name
}
custom_hd_seed_info }|--|| hd_seeds : link
hd_keys }|--|| hd_seeds : link
falcon_24 }|--|| hd_seeds : link
passkey_table }|--|| sites : link
Contributing
Development happens in this open source repo for the AlgoKit Wallet SDK. Algorand community is always welcome to contribute by reviewing or opening new pull requests.
Testing
This project is tested with BrowserStack (open source license).
For QR code importing, you can use a tool like Cyber Chef to get QR codes online
24 word account
{
"mnemonic": "define claw hungry wave umbrella boost blind never muscle also grab gaze fluid echo predict describe turkey unaware dash phone urge crunch eyebrow abstract team"
}
KeyReg offline (account address should exist on device)
algorand://ANUR5SYMURBFD3ELITINYNTHVAKKBCWJ7LGHJRPMQM3KQG25ENMIHYEBNY?type=keyreg
Asset Opt-In (select account screen will pop up after scanning) - USDC (testnet - 10458941, mainnet - 31566704)
algorand://?amount=0&asset=10458941
Algo Transfer (receiver address & amount in microAlgos)
algorand://7N54HZSGBRQF7FW6YNC6F5H42AT5OXN3F5OQDAXF6H6PDFHNXIEBCJFHOY?amount=1000000¬e=1_ALGO_Transfer
ASA Transfer (receiver address & amount in microAlgos) - USDC (testnet - 10458941, mainnet - 31566704)
algorand://7N54HZSGBRQF7FW6YNC6F5H42AT5OXN3F5OQDAXF6H6PDFHNXIEBCJFHOY?amount=1000000&asset=10458941¬e=1_ALGO_Transfer
Liquid Auth (sample uri)
liquid://michaeltchuang.ngrok.dev/?requestId=019c3ff0-70fd-7663-823b-2ce5bbc5fca6