Add Coconut Wallet single-sig Connect Wallet option
What changed, and why it matters
This commit adds support for a new Bitcoin wallet app called Coconut Wallet to the Passport hardware device. It lets users export their single-signature wallet setup to Coconut Wallet via an animated QR code, using the same data format already used for Sparrow Wallet. There is no indication of a security bug or fix in the change.
No security action required. Treat as a normal feature addition. If desired, verify that Coconut Wallet's expected JSON schema matches the generic single-sig export and that the 'model' field does not leak sensitive information.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change introduces a new wallet descriptor, CoconutWallet, registered in the software wallet list. It reuses the existing create_generic_json_wallet export path, sets a new optional ‘model’ field to ‘passport-core’ in the JSON payload when the wallet config contains a ‘model’ key, and exports via animated UR2 QR code. The ‘model’ field is gated on presence in the wallet config, so other wallets are unaffected. No cryptographic, parsing, or authorization changes are present.
Changed components
Passport firmware software wallet integrationgeneric JSON wallet exportQR code export flowInspect captured patch +31 / −0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9fe0721..7610874 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
-->
## Head
+- Added Coconut Wallet as a single-sig Connect Wallet option
- Improved self-send transaction information formatting (PASS1-638)
- Added the key manager extension, compatible with BIP85 and Nostr (PASS1-24)
diff --git a/ports/stm32/boards/Passport/modules/wallets/coconut.py b/ports/stm32/boards/Passport/modules/wallets/coconut.py
new file mode 100644
index 0000000..2f3026d
--- /dev/null
+++ b/ports/stm32/boards/Passport/modules/wallets/coconut.py
@@ -0,0 +1,23 @@
+# SPDX-FileCopyrightText: © 2026 Foundation Devices, Inc. <hello@foundation.xyz>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# coconut.py - Coconut Wallet support
+#
+
+from .generic_json_wallet import create_generic_json_wallet
+from data_codecs.qr_type import QRType
+
+# Coconut Wallet imports the generic single-sig JSON export (same payload as
+# Sparrow) over an animated UR2 QR code. The 'model' tag lets Coconut Wallet
+# label the imported wallet "Passport Core".
+CoconutWallet = {
+ 'label': 'Coconut Wallet',
+ 'model': 'passport-core',
+ 'sig_types': [
+ {'id': 'single-sig', 'label': 'Single-sig', 'addr_type': None,
+ 'create_wallet': create_generic_json_wallet},
+ ],
+ 'export_modes': [
+ {'id': 'qr', 'label': 'QR Code', 'qr_type': QRType.UR2},
+ ]
+}
diff --git a/ports/stm32/boards/Passport/modules/wallets/generic_json_wallet.py b/ports/stm32/boards/Passport/modules/wallets/generic_json_wallet.py
index f753ba8..887b3b5 100644
--- a/ports/stm32/boards/Passport/modules/wallets/generic_json_wallet.py
+++ b/ports/stm32/boards/Passport/modules/wallets/generic_json_wallet.py
@@ -72,6 +72,11 @@ def create_generic_json_wallet(sw_wallet=None,
version = system.get_software_info()[0]
rv['fw_version'] = version
+ # Optional device/model tag; importers (e.g. Coconut Wallet) use it to label the wallet.
+ model = sw_wallet.get('model')
+ if model:
+ rv['model'] = model
+
msg = ujson.dumps(rv)
if export_mode == 'qr' and qr_type == QRType.UR2:
diff --git a/ports/stm32/boards/Passport/modules/wallets/sw_wallets.py b/ports/stm32/boards/Passport/modules/wallets/sw_wallets.py
index 7820915..9753de4 100644
--- a/ports/stm32/boards/Passport/modules/wallets/sw_wallets.py
+++ b/ports/stm32/boards/Passport/modules/wallets/sw_wallets.py
@@ -10,6 +10,7 @@ from .bluewallet import BlueWallet
from .btcpay import BtcPayWallet
from .bull import BullBitcoinWallet
from .casa import CasaWallet
+from .coconut import CoconutWallet
from .coinbits import CoinbitsWallet
# from .caravan import CaravanWallet
# from .dux_reserve import DuxReserveWallet
@@ -36,6 +37,7 @@ supported_software_wallets = [
BullBitcoinWallet,
# CaravanWallet,
CasaWallet,
+ CoconutWallet,
CoinbitsWallet,
# DuxReserveWallet,
ElectrumWallet,
Why this scored 18/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.