Keycard Pal Offline
Keycard Pal is a hardware wallet companion app. It works with a Keycard NFC smart card to sign Ethereum and Bitcoin transactions, and your private keys never leave the card.
Keycard Pal is a hardware wallet companion app. It works with a Keycard NFC smart card to sign Ethereum and Bitcoin transactions, and your private keys never leave the card.
Requires a Keycard hardware smart card (keycard.tech). The app talks to the card over NFC: no USB, no Bluetooth.
Your wallet and Keycard Pal talk through animated QR codes. The wallet shows a request, you review it in Keycard Pal, tap your card, and show the signature back. No network connection is needed for any of it.
Features:
- Sign Ethereum transactions (legacy, EIP-1559, EIP-2930)
- Sign EIP-712 typed data with decoded preview before approval
- Sign personal messages (EIP-191 / SIWE)
- Sign Bitcoin transactions via PSBT
- Sign Bitcoin messages (BIP-322)
- Export wallet keys to MetaMask, Rabby, Ledger Live, Sparrow, BlueWallet, and Bitget via UR QR codes
- Generate a key pair on the card, or import a recovery phrase (BIP-39) or SLIP-39 shares
- Genuine Keycard check
- No telemetry, no analytics, no account
Keycard Pal comes in two builds:
- Keycard Pal Offline (com.keycardpal.offline) has no internet permission. It cannot make a network connection.
- Keycard Pal (com.keycardpal) has the internet permission for optional features: WalletConnect, ENS names, transaction simulation with Tenderly, and token images. Each one is off until you turn it on in Settings. WalletConnect needs your own Reown Project ID and simulation needs your own Tenderly API key.
Keycard Pal is free and open-source software.
Advertisement: the Buy a Keycard links in this app are affiliate links. The developer earns a commission on purchases made through them. No app feature depends on buying through them, and every feature of the app is free.
Summary generated by Zapstore from source.
Original description, as the developer published it.
Latest release
The catalog lists this app from
mmlado/keycard-pal
and signs its releases. The developer has not claimed it.
Are you the developer? Claim your app
Uses the camera to scan QR codes. Data stays on the phone.
Permissions
- Camera CAMERA Take photos and record video To scan QR codes.
Release notes
What's Changed
- fix: retry a refused secret change with the secret that was entered by @mmlado in https://github.com/mmlado/keycard-pal/pull/475
- refactor: one Keycard tap host for every screen that taps a card by @mmlado in https://github.com/mmlado/keycard-pal/pull/477
- fix: retry a failed key pair load with the same key pair by @mmlado in https://github.com/mmlado/keycard-pal/pull/479
- refactor: the operation runner holds the operation's input by @mmlado in https://github.com/mmlado/keycard-pal/pull/481
- refactor: the WalletConnect provider answers a request however it is left by @mmlado in https://github.com/mmlado/keycard-pal/pull/483
- fix: WalletConnect answers once, and back on the success sheet keeps the signature by @mmlado in https://github.com/mmlado/keycard-pal/pull/484
- chore: declare the clear-signing registry download with the other network features by @mmlado in https://github.com/mmlado/keycard-pal/pull/488
- refactor: WalletConnect typed data goes through the Ethereum payload classification by @mmlado in https://github.com/mmlado/keycard-pal/pull/492
- feat: support BIP85 export in multiple formats by @YanzheL in https://github.com/mmlado/keycard-pal/pull/491
- refactor: one call description for the transaction, every inner call and the vector harness by @mmlado in https://github.com/mmlado/keycard-pal/pull/497
- refactor: the descriptor display as data, drawn by one renderer by @mmlado in https://github.com/mmlado/keycard-pal/pull/500
- refactor: one keyboard-aware bottom action area for the form screens by @mmlado in https://github.com/mmlado/keycard-pal/pull/502
- refactor: one message description for the EIP-712 review and the vector harness by @mmlado in https://github.com/mmlado/keycard-pal/pull/504
- feat: each operation states its success wording once by @mmlado in https://github.com/mmlado/keycard-pal/pull/506
- refactor: keyboard handling through react-native-keyboard-controller, and a settings field that owns its draft by @mmlado in https://github.com/mmlado/keycard-pal/pull/510
- refactor: usePairingSlots owns the read tap and the unpair tap by @mmlado in https://github.com/mmlado/keycard-pal/pull/513
- refactor: the Ethereum payload classification owns the transaction accept set by @mmlado in https://github.com/mmlado/keycard-pal/pull/515
- refactor: one adoption path for the descriptor index, run one at a time with the restore and the revert by @mmlado in https://github.com/mmlado/keycard-pal/pull/517
- docs: consolidate the unreleased changelog by @mmlado in https://github.com/mmlado/keycard-pal/pull/518
- refactor: one shared fake card for the hook tests by @mmlado in https://github.com/mmlado/keycard-pal/pull/520
- refactor: four small cleanups in the dashboard entries and the recovery phrase screens by @mmlado in https://github.com/mmlado/keycard-pal/pull/522
- docs: link both Android builds on f-droid.org by @mmlado in https://github.com/mmlado/keycard-pal/pull/523
- fix: refuse EIP-712 typed data whose declared domain is not the standard one by @mmlado in https://github.com/mmlado/keycard-pal/pull/526
- refactor: tenderly_enabled stores '1' and '0' like every other opt-in flag by @mmlado in https://github.com/mmlado/keycard-pal/pull/528
- fix: refuse a sign request with an unknown dataType by @mmlado in https://github.com/mmlado/keycard-pal/pull/531
- fix: read the card after the app is left with back and reopened by @mmlado in https://github.com/mmlado/keycard-pal/pull/534
- fix: the review's header, Sign button and type label follow the payload kind by @mmlado in https://github.com/mmlado/keycard-pal/pull/530
- fix: the header back arrow during a tap keeps a screen that stays on cancel by @mmlado in https://github.com/mmlado/keycard-pal/pull/533
- fix: Try again after an interrupted key load finishes on the card that took the key by @mmlado in https://github.com/mmlado/keycard-pal/pull/536
- feat: unpair every pairing slot except this device's by @mmlado in https://github.com/mmlado/keycard-pal/pull/538
- fix: no registry entry describes EIP-712 typed data whose domain fields are in another order by @mmlado in https://github.com/mmlado/keycard-pal/pull/539
- fix: the pairing slots screen counts the card's own slots by @mmlado in https://github.com/mmlado/keycard-pal/pull/540
- fix: generating a key refuses a card that already holds one at the first tap by @mmlado in https://github.com/mmlado/keycard-pal/pull/543
- chore: the iOS lock carries the keyboard library's pods by @mmlado in https://github.com/mmlado/keycard-pal/pull/546
- chore: one CocoaPods version writes the iOS lock by @mmlado in https://github.com/mmlado/keycard-pal/pull/547
- fix: iOS's native back and swipe step a form back and leave a held screen by @mmlado in https://github.com/mmlado/keycard-pal/pull/548
- fix: monospace text uses iOS's monospaced font by @mmlado in https://github.com/mmlado/keycard-pal/pull/549
- fix: the status bar stays transparent after the splash on Android 12 to 14 by @mmlado in https://github.com/mmlado/keycard-pal/pull/550
- fix: WalletConnect starts with the SDK's telemetry off by @mmlado in https://github.com/mmlado/keycard-pal/pull/551
- fix: the EIP-712 review leaves out values the signature does not cover by @mmlado in https://github.com/mmlado/keycard-pal/pull/552
- chore: store texts and README cover BIP-85 and scope the key claim by @mmlado in https://github.com/mmlado/keycard-pal/pull/553
- fix: mark the five actions that start a Keycard tap by @mmlado in https://github.com/mmlado/keycard-pal/pull/557
- fix: send no WalletConnect INIT event with telemetry off by @mmlado in https://github.com/mmlado/keycard-pal/pull/558
- chore: drop Pairing slots' own error text and Try again by @mmlado in https://github.com/mmlado/keycard-pal/pull/562
- fix: end a WalletConnect pairing the relay refuses by @mmlado in https://github.com/mmlado/keycard-pal/pull/563
- fix: use a saved WalletConnect Project ID without a restart by @mmlado in https://github.com/mmlado/keycard-pal/pull/564
- chore: release 1.16.0 by @mmlado in https://github.com/mmlado/keycard-pal/pull/566
New Contributors
- @YanzheL made their first contribution in https://github.com/mmlado/keycard-pal/pull/491
Full Changelog: https://github.com/mmlado/keycard-pal/compare/v1.15.1...v1.16.0
APK SHA256 checksums
dc12f6913ba8512565608fbfd9fe9da144e8f2e064423e8179b2bb66a139cc8c keycard-pal-full-release-arm64-v8a.apk
48751c946cf321e172f8a05d379cccb952d52cc23b891a78ff99b9ce1a2557e4 keycard-pal-full-release-armeabi-v7a.apk
50bb9735b1f3b3790553ff5d7d8448a97dc9de3b5b70249c12652ac621555154 keycard-pal-full-release-universal.apk
83a13b93f7956ef46dcf86ceb6eb92b45c94ac7a0ac7904c4ec21076a42b5676 keycard-pal-offline-release-arm64-v8a.apk
729ef0509e384656c502aec014b22fb4403231fe71a043f3b56a5669228322bc keycard-pal-offline-release-armeabi-v7a.apk
0b1a40eb03dd1efc49712dcc0c9714443162d426313f4412631344191f19d168 keycard-pal-offline-release-universal.apk
Comments
Loading comments…
More security apps
See more-
M
My Signet by TheCryptoDonkey Family identity and signing for the Signet protocol
-
O
OTG Master Mount VeraCrypt, LUKS, BitLocker and APFS USB drives on non-rooted Android
-
H
Haven Private and censorship-resistant location sharing.
-
B
Bitmask Encrypted communication for mere mortals (superheroes welcome, too).
-
R
Riseup VPN RiseupVPN, anonymous VPN. Powered by Bitmask.
-
I
I2P I2P anonymous network
Get Keycard Pal Offline the private way
Updates checked on your device, and every release verified before it installs.