Community

Wallets

Cashu Redeem

Cashu Redeem turns a Cashu token into a Lightning payment path. The useful question is not whether it looks simple, but where the token, mint trust, melt quote, invoice and leftover change actually live.

Cashu Redeem visual
Cashu Redeem icon
Wallets Money paths Wallets, NWC, zaps, mints, Lightning addresses and payment tooling.
Back to Nostr
Wallets

Wallets shelf

Wallet pages collect zaps, Lightning accounts, Nostr Wallet Connect, ecash, payment interfaces and the security tradeoffs around moving money through Nostr.

Apps All Apps pages 520 pages in this routeApp pages, App categories, Product pages and 3 more shelves Browse pagesClose shelf

App orientation

App categories

App profiles

0xchatadvanced-nostr-searchAegisAlbyAlby GoAlby HubAlby HubAlby SDKAmberAmberAmethystAmethystApp and product researchApplication-specific dataBlossomBlossom spec NIP-B7BookstrBorisBouquetCalendar by FormstrChachiNostr Apps DirectoryCoracleCoracleCorny ChatCreatrDamusDamusDeveloper stack researchDittoDittodiVineDocstrDTANEmojitoFlotillaFlycatFormstrFountainFreeFromFundstrfutrGIF BuddyGittrgo-nostrGossipGossipGrimoireGroups NIP-29HablaHablaHello Nostr — ResourcesHighlighterHiveTalkhomebrew-nostrHORNET StorageHugo2NostrHyperNoteIrisIrisJumblekanbanstrKeys BandListrLNBits NostrmarketLumeLumilumiLUMINAMapstrMarmot Protocolmatrix-nostr-bridgeMeetstrMemestrMindsmonstrmostardMostronaknak — Nostr Army KnifeNalgorithmNarrnashboardNDKNegentropyngitNofluxNosNos Socialnos2xnosbinnosclNostorg Feature MatrixNostr App ManagerNostr Apps Directory GuideNostr clients feature listNostr Compass — ProjectsNostr Developer GuideNostr Development KitNostr Events MonitorNostr MCP ServerNostr NestsNostr PlaygroundNostr Service ProvidersNostr Writernostr-post-checkernostr-protocol/nostrnostr-rubynostr-sdknostr-sdk-ffinostr-sdk-flutternostr-to-rssnostr-toolsNostr.bandnostr.buildnostr.co.uk ClientsNostr.how — Clientsnostr.hsNostrabilityNostrAppsNostrApps category — AudioNostrApps category — CareerNostrApps category — CommunityNostrApps category — CurationNostrApps category — Direct MessageNostrApps category — DiscoveryNostrApps category — File SharingNostrApps category — Group ChatNostrApps category — MeatspaceNostrApps category — OnboardingNostrApps category — SignersNostrApps category — Toolsnostrchecknostrdbnostrdb-rsNostreeNostreonNostriaNostridNostrium / read.nostr.comNostrmoNostrubenoStrudelnoStrudelNostterNosturNosturNotedeckNpub.proNpub.worldnsec.appnsiteNsiteNstart.meObsidian Nostr WriterOlasOpenvibeOracoloOstrich WorkOwn Your PostsP2P BandPazPeridotPhoenixPlebeian MarketPostizPostr / write.nostr.comPrimalPrimalPrimal Article Editor / Reads authoringPrimal Studiopynostrpython-nostrRecommended Application HandlersRelay Toolsrsslayrust-nostrrust-nostr docsSatelliteSatellite EarthSatlantisSatShootShakespeareShopstrSlidestrSnortSnortStemstrswift-nostr-clientTreasuresWavlakeWavlakeWikifreediaWikistrYakiHonneYakiHonneYakiHonne mobile/web app directoryYondar

App pages

Deep dives

Field guides

Awesome Nostr branches

NIP explainer pages

Research and library

Source inventory

Deep Research: Clients, apps and product surfacesDeep Research: Developer stack and toolingResearch Map: nostrapps.comResearch Source: 0xchatResearch Source: 0xchat — NostrApps pageResearch Source: advanced-nostr-searchResearch Source: Aegis — NostrApps pageResearch Source: AlbyResearch Source: Alby — NostrApps pageResearch Source: Alby GoResearch Source: Alby HubResearch Source: Alby Hub GitHubResearch Source: Alby SDKResearch Source: AmberResearch Source: Amber — NostrApps pageResearch Source: AmethystResearch Source: Amethyst GitHubResearch Source: Awesome Nostr ResourcesResearch Source: BookstrResearch Source: BorisResearch Source: Boris — NostrApps pageResearch Source: BouquetResearch Source: Bouquet — NostrApps pageResearch Source: Calendar by FormstrResearch Source: ChachiResearch Source: Chachi — NostrApps pageResearch Source: CoracleResearch Source: Coracle — NostrApps pageResearch Source: Corny ChatResearch Source: DamusResearch Source: Damus — NostrApps pageResearch Source: DittoResearch Source: Ditto — NostrApps pageResearch Source: DocstrResearch Source: DTANResearch Source: DTAN — NostrApps pageResearch Source: EmojitoResearch Source: Emojito — NostrApps pageResearch Source: Flotilla — NostrApps pageResearch Source: FlycatResearch Source: FormstrResearch Source: Formstr — NostrApps pageResearch Source: FountainResearch Source: FreeFromResearch Source: FreeFrom — NostrApps pageResearch Source: FundstrResearch Source: futrResearch Source: futr — NostrApps pageResearch Source: GIF BuddyResearch Source: GIF Buddy — NostrApps pageResearch Source: GittrResearch Source: go-nostr GitHubResearch Source: GossipResearch Source: Gossip — NostrApps pageResearch Source: GrimoireResearch Source: Grimoire — NostrApps pageResearch Source: HablaResearch Source: Habla — NostrApps pageResearch Source: Hello Nostr — ResourcesResearch Source: HighlighterResearch Source: HiveTalkResearch Source: HORNET Storage — NostrCompassResearch Source: IrisResearch Source: Iris — NostrApps pageResearch Source: JumbleResearch Source: Jumble — NostrApps pageResearch Source: Keys BandResearch Source: Keys Band — NostrApps pageResearch Source: ListrResearch Source: LNBits NostrmarketResearch Source: LumeResearch Source: LumilumiResearch Source: LUMINAResearch Source: MapstrResearch Source: Marmot ProtocolResearch Source: MeetstrResearch Source: MemestrResearch Source: MindsResearch Source: monstr GitHubResearch Source: mostardResearch Source: MostroResearch Source: my.nostr.comResearch Source: nak — Nostr Army KnifeResearch Source: nak GitHubResearch Source: NalgorithmResearch Source: Narr — NostrApps pageResearch Source: nashboardResearch Source: NDK GitHubResearch Source: NDK NPMResearch Source: NegentropyResearch Source: Noflux — NostrApps pageResearch Source: Nos SocialResearch Source: Nos Social — NostrApps pageResearch Source: nos2xResearch Source: nos2x — NostrApps pageResearch Source: nosbinResearch Source: noscl GitHubResearch Source: Nostorg Feature MatrixResearch Source: Nostr App ManagerResearch Source: Nostr Book — KindsResearch Source: Nostr DesignResearch Source: Nostr Developer GuideResearch Source: Nostr NestsResearch Source: Nostr Nests — NostrApps pageResearch Source: Nostr PlaygroundResearch Source: nostr-post-checkerResearch Source: nostr-protocol/nostr GitHubResearch Source: nostr-sdk crates.ioResearch Source: nostr-sdk-ffi GitHubResearch Source: nostr-tools GitHubResearch Source: nostr-tools NPMResearch Source: Nostr.BandResearch Source: nostr.buildResearch Source: nostr.co.uk ClientsResearch Source: Nostr.howResearch Source: Nostr.how — ClientsResearch Source: Nostr.how — ProtocolResearch Source: Nostr.how — What is Nostr?Research Source: Nostr.orgResearch Source: NostrabilityResearch Source: NostrAppsResearch Source: NostrApps category — AudioResearch Source: NostrApps category — CareerResearch Source: NostrApps category — CommunityResearch Source: NostrApps category — CurationResearch Source: NostrApps category — Direct MessageResearch Source: NostrApps category — DiscoveryResearch Source: NostrApps category — File SharingResearch Source: NostrApps category — Group ChatResearch Source: NostrApps category — MeatspaceResearch Source: NostrApps category — OnboardingResearch Source: NostrApps category — SignersResearch Source: NostrApps category — ToolsResearch Source: nostrcheckResearch Source: nostrdb GitHubResearch Source: NostreeResearch Source: Nostree — NostrApps pageResearch Source: NostriaResearch Source: Nostria — NostrApps pageResearch Source: NostridResearch Source: Nostrmo — NostrApps pageResearch Source: Nostrmo GitHubResearch Source: NostrubeResearch Source: noStrudelResearch Source: noStrudel — NostrApps pageResearch Source: NostterResearch Source: NosturResearch Source: Nostur — NostrApps pageResearch Source: NotedeckResearch Source: Npub.proResearch Source: Npub.worldResearch Source: nsec.appResearch Source: NsiteResearch Source: Nstart.meResearch Source: Nstart.me — NostrApps pageResearch Source: Obsidian Nostr Writer — NostrApps pageResearch Source: OlasResearch Source: Olas — NostrApps pageResearch Source: OpenvibeResearch Source: OracoloResearch Source: Oracolo — NostrApps pageResearch Source: Ostrich WorkResearch Source: P2P BandResearch Source: PazResearch Source: PeridotResearch Source: Peridot — NostrApps pageResearch Source: PhoenixResearch Source: Phoenix — NostrApps pageResearch Source: Plebeian MarketResearch Source: Plebeian Market — NostrApps pageResearch Source: PrimalResearch Source: Primal — NostrApps pageResearch Source: Primal Article Editor / Reads authoringResearch Source: Primal StudioResearch Source: pynostr GitHubResearch Source: python-nostr GitHubResearch Source: Registry of KindsResearch Source: Relay Tools — NostrApps pageResearch Source: rsslayResearch Source: rust-nostr docsResearch Source: rust-nostr GitHubResearch Source: SatelliteResearch Source: SatShootResearch Source: ShakespeareResearch Source: Shakespeare — NostrApps pageResearch Source: ShopstrResearch Source: Shopstr — NostrApps pageResearch Source: SlidestrResearch Source: SnortResearch Source: start.nostr.netResearch Source: StemstrResearch Source: TreasuresResearch Source: WavlakeResearch Source: WikifreediaResearch Source: Wikifreedia — NostrApps pageResearch Source: WikistrResearch Source: Wikistr — NostrApps pageResearch Source: YakiHonne mobile/web app directoryResearch Source: YondarResearch Source: Yondar — NostrApps page
Wallets25 min readCashu token redemption into Lightning wallets, Lightning Address and Bitcoin Connect

Cashu Redeem

Cashu Redeem turns a Cashu token into a Lightning payment path. The useful question is not whether it looks simple, but where the token, mint trust, melt quote, invoice and leftover change actually live.

The quick readCashu Redeem is a focused web app for redeeming Cashu ecash tokens directly to a Lightning destination. The README describes support for Lightning Address and Bitcoin Connect, token validation, error handling and emoji token support. The code shows the important details: it decodes a Cashu token, optionally merges locally stored change from the same mint and unit, loads the mint, estimates the token value and mint fees, asks a wallet provider, Lightning Address or LNURL endpoint for an invoice, asks the mint for a melt quote, and then melts selected proofs into a final invoice. Any leftover proofs are stored in localStorage as change. The app is useful when someone receives a Cashu token but wants sats in a Lightning wallet. It is not a full wallet and it is not risk-free. Cashu tokens are bearer instruments, mints must be trusted to redeem, localStorage can hold spendable change, URL parameters can prefill token and destination, and the project's own README warns that it began as a hack and could contain bugs that lose money. Use it for small amounts, verify the destination, preview melt quotes when you need to understand fees, and clear or move stored change after use.

A redeemer, not a full wallet

Cashu Redeem does one job: it helps a user turn a Cashu ecash token into a Lightning payment. The live app gives the user a field for the Cashu token and either a Lightning destination or a connected wallet. The README describes the product as a simple web application for redeeming Cashu ecash tokens directly to a Lightning wallet via Lightning Address or Bitcoin Connect. That is the correct frame. Cashu Redeem is not trying to be Cashu.me, Minibits, Nutstash or a complete ecash wallet. It is a bridge from a bearer token to a Lightning invoice.

That makes the page useful for a very specific moment. Someone receives a token string, an encoded token or an emoji version of a token and does not want to keep it as ecash. They want the value delivered to a Lightning wallet, Lightning Address or LNURL-pay compatible endpoint. Cashu Redeem gives them a browser surface to paste the token, choose the destination path, request a melt quote and complete the redemption.

The narrowness is good, but it should not be mistaken for safety by itself. Ecash redemption is a money movement. The app touches a token, a mint, a Lightning invoice, local change proofs and possibly a wallet provider. If any of those pieces are misunderstood, a simple looking redeem button can still lose money.

Cashu tokens are bearer instruments

Cashu's own documentation describes ecash as a digital bearer token stored on the user's device, similar to physical cash. That sentence is the starting point for Cashu Redeem. A token string is not just a receipt. It can contain spendable proofs. Anyone who has a valid unspent token can try to redeem it. The privacy and portability benefits come from that bearer model, and so do the handling risks.

Cashu Redeem decodes the token with `getDecodedToken` from `@cashu/cashu-ts` and checks that the token contains proofs and a unit. It then reads the mint URL from the token and loads that mint. The mint matters because the proofs are only useful if the issuing mint recognizes and redeems them. A Cashu token is not a universal Lightning invoice. It is a claim against a particular mint's ecash system.

For a reader, the habit is simple: keep the token private until redemption is complete. Do not paste tokens into random pages. Do not leave token strings in public notes, shared chat history or screenshots. If the token has already been redeemed or stolen, Cashu Redeem cannot make it good. It can only ask the mint and Lightning destination to perform the redemption that the token still permits.

What happens when you paste a token

The validation flow starts by making sure the token input is not empty. Cashu Redeem then decodes the token and verifies that proofs and unit information exist. If the user has the include-change setting enabled, the app merges locally stored change proofs from the same mint and unit into the token proofs before estimating value. That choice can be convenient because it sweeps old leftovers into the next redemption, but it also means local browser state can affect the amount that is melted.

After decoding, the app creates a Cashu wallet object for the mint and calls `loadMint`. It calculates keyset fees with `getFeesForProofs` and estimates the token's satoshi value through helper functions that create a small mint quote and parse the returned invoice. The amount used for the first redemption preview is the estimated value minus keyset fees. This is not a random UI guess. It is derived from the mint's own current quote behavior and the token proofs.

The result is a state where the app knows enough to ask for a Lightning invoice. If a connected wallet provider is present, it asks that provider to make an invoice. If not, it looks for a Lightning Address or LNURL input. Only after it has an invoice does it ask the Cashu mint for a melt quote. That sequence protects the user from pushing a token toward a destination before the destination can actually produce an invoice.

Lightning Address, LNURL or Bitcoin Connect

Cashu Redeem offers two broad destination paths. One path is a connected wallet provider through Bitcoin Connect. The other is a text input for Lightning Address or LNURL. Both are ways to request a Lightning invoice for the amount being redeemed, but they feel different to the user. A connected wallet keeps the destination inside the wallet connection. A Lightning Address or LNURL asks an external pay endpoint to create an invoice.

The Lightning utility code makes that split visible. If the source is a Lightning Address, the app fetches address metadata and calls `requestInvoice` with the satoshi amount. If the source looks like a WebLN provider with `enable` and `makeInvoice`, it enables the provider and calls `makeInvoice`. If the source has LNURL pay fields such as callback, minSendable, maxSendable and metadata, it checks the amount range and calls the callback with the amount in millisatoshis.

This gives users flexibility, but it also gives them more ways to make a mistake. A typo in a Lightning Address can send value to the wrong endpoint or fail. An LNURL endpoint can reject the amount. A connected wallet provider can be unavailable or mis-scoped. Cashu Redeem is a bridge, so both sides of the bridge must be correct: the Cashu token must be valid, and the Lightning destination must create the invoice the user actually wants paid.

The melt quote is the moment to slow down

A Cashu melt quote tells the wallet what the mint will do to pay a Lightning invoice from ecash proofs. Cashu Redeem has a preview setting for this step. When preview melt quotes are enabled, the user sees a modal with the amount to be melted, the fee reserve and the amount available to redeem. The user can accept or reject the quote before the app continues.

The default settings in the code are include change enabled and preview melt quotes disabled. That means the app can move quickly for ordinary use, but a careful user should understand the setting. If you are redeeming a tiny test token, automatic redemption may be fine. If you are redeeming a larger token, a multi-unit token or a token from a mint you do not know well, previewing the quote is the more careful path.

Fees and reserves matter because the number on a token is not always the exact number that reaches the Lightning invoice. The app subtracts keyset fees during estimation and later uses `meltQuote.amount - meltQuote.fee_reserve` when calculating the amount to melt. A reader should expect small differences and should use the quote preview when the exact satoshi result matters.

Why the app asks for a second invoice

The redemption code first creates an invoice to obtain an initial melt quote. When the user accepts, the app calculates the amount that can actually be redeemed after fee reserve, asks for a second invoice for that final amount, creates a new melt quote for the second invoice and then selects the proofs to send. This two-step shape is easy to miss if you only look at the interface.

The second invoice helps line up the final Lightning amount with the amount available after the quote. The app then calls `cashuWallet.send` with the new quote amount plus fee reserve and the token proofs. That produces proofs to keep and proofs to send. The app melts the send proofs with `meltProofsBolt11`, receives any change and then combines keep plus change as final proofs.

This is why Cashu Redeem is more than a paste-and-pay form. It is doing real wallet work: selecting proofs, accounting for fees, paying a Lightning invoice through the mint and keeping leftovers. That work is exactly where bugs can matter. The README's warning that the project could contain bugs that lose money should be read as an honest product boundary, not as a legal decoration.

Change lives in your browser

Cashu redemptions can produce change. Cashu Redeem stores change proofs and mint URLs in localStorage. The change utilities read a `mints` array and a `proofs` array, remove proofs that were used, add new proofs and calculate stored change by mint and unit. The app also has a View Stored Change screen that groups visible change by mint and unit and totals it by currency.

This is convenient because the app can sweep old change into a later redemption when include change is enabled. It is also a sensitive browser-state decision. Proofs are bearer value. If the browser profile is shared, backed up insecurely, synced unexpectedly, compromised by malware or left on a public device, stored change can become exposed. LocalStorage is not a hardware wallet.

After using Cashu Redeem, check stored change. If the app says there is change, either redeem it, move it into a wallet you control or treat that browser profile as holding spendable value. Clearing browser storage can remove access to that change. Leaving it behind can leak value. Both mistakes come from forgetting that a small web app can hold real bearer proofs after the main redemption appears finished.

URL parameters make automation possible

Cashu Redeem can read a token and a Lightning destination from URL parameters. It looks for `token`, and for destination values under `lightning`, `ln` or `to`. It also reads an `autopay` parameter. The code validates input from those parameters and can melt automatically when the conditions match. This is useful for integrations, but it increases the need to inspect links before using them.

A prefilled redemption link can be helpful in a controlled workflow. A service might generate a link that sends a specific token to a specific Lightning Address. A wallet might hand off a token to a redeemer page. A user might bookmark a routine destination. But a link can also hide the destination from a hurried user. If the token and destination are both in the URL, the URL itself contains the money path.

Before opening automated redemption links with meaningful value, read the visible destination and consider disabling automatic behavior by using the normal form flow instead. Autopay is a convenience for small, well-understood amounts. It is not a substitute for knowing which mint issued the token, which Lightning endpoint will receive the invoice and whether quote preview is enabled.

Emoji support is playful but still money

Cashu Redeem includes an emoji decoder. The interface labels it with a joke about the e in ecash standing for emoji, and the component links to an emoji encoder project. The feature is playful, but the decoded result can still be a real Cashu token. Once decoded into the token field, it follows the same redemption path as a normal token string.

That makes emoji tokens a good reminder of Cashu's portability. Ecash can be passed around as text, QR codes, links, images or silly-looking encoded strings. The presentation layer does not change the bearer nature of the value. If the decoded token is valid and unspent, the app can try to redeem it. If someone else has already decoded and redeemed it, the app cannot recover it.

The right habit is to separate fun encoding from value handling. It is fine to enjoy the culture of ecash tokens moving through chats and memes. When you are redeeming, slow down enough to confirm that the decoded token, mint and Lightning destination make sense.

The Cashu trust model does not disappear

Cashu improves privacy by using Chaumian ecash and blind signatures, but every Cashu token still depends on a mint. The mint issued the proofs, knows its own keysets and must be available and willing to melt those proofs into a Lightning payment. Cashu Redeem can load the mint and request quotes, but it cannot make an insolvent, offline or dishonest mint redeem.

That distinction is essential for readers coming from ordinary Lightning wallets. A Lightning invoice is a payment request. A Cashu token is ecash issued by a mint. Redeeming the token into Lightning means asking that mint to pay an invoice. If the mint fails, the redemption fails. If the mint's fees or unit behavior differ from expectation, the amount can differ. If the token was double-spent, the proofs may be rejected.

Use Cashu Redeem with the same caution Cashu's own documentation suggests for new ecash systems. Small amounts are the right default. Trusted mints matter. Tokens from strangers deserve extra caution. A successful melt is satisfying because it turns portable ecash into a Lightning payment, but the trust assumptions do not vanish just because the interface is clean.

Where Nostr enters the story

Cashu Redeem is in the NWC ecosystem map because Bitcoin Connect can provide a wallet connection path that includes Nostr Wallet Connect. The app itself does not publish notes, manage a Nostr profile or run a social client. Its Nostr relevance sits at the payment-connection layer: a user can connect a wallet provider that gives the app a WebLN-style interface for invoice creation.

The important thing is not to overstate that connection. Cashu Redeem's core work is Cashu token redemption. NWC or Bitcoin Connect can be the invoice source, but Lightning Address and LNURL are also first-class paths. A user can redeem without caring about Nostr if they paste a Lightning Address. A Nostr-aware wallet user can redeem through a connected provider. Both flows are legitimate.

That makes Cashu Redeem a useful example of how Nostr can be infrastructure rather than the public product surface. The reader sees a token field and a redemption button. Under the hood, the payment destination may be a wallet connection, a Lightning Address or an LNURL callback. Nostr is valuable when it helps the wallet connection stay permissioned and portable.

What to test before using real value

Start with a tiny token from a mint you already trust. Redeem to your own Lightning Address first. Confirm that the invoice is created, the melt quote appears when preview is enabled, the payment arrives and any change is visible in the stored-change panel. Then clear or move the change so you understand where it lives.

Next, test the connected wallet path. Use Bitcoin Connect with a wallet connection that can make invoices but cannot spend funds. Redeem another tiny token and verify that the destination wallet receives the payment. Then disconnect and confirm the app no longer has that provider available. If your wallet uses NWC behind the provider, know where to revoke that connection.

Finally, test a prefilled link only with dust amounts. Use the `token` and destination parameters, observe what the form does, and decide whether autopay is appropriate for your workflow. Cashu Redeem is useful because it makes redemption fast. The safest way to use it is to learn the slow path first, then decide which shortcuts deserve trust.

Sources worth opening

Open the live app, the repository, the token and Lightning utility files, the change storage code, the tests and the Cashu protocol sources together. Cashu Redeem is easiest to understand when the simple form is read beside the exact melt and change handling.

Back to the Crays Nostr page
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

How to use this page

Find the product surface first.

Search clients, signers, product categories or developer tools when you need a specific app, source file or comparison clue.

AppsThe full Apps route stays open520 pages in this routeProducts, categories, builder notes and signer context.Browse pages
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

Bring something back

Ask, suggest, submit or nominate.

Ask a question, send a source, suggest a fix, submit a project or nominate a public Nostr account. The page stays stable; your contribution gets reviewed beside it.