Brainwallet is a free, open-source, self-custodial Litecoin wallet for Android. Your seed phrase and keys stay on your device โ Brainwallet never has custody of your funds.
- iOS Repo: gruntsoftware/ios
- Website: brainwallet.co
- Support: brainwallet.co/support
Standalone, not a client of our servers. Brainwallet connects directly to the Litecoin peer-to-peer network using SPV (simplified payment verification) โ checking balances and broadcasting transactions doesn't depend on any Brainwallet-run backend. An already-installed copy keeps working even if Brainwallet the company disappeared.
Deterministic recovery. Brainwallet is a BIP32 hierarchical-deterministic wallet โ one seed phrase (paper key) recovers your full balance and transaction history on any device, forever.
Keys never leave your device. Private keys are generated and held in the Android Keystore, not in Brainwallet's infrastructure โ we never have custody of your funds and no backend path to recover them for you.
Built on open standards, not a proprietary protocol:
- SPV for fast sync without running a full node
- BIP32 deterministic wallets
- BIP38 import of password-protected paper wallets
- BIP70 payment protocol support
- Self-custodial Litecoin wallet โ your seed phrase never leaves your device
- Send/receive LTC with real-time fee estimation and fiat conversion
- Games to help you memorize your seed phrase (Check out Fallinmoji!)
- PIN app lock
- Buy/sell LTC and gift cards via in-app widgets
- Modern Jetpack Compose UI, with a legacy Java/UIKit-era codebase still being progressively migrated
- Android Studio (current stable) with SDK 36 installed, NDK
25.1.8937393, CMake3.22.1 minSdk 29,targetSdk 35
- Language/UI: Kotlin, Jetpack Compose (legacy screens still in Java/
View-based UIKit-era code underpresenter/, being migrated incrementally) - DI: Koin
- Concurrency: Kotlin Coroutines &
StateFlow - Wallet core: native C/C++ (
app/src/main/jni/core), elliptic curve crypto viasecp256k1 - Modules:
app(main app),bw-gdlib(mini-games, LibGDX, composite build),modules/private-general-purpose(in-app purchases + general-purpose features),android-build-logic(shared Gradle convention plugins)
Unit tests live under app/src/test/{java,kotlin}. Run them with ./gradlew test, or a specific variant with ./gradlew testBrainwalletDebugUnitTest. CI runs on CircleCI (.circleci/config.yml).
Found a security vulnerability? Please do not open a public issue โ see SECURITY.md for how to report it privately.
Brainwallet Android is released under the MIT License.
For the full, up-to-date changelog see GitHub Releases and the compare view. Highlights from recent versions:
v4.11.0 [PR #259]
Tapping Play (or Play Again from the end screen) now runs a short intro sequence before the round begins instead of dropping straight into gameplay:
- Ready dialog โ shows the round's 3 target emojis on star icons alongside the bonus-scoring rules for ~4.8s
- 3-2-1-GO! countdown โ a rewired full-screen countdown over a looping 6-frame ray-burst flipbook and center star accent, replacing the old libGDX
ParticleEffect-driven burst for more reliable screen coverage and consistent timing - Main menu button artwork polished (Play / How-To buttons)
Added 48 new unit tests across 7 new test classes, closing coverage gaps on previously-untested pure-logic utilities and the gameinterface package:
Base58Test,TypesConverterTest,BytesUtilTest,BRCompressorTest,BRDateUtilTestโ encode/decode round-trips, gzip/bz2 compression round-trips, and relative-time formatting edge casesGameKoinModuleTestโ verifies thegameModuleKoin DI wiring resolvesGameSlottoGdxGameSlotas a singletonGdxGameViewTestโ coversGameExitDataJSON parsing (defaults, unknown-key tolerance) and the social-share dispatch logic inhandleGameExit(Twitter/Instagram screenshot sharing, missing/empty screenshots, malformed JSON, unrecognized networks)
- Added
skills-lock.jsonto track installed Claude Code skills (aso,mobile-android-design) .gitignore: also excludeCLAUDE.local.md- Version bumped: v4.10.6 (202506345) โ v4.11.0 (202506346)
Full Changelog: https://github.com/gruntsoftware/android/compare/v4.10.6...v4.11.0
v4.10.6 [PR #253]
UnsatisfiedLinkErroroncore-libload โBRActivity/SyncReceiverloaded the native wallet library via unguardedSystem.loadLibrary()static initializers, crashing every screen on launch if the OS failed to extract the.so(a common install/update failure mode on some OEMs). Native lib loading is now centralized inBrainwalletApp.onCreate()via ReLinker, which falls back to manual extraction from the APK when the system loader fails.- Ghost launcher icon crash โ the LibGDX game module's
AndroidLauncherwas accidentally exported with its ownMAIN/LAUNCHERintent-filter, producing a second home-screen icon that crashed withUnsatisfiedLinkError: libgdx.so not foundwhen tapped (it bypassed the app's real startup path). Fixed by removing the exported intent-filter. BreadActivityNPE fix (#248) โ removed dead bottom-nav/toolbar code left over from an earlier refactor that deleted the view-binding logic but not the code still referencing those views, guaranteeing aNullPointerExceptionon every launch.
- Fixed a flaky
BWSenderreentrancy test that relied onThread.sleep()racing real-time against aStandardTestDispatcherโ replaced with deterministicCountDownLatchsynchronization. - Eliminated a flaky
ShopBentoViewModelTest(#250). - Removed a stale
modules/bw-gdlibgitlink that was breaking CI (#249).
- Real
SECURITY.mdwith an actual vulnerability disclosure process, replacing GitHub's unfilled default template. - Restructured
README.mdfor external visitors/contributors (#251).
Full Changelog: https://github.com/gruntsoftware/android/compare/v4.10.4...v4.10.6
v4.10.4 [PR #236]
A feature-rich release centered on the Game Hub / emoji mini-game experience and an MVI refactor of the main screens:
- New screens: emoji pager/picker (
EmojiPagerScreen,PickEmojisScreen,YourEmojisScreen,HowToSetEmojisScreen) and Game Hub bento screens (GameHubBentoScreen,GameHubBentoPagerScreen) - MVI refactor:
MainScreen,SettingsScreen, andGameHuball restructured into Event/State/ViewModel patterns (MainScreenEvent/MainScreenState/MainViewModel,SettingsEvent/SettingsState/SettingsViewModel,GameHubEvent/GameHubState/GameHubViewModel) - In-app review: Google Play in-app review integration (
InAppReviewService) - Design system, font (
Bolden Van,Lilita One,Open Sauce One), and localization updates alongside the above
Full Changelog: https://github.com/gruntsoftware/android/compare/v4.9.3...v4.10.4
- Fixed a crash in the send flow (
sendModelOnEvent) - Fixed the LTC/fiat picker layout
- Refactored analytics and reduced sync rate polling frequency (techdebt)
- Switched release tagging from release branches to tags going forward
Full Changelog: https://github.com/gruntsoftware/android/compare/v4.9.1...v4.9.4
v4.9.1 [PR #211]
- Fixed
BreadActivity.initializeViewscrash - Added
WalletManager, madevalidateAddressan instance method - Expanded Send flow test coverage for better stability
v4.9.0 [PR #201]
Transaction details can now be copied directly to the clipboard from the transaction detail view. A new BRClipboardManager.putDetailsClipboard() method handles the copy action with full analytics tracking, making it easy to share or reference transaction information outside the app.
Firebase analytics events are now fired for core user interactions โ fiat/LTC toggle, balance visibility toggle, and transaction detail copy โ giving the team better insight into how users engage with the wallet's main screens.
A new bentoSurface() modifier in BentoModifiers.kt consolidates gradient and border styling across the entire bento UI. Previously hardcoded values like 1.dp borders are now driven by shared constants (bentoBorderWidth, bentoCornerRadius, bentoSpacer, transactionActionHt, transactionDetailHt), making the visual system consistent and easy to maintain going forward.
- GameHub โ migrated from
CardtoBoxwithbentoSurface(), with aclickablemodifier added - Favourites โ refactored to
bentoSurface()with improvedSpacerlayout - LTC Picker โ label repositioned to top, spacing and item heights adjusted
- Transactions โ
TransactionFilter,TransactionsBentoScreen,ConfirmationStatus,CopyTransactionWidget,ExportTransactionsWidget,NoTxRow,TransactionDetail,TransactionFilterWidget,TransactionRowall updated to unified styling - Tutorials & Bottom Nav Bar โ updated to use unified theme system
MainScreen,MainScreenEvent, andMainViewModelupdated for new event handling and state managementNoWifiBalanceAlertScreenandReceiveDialogborder widths replaced withbentoBorderWidthconstantstrings.xmlupdated with new/updated string resourcesgradle/libs.versions.tomlandapp/build.gradle.ktsdependencies updateddetekt-app-baseline.xmlbaseline updated- Version bumped: v4.8.4 (202506314) โ v4.9.0 (202506315)
- Release/v4.7.2 202506296 by @kcw-grunt in #134
- Release/v4.8.0 by @kcw-grunt in #145
Full Changelog: https://github.com/gruntsoftware/android/compare/v4.7.2...v4.9.0
PR #191
The main screen now features two new purpose-built bento panels replacing the generic placeholder container. The Favourites panel displays a set of coloured circular indicators using the app's design theme colours (affirm, info, warn, error) with full dark/light mode support. The Tutorials panel shows a "Coming Soon" placeholder consistent with the broader bento design language. The old HomeBentoContainer has been removed. String resources for both sections have been translated across 19 locales including Arabic, Chinese (Traditional & Simplified), French, German, Farsi, Hindi, Indonesian, Italian, Japanese, Korean, Polish, Punjabi, Brazilian Portuguese, Russian, Spanish, Swedish, Turkish, and Ukrainian.
PR #182
The send transaction flow has been fully redesigned as a multi-step paged screen (Pre-send โ Confirm โ Authenticate). All monetary values have been migrated from Float to BigDecimal with explicit rounding modes, eliminating floating-point precision issues in fiat/LTC conversions. Transaction fees are now calculated dynamically using getFeePerKb() rather than a static default. The pre-send composable has been broken into focused sub-components (PreSendAddressRow, PreSendAmountRow, PreSendMemoRow), and passcode UI components have been extracted into a dedicated package. QR code scanning is now wired into the send flow via an EventBus event. A BWSender class handles transaction preparation with proper error handling and activity context management.
PR #182
Unit test coverage has been significantly expanded alongside the send screen work, bringing the total suite to 309 tests. New test classes include AppModuleTest, SendStateTest, and BrainwalletAppTest, covering the Koin DI module wiring, send state logic, and core app initialisation paths.
- Update README for improved description by @kcw-grunt in #78
- Beta Release [ ๐ ] Merge Develop into Main by @kcw-grunt in #81
- Current fiat preference from Settings needs to be reset if set in the TickerBento
- Localizations are covered to 100%
- Mini game FALLINMOJI is present in the Welcome and Game Hub
- Theme applied from Settings/Lock Screen/Main screen made consistent
- Fonts made consistent across the app
- Mini game sounds set to a nominal level
- Layout fixes for iPhone 8 โ iPhone 17 Pro Max on the Welcome Screen
- Support.brainwallet.co link fixed
- ๐ [Release v3.5.0] merged into Main by @kcw-grunt in #51
- Full Changelog: v3.4.2...v3.6.0
- Switched to
bundle exec fastlane single_unit_test_all - Downgraded Firebase to 11.12.0
- CI config polish
- ๐ฆพ Chore/migrate ready onboarding
- Fix/login view crash
- ๐งฐ Fix: removed thread blocking in the lock screen transaction loading
- Epic/settings migration (#50)
- Chore/refactor Firebase analytics
- Chore/activate test coverage
- Added locale filter
- UI improvements
- Various fixes
