← All Posts

Building a V4V RSS Reader with WebLN

2026-02-09 — lightning, tutorial, v4v, podcasting, webln

What Is Value4Value?

Podcasting 2.0 introduced a way for listeners to send Bitcoin directly to content creators through RSS feeds. The podcast:value tag embeds payment information — Lightning node pubkeys, Lightning Addresses, split percentages — right in the feed XML. No intermediaries, no platforms taking a cut.

The problem: most podcast apps either don't support value tags, or they lock you into their ecosystem. What if you just want to paste a feed URL and send sats?

The Reader

reader.maximumsats.com does exactly that. Paste any RSS or Atom feed URL, and it:

  1. Fetches and parses the feed via a Cloudflare Worker (for CORS)
  2. Detects podcast:value tags at both channel and item level
  3. Shows all value recipients with their names, types, and split percentages
  4. Lets you boost via WebLN with preset amounts (10/100/500/1000 sats) or custom

It handles both recipient types:

Splits are calculated automatically. If a feed has 3 recipients at 60/30/10, a 100-sat boost sends 60/30/10 sats respectively.

How It Works

The entire app is a single Cloudflare Worker serving HTML + JS. No database, no auth, no npm dependencies. The feed proxy runs server-side to bypass CORS, and everything else runs in the browser.

Feed Parsing

RSS and Atom feeds are XML. The podcast:value tag looks like this:

<podcast:value type="lightning" method="keysend">
  <podcast:valueRecipient
    name="Host"
    type="node"
    address="03e7156ae33b0a208d..."
    split="90" />
  <podcast:valueRecipient
    name="Producer"
    type="lnaddress"
    address="producer@example.com"
    split="10" />
</podcast:value>

The reader uses the browser's DOMParser to extract these tags. Channel-level value tags apply to all episodes; item-level tags override for specific episodes.

Payment Flow

For keysend recipients, WebLN's keysend() sends directly to the pubkey. For Lightning Address recipients, the flow is:

  1. Fetch /.well-known/lnurlp/<username> from the recipient's domain
  2. Get the callback URL from the LNURL response
  3. Request an invoice for the exact amount (in millisats)
  4. Pay the invoice via webln.sendPayment()

Each recipient gets their own payment. A boost to 3 recipients is 3 separate Lightning payments.

Try It

Open reader.maximumsats.com and paste a Podcasting 2.0 feed URL. You'll need a WebLN-enabled browser extension (like Alby) to send payments.

Some feeds to try:

Source Code

The reader is open source: github.com/joelklabo/v4v-reader

The entire app is one JavaScript file served from a Cloudflare Worker. Zero hosting cost, zero dependencies, deploys in seconds.

Resources

Found this useful?

Send a tip via Lightning. One click, no account needed.

Tip 100 sats ⚡