Back to Freedom.Tech Back
All Cashu TS releasesAll versions
Release Tue, May 12, 2026 2 min read

Cashu TS 4.3.0

Original release notes

This release speeds up wallet restore by optimising legacy BIP-32 derivation - benchmarks showed roughly 2x speedup for the new cached batch path versus repeated BIP32 derivation of previous implementation.

It also tightens spec compliance and hardens the wallet against real-world mint quirks: BOLT12 quotes, NUT-12 DLEQ verification, and nullable wire fields now behave correctly across mint implementations.

Slow Lightning payments can now be fire-and-forget: wallets can save the in-flight payment, restart or hand off to another process, and still reclaim their change once the payment settles thanks to new OutputData serializers and wallet.createMeltChangeProofs method.

New developer ergonomics include a CTSError base class for cleaner error handling and a maxSpendableAfterFees primitive that makes "send max" flows trivial to build.

Finally, this release implements deterministic DLEQ to mitigate the risk of nonce re-use in JS environments with weak entropy / PRNGs.

[!Note] The fix in https://github.com/cashubtc/cashu-ts/pull/655 is technically a breaking type change to BOLT12 MintQuoteBolt12Response.amount in a very limited set of edge cases, so please check your app if it supports BOLT12. The PR description contains the one line fix if you are affected.

What's Changed

  • fix(mint): treat null amount on BOLT12 mint quote as no-amount by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/649
  • fix(wallet): treat expiry: 0 as no-expiry in validateMintQuote by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/648
  • docs(examples): add README and align bolt12 example with Makefile port by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/650
  • refactor(mint): cast wire values as AmountLike, not Amount, in normalizers by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/652
  • feat(wallet): add maxSpendableAfterFees method by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/654
  • fix(mint): coerce omitted payment_preimage and witness to null by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/653
  • feat(nut12): deterministic DLEQ nonce derivation by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/638
  • fix(wallet): verify DLEQ on received proofs even without requireDleq (NUT-12) by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/656
  • feat(types): align nullable wire fields with spec (T | null) by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/655
  • feat(errors): add CTSError base class by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/657
  • refactor: optimize deterministic derivation by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/658
  • feat(wallet): improve async melt change handling by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/659
  • chore(main): release 4.3.0 by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/651

Full Changelog: https://github.com/cashubtc/cashu-ts/compare/v4.2.1...v4.3.0