All posts

RSS Feeds Explained: What They Are, How They Work, and Why They Still Matter

July 18, 2026 · DevTools

rss
feed
xml
syndication
podcast

You publish articles on your blog, episodes on your podcast, or commits to your changelog, and you want subscribers to hear about each new piece automatically. Email newsletters are one option, but they put a mailbox between you and your reader, and they require opt-in. RSS feeds are the older, simpler alternative: a single XML file at a stable URL that any reader can subscribe to, no email required, no algorithm in between.

This guide explains what an RSS feed actually contains, how to build one, and how to make sure subscribers and podcast directories can find it. When you're ready, the RSS Feed Generator builds a valid RSS 2.0 file from your content.

What RSS actually is

RSS is a family of XML formats for syndicating content. Three flavors still matter:

  • RSS 0.9x / 2.0 — the classic, used by blogs, news sites, and podcast directories.
  • Atom 1.0 — the IETF standard, slightly stricter than RSS 2.0.
  • JSON Feed 1.1 — a newer JSON alternative; same idea, easier to generate from JavaScript.

All three solve the same problem: a single document that lists recent items, each with a title, a link, a publication date, and some body content. A reader fetches the file on a schedule and shows the user anything new.

Before and after: a feed in human form

Here's what a feed looks like once you stop treating it as XML and read it:

Channel: My Engineering Blog
  Link:    https://example.com/blog
  Description: Notes on building reliable systems.
  Last build: 2026-07-18

  Items:
    1. "How we cut p99 latency in half"
       Link:        https://example.com/blog/p99-latency
       Published:   2026-07-15
       Summary:     We profiled, found a lock, replaced it with a sharded map...

    2. "Postgres connection pooling at scale"
       Link:        https://example.com/blog/pg-pooling
       Published:   2026-07-08
       Summary:     Why pgbouncer exists, what it actually does, and...

That's it. A channel has metadata, and a feed is a list of items. The XML form is just a typed envelope around the same idea:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>My Engineering Blog</title>
    <link>https://example.com/blog</link>
    <description>Notes on building reliable systems.</description>
    <item>
      <title>How we cut p99 latency in half</title>
      <link>https://example.com/blog/p99-latency</link>
      <guid isPermaLink="true">https://example.com/blog/p99-latency</guid>
      <pubDate>Tue, 15 Jul 2026 09:00:00 GMT</pubDate>
      <description><![CDATA[We profiled, found a lock...]]></description>
    </item>
  </channel>
</rss>

Step 1: Decide the channel metadata

Every feed begins with a <channel> element containing:

  • <title> — the feed's name. Often your site or section name.
  • <link> — the canonical homepage for the content.
  • <description> — one or two sentences; some readers show this.
  • <language> — optional but recommended; e.g. en-us.
  • <lastBuildDate> — when the feed was last regenerated. Readers use this to decide whether to refetch.

For podcasts, the channel also needs <itunes:author>, <itunes:category>, and a <image> for artwork.

Step 2: Build the items

Each item represents one piece of content. The minimum fields are:

  • <title> — the headline.
  • <link> — the canonical URL of the article or episode.
  • <guid> — a globally unique identifier. Usually the link itself with isPermaLink="true". Crucial: a <guid> must never change for the same item, or readers will treat it as a new post.
  • <pubDate> — when the item was published. RFC 822 format: Tue, 15 Jul 2026 09:00:00 GMT.

Optional but recommended:

  • <description> — short summary or full content (wrapped in <![CDATA[...]]> if it contains HTML).
  • <content:encoded> — full HTML body. Most modern readers prefer this over <description> for full-text rendering.
  • <author> — the byline.
  • <category> — one or more topic tags.
  • <enclosure> — for podcasts, this points to the audio file with its length and MIME type.

Step 3: Host it at a stable URL

Convention says a feed lives at /feed, /rss, /feed.xml, or /rss.xml on your domain. Pick one, never move it, and link to it from your site's <head>:

<link rel="alternate" type="application/rss+xml"
      title="My Engineering Blog"
      href="https://example.com/feed.xml" />

This tiny tag is what feed readers, browser "follow" buttons, and podcast directories use to discover the feed automatically.

Step 4: Validate before publishing

A feed that's syntactically invalid gets silently dropped by most readers. Always validate:

  • The file must be well-formed XML.
  • Dates must be RFC 822.
  • <guid> values must be unique across items and stable across updates.
  • <link> values must be absolute URLs, not relative paths.

The RSS Feed Generator produces output that satisfies these checks; if you're writing a feed by hand or generating it from a custom script, run it through a validator (the W3C feed validator is the canonical one) before pointing subscribers at it.

RSS 2.0 vs Atom 1.0

The two formats are interchangeable in practice. A few differences worth knowing:

  • Atom is stricter: every feed has exactly one author, dates are ISO 8601, links use a rel attribute.
  • RSS 2.0 is more lenient and more widely deployed, especially for podcasts. iTunes / Apple Podcasts requires RSS 2.0 with specific iTunes-namespace extensions.
  • Most readers accept both. Pick RSS 2.0 unless you have a specific reason (an Atom-only reader, an existing Atom pipeline).

Submitting the feed

Once the feed is live and validated, three places actually drive adoption:

  • Feed readers — most auto-discover the feed from the <link rel="alternate"> tag.
  • Podcast directories — Apple Podcasts, Spotify, Pocket Casts, and Overcast each have a manual submission form. They require specific tags inside the feed: <itunes:category>, <itunes:image>, <itunes:author>, <itunes:explicit>, and an <enclosure> for each episode with url, length, and type.
  • Aggregator services — submitting your feed to services like Feedly or RSS App puts it in front of readers who curate their own lists.

For blogs, the discoverability win comes mostly from the <link rel="alternate"> tag and from people sharing the feed URL. For podcasts, the directory submission is non-negotiable — you have to do it explicitly for each directory.

Everything stays in your browser

The RSS Feed Generator runs 100% client-side. You fill in the channel metadata, add items, and the generator builds the XML in real time. Nothing is uploaded.

Next: keep the feed fresh

A feed is only useful if it's updated. Once you've published the file at /feed.xml, the work shifts to regenerating it whenever you publish — typically a step in your build pipeline or a server route that queries your CMS and renders the XML on demand. The RSS Feed Generator is the place to design the structure; your build pipeline is what keeps it alive.

Tools mentioned in this post