Nutshell 0.21.0
Caution
This release includes database migrations for the mint and mint authentication databases. Ensure you back up your databases before upgrading your Nutshell instance to avoid data loss.
Nutshell 0.21.0 brings security hardening, Lightning backend improvements, wallet fixes, and the retirement of deprecated integrations and APIs.
Compatibility Notes
- Removed Lightning backends:
BlinkWallet,LNbitsWallet, and the deprecatedCoreLightningRestWallet. Operators using these must switch to a supported backend before upgrading. Core Lightning users should useCLNRestWalletwithxpayavailable. - Removed legacy API support: deprecated mint endpoints and wallet compatibility fallbacks for older mint responses have been retired. Integrations should use the current
/v1API.
Notable Changes
Mint
- LND self-payments: optional support through
MINT_LND_ALLOW_SELF_PAYMENT, disabled by default, for both REST and gRPC backends. - LND invoice compatibility: fixes for millisatoshi invoice creation and sub-satoshi rounding, plus clearer errors for unsupported partial self-payments.
- Core Lightning:
CLNRestWalletnow usesxpayfor outgoing payments. - NUT-06 request limits:
/v1/infonow advertisesmax_array_length, allowing wallets to size requests before submitting them. - Standardized error codes: aligned with the Cashu specifications, including error
12002for inactive output keysets. - Spark: updated the Breez SDK dependency.
Wallet
- Named wallets: receiving tokens and listing wallets now consistently use the correct wallet name and database.
- CLI invoice handling: unpaid invoices are no longer reported as paid, and waiting for WebSocket payment notifications is bounded.
- Lightning change: blank change outputs now use amount
0for NUT-08 compatibility. - npub.cash: correctly recognizes already-issued quotes using the updated mint error code.
Other
- Added scheduled mutation testing and expanded Lightning, Spark, mint, wallet, and authentication integration tests.
- Removed obsolete regtest tooling and standardized LF line endings.
New Contributors
Full Changelog: 0.20.3...0.21.0
What's Changed
- chore: remove dead regtest tooling by @orangeshyguy21 in #1098
- feat: update nut29 test vector with uuidv7 by @KvngMikey in #1099
- add SECURITY.md by @callebtc in #1102
- fix(wallet): pass wallet name when constructing mint_wallet on receive paths by @KvngMikey in #1089
- Refactor: use central constants for method and subscription kind strings by @KvngMikey in #1101
- fix(mint): validate blinded output points by @a1denvalu3 in #1106
- fix a variety of issues with SIG_ALL and its interaction with P2PK and HTLC by @SatsAndSports in #1008
- Align route and payment state handling by @a1denvalu3 in #1108
- feat(lightning): add setting to allow LND self-payments Closes #1092 by @Hardeezah in #1107
- Chore/retire deprecated code by @callebtc in #1086
- fix(wallet): handle unpaid invoices in the CLI invoice command by @edgarmuyomba in #1022
- fix(lightning): improve error message for unsupported LND partial self-payments by @Hardeezah in #1113
- test: melt with real routing fees on regtest by @orangeshyguy21 in #1103
- fix(wallet): send blank change outputs with amount 0 by @robwoodgate in #1118
- chore(lightning): remove Blink and LNbits backends by @callebtc in #1110
- feat: add scheduled mutation testing by @a1denvalu3 in #1094
- fix(mint): return error 12002 for inactive output keysets by @callebtc in #1120
- fix(mint): enable balance watchdog with SIGTERM process shutdown by @Hardeezah in #1117
- use cln xpay by @callebtc in #1127
- fix(ci): restore mutation testing reports by @a1denvalu3 in #1136
- feat(mint): advertise the maximum request array length by @robwoodgate in #1115
- Fix: Standardize error codes by @KvngMikey in #1129
- fix(deps): bump breez-sdk-spark to ^0.17.0… by @KvngMikey in #1144
- chore: enforce LF line endings by @a1denvalu3 in #1141
- fix(wallet): dispatch NPC already-issued check on 20002 not 11000 by @KvngMikey in #1142
- ci: pin regtest setup and update fee-rounding test by @a1denvalu3 in #1148
- fix(mint): unblock mutation tests with RPC state cleanup by @a1denvalu3 in #1149
- fix(auth): align auth promises schema with the mint CRUD by @KvngMikey in #1145
- fix(ci): run Keycloak auth integration tests by @a1denvalu3 in #1150
- fix: use wallet name in wallets command by @orangeshyguy21 in #1155
- fix: LND msat invoice creation by @callebtc in #1156
- refactor(mint): align ledger execution and Lightning backend contracts by @callebtc in #1157
- fix(lightning): don't treat sub-satoshi rounding as a partial payment by @gorrdy in #1153
- chore(release): bump version to 0.21.0 by @callebtc in #1158
- test(spark): run shared mint and wallet regtests by @a1denvalu3 in #1147
New Contributors
- @orangeshyguy21 made their first contribution in #1098
- @SatsAndSports made their first contribution in #1008
- @Hardeezah made their first contribution in #1107
Full Changelog: 0.20.3...0.21.0