What is RSS?

RSS (Really Simple Syndication) is an XML-based web feed format that allows users and applications to subscribe to content updates from websites in a standardized, machine-readable way. When a website publishes an RSS feed, subscribers automatically receive new content — such as blog posts, news headlines, podcast episodes, or video updates — without having to manually visit the site.

RSS is one of the oldest and most widely adopted standards on the web. It powers podcast distribution, news aggregation, and content syndication across millions of websites. Despite the rise of social media, RSS remains a foundational technology for the open web.


How RSS Works

The RSS workflow involves three components:

  1. Publisher — A website generates an RSS feed (an XML file) that contains structured metadata about its content: titles, descriptions, links, dates, and more.
  2. Feed — The XML file is hosted at a public URL (e.g., https://example.com/feed.xml). It is updated whenever new content is published.
  3. Subscriber — An RSS reader (also called a feed reader or aggregator) periodically checks the feed URL for new entries and displays them to the user.

This publish-subscribe model means content consumers get updates delivered to them, rather than having to poll individual websites. It's efficient, privacy-respecting (no tracking or algorithmic filtering), and entirely under the user's control.


History of RSS

RSS has a complex history involving competing visions, forked specifications, and a format war that ultimately led to the creation of the Atom syndication format.

Timeline

VersionDateDeveloperNotes
RSS 0.90March 1999Netscape (Guha)Original format, based on RDF. Created for the My Netscape portal.
RSS 0.91July 1999NetscapeSimplified version that removed RDF. Adopted by UserLand Software.
RSS 1.0December 2000RSS-DEV Working GroupReturned to RDF. Used XML namespaces. Not a direct successor to 0.91.
RSS 0.92December 2000Dave Winer / UserLandEvolved from 0.91, added optional elements including <enclosure>.
RSS 2.0September 2002Dave WinerFinal evolution of the 0.9x line. Frozen specification.
RSS 2.0.1July 2003Harvard / RSS Advisory BoardSpec transferred to Harvard under Creative Commons license.

The naming conflict between RSS 1.0 (RDF-based) and RSS 2.0 (non-RDF) caused significant confusion. These are effectively two different formats that share the same acronym. RSS 2.0 became the dominant version, and the specification was frozen — meaning no new features will be added, only clarifications.


RSS 2.0 XML Structure

An RSS 2.0 document is a well-formed XML file with a specific structure. Here is the complete anatomy of an RSS feed:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Example News</title>
    <link>https://www.example.com</link>
    <description>Latest news and articles from Example</description>
    <language>en-us</language>
    <lastBuildDate>Tue, 04 Mar 2026 10:00:00 GMT</lastBuildDate>
    <atom:link href="https://www.example.com/feed.xml"
               rel="self" type="application/rss+xml"/>

    <item>
      <title>Understanding XML Namespaces</title>
      <link>https://www.example.com/xml-namespaces</link>
      <description>A deep dive into how XML namespaces work
      and why they matter for document interchange.</description>
      <pubDate>Tue, 04 Mar 2026 08:30:00 GMT</pubDate>
      <guid isPermaLink="true">https://www.example.com/xml-namespaces</guid>
      <category>XML</category>
    </item>

    <item>
      <title>Getting Started with XSLT</title>
      <link>https://www.example.com/xslt-guide</link>
      <description>Learn how to transform XML documents into
      HTML, text, and other formats using XSLT.</description>
      <pubDate>Mon, 03 Mar 2026 14:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://www.example.com/xslt-guide</guid>
      <category>XSLT</category>
    </item>

  </channel>
</rss>

Required Channel Elements

Every RSS 2.0 feed must contain a <channel> element with these three required child elements:

ElementDescriptionExample
<title>The name of the feed/channel<title>Tech Daily</title>
<link>URL to the corresponding website<link>https://techdaily.com</link>
<description>A phrase or sentence describing the channel<description>Daily technology news</description>

Optional Channel Elements

The following elements are optional but widely used:

ElementDescription
<language>The language the feed is written in (e.g., en-us, fr)
<copyright>Copyright notice for the feed content
<managingEditor>Email address of the editorial contact
<webMaster>Email address of the technical contact
<pubDate>Publication date of the feed content (RFC 822 format)
<lastBuildDate>The last time the feed content was updated
<category>One or more categories the feed belongs to
<generator>The software used to generate the feed
<docs>URL pointing to the RSS specification documentation
<ttl>Time to live — minutes a feed can be cached before refreshing
<image>An image (logo) associated with the feed
<cloud>Enables publish-subscribe (rssCloud) notifications
<skipHours>Hours when aggregators can skip checking the feed
<skipDays>Days when aggregators can skip checking the feed

Item Elements

Each <item> in the feed represents a piece of content. At minimum, an item must contain either a <title> or a <description> (or both). All other elements are optional.

ElementDescription
<title>The headline of the item
<link>URL to the full content
<description>Synopsis or full text of the item (supports HTML)
<author>Email address of the item's author
<category>One or more categories the item belongs to
<comments>URL to a comments page for the item
<enclosure>Attached media file (URL, length in bytes, MIME type)
<guid>A globally unique identifier for the item
<pubDate>When the item was published (RFC 822 format)
<source>The originating RSS feed if the item was aggregated

The Enclosure Element

The <enclosure> element is particularly important because it enabled podcasting. It attaches a media file to an item using three required attributes:

<enclosure
  url="https://example.com/episode-42.mp3"
  length="24986239"
  type="audio/mpeg" />

The url attribute points to the media file, length specifies the file size in bytes, and type is the MIME type. This simple mechanism, introduced in RSS 0.92, became the foundation for the entire podcast industry.


RSS and Podcasting

RSS is the backbone of podcast distribution. When you subscribe to a podcast in Apple Podcasts, Spotify, or any podcast app, you're subscribing to an RSS feed that contains <enclosure> elements pointing to audio files.

Podcast Feed Example

Podcast feeds extend RSS 2.0 with additional namespaces, most notably the iTunes namespace:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:podcast="https://podcastindex.org/namespace/1.0">
  <channel>
    <title>The XML Podcast</title>
    <link>https://example.com/podcast</link>
    <description>Weekly discussions about XML technologies</description>
    <language>en-us</language>
    <itunes:author>XML Files</itunes:author>
    <itunes:category text="Technology" />
    <itunes:image href="https://example.com/podcast-artwork.jpg" />
    <itunes:explicit>false</itunes:explicit>
    <atom:link href="https://example.com/podcast/feed.xml"
               rel="self" type="application/rss+xml" />

    <item>
      <title>Episode 42: The Future of RSS</title>
      <description>We discuss why RSS remains relevant
      in the age of social media algorithms.</description>
      <enclosure url="https://example.com/episodes/ep42.mp3"
                 length="24986239" type="audio/mpeg" />
      <guid isPermaLink="false">ep-42-future-of-rss</guid>
      <pubDate>Mon, 03 Mar 2026 09:00:00 GMT</pubDate>
      <itunes:duration>00:52:14</itunes:duration>
      <itunes:episode>42</itunes:episode>
    </item>
  </channel>
</rss>

Key Podcast Namespace Elements

The Apple Podcasts specification requires the iTunes namespace (xmlns:itunes) and supports elements like:

  • <itunes:author> — The podcast creator's name
  • <itunes:category> — The podcast category (e.g., Technology, Business)
  • <itunes:image> — Podcast artwork (minimum 1400x1400, recommended 3000x3000)
  • <itunes:explicit> — Whether the podcast contains explicit content
  • <itunes:duration> — Episode length in HH:MM:SS format
  • <itunes:episode> — Episode number
  • <itunes:season> — Season number
  • <itunes:type> — Either episodic or serial

The newer Podcasting 2.0 namespace (xmlns:podcast) adds modern features like transcripts, chapters, funding links, and value-for-value payments.


RSS vs. Atom

Atom (RFC 4287) is an alternative syndication format that was developed starting in 2003 to address limitations in RSS. Here's how they compare:

FeatureRSS 2.0Atom 1.0
StandardFrozen spec (Harvard/RSS Advisory Board)IETF standard (RFC 4287)
Content typesPlain text or escaped HTML onlyPlain text, HTML, XHTML, XML, Base64 binary
Namespace supportLimitedFull XML namespace support
InternationalizationFeed-level only via <language>Per-element via xml:lang
Required IDNo (guid is optional)Yes (<id> is required)
Date formatRFC 822 (e.g., Tue, 04 Mar 2026 10:00:00 GMT)RFC 3339/ISO 8601 (e.g., 2026-03-04T10:00:00Z)
AutodiscoveryInformal conventionStandardized <link rel="self">
ExtensibilityVia namespaces (informal)Built-in extensibility model
Podcast supportDominant format (iTunes namespace)Rarely used for podcasts

Atom Feed Example

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Example Blog</title>
  <link href="https://example.com/" />
  <link href="https://example.com/feed.atom" rel="self" />
  <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
  <updated>2026-03-04T10:00:00Z</updated>
  <author>
    <name>John Doe</name>
  </author>

  <entry>
    <title>First Post</title>
    <link href="https://example.com/first-post" />
    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
    <updated>2026-03-04T10:00:00Z</updated>
    <summary>This is the summary of the first post.</summary>
    <content type="html">
      &lt;p&gt;Full HTML content of the post goes here.&lt;/p&gt;
    </content>
  </entry>
</feed>

When to use which: Use RSS 2.0 if you're creating a podcast feed or need broad compatibility with existing feed readers. Use Atom 1.0 if you need precise content typing, robust internationalization, or are building a new syndication system from scratch.


JSON Feed

JSON Feed is a modern alternative to RSS and Atom, released in 2017. It uses JSON instead of XML, making it easier for many developers to work with:

{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Example Blog",
  "home_page_url": "https://example.com/",
  "feed_url": "https://example.com/feed.json",
  "items": [
    {
      "id": "1",
      "title": "First Post",
      "url": "https://example.com/first-post",
      "content_html": "<p>Full content here.</p>",
      "date_published": "2026-03-04T10:00:00Z"
    }
  ]
}

JSON Feed supports pagination (allowing access to older entries), attachments (for podcasts), and authors. It is supported by popular readers including Feedly, NewsBlur, NetNewsWire, and Reeder.


Adding RSS to Your Website

Autodiscovery

To help browsers and feed readers automatically find your RSS feed, add a <link> element to your HTML <head>:

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

For Atom feeds, use type="application/atom+xml". For JSON feeds, use type="application/feed+json".

MIME Types

Serve your feeds with the correct Content-Type header:

FormatMIME Type
RSS 2.0application/rss+xml
RSS 1.0application/rdf+xml
Atomapplication/atom+xml
JSON Feedapplication/feed+json

Best Practices for Feed Publishers

  • Always include a <guid> for each item — this prevents duplicate entries in feed readers when you update titles or URLs
  • Use absolute URLs in all links, images, and enclosures — relative URLs will break in feed readers
  • Provide full content in <description> when possible, not just teasers — readers prefer full content feeds
  • Use RFC 822 dates correctly — e.g., Tue, 04 Mar 2026 10:00:00 GMT
  • Include an <atom:link rel="self"> pointing to the feed's own URL for proper autodiscovery
  • Validate your feed using the W3C Feed Validation Service before publishing
  • Keep item count reasonable — 20-50 items is typical; very large feeds slow down aggregators
  • Encode HTML properly in description elements using CDATA sections or entity encoding

RSS Feed Readers

RSS feed readers (also called aggregators) are applications that subscribe to feeds and present updates in a unified interface. Here are the most popular options:

Web-Based Readers

  • Feedly — The most popular web-based reader with a clean, magazine-style layout. Free tier supports up to 100 feeds. Pro plans from $6/month.
  • Inoreader — Power-user focused with advanced filtering, automation rules, and comprehensive search. Free tier supports 150 feeds.
  • NewsBlur — Open-source reader with a traditional layout. Free for up to 64 sites, $36/year for premium.
  • The Old Reader — Designed to feel like the classic Google Reader experience.
  • FreshRSS — Self-hosted, open-source reader for those who want full control over their data.
  • Miniflux — Minimalist, self-hosted reader written in Go. Focuses on simplicity and speed.

Desktop and Mobile Apps

  • NetNewsWire — Free, open-source reader for macOS and iOS. Fast and native.
  • Reeder — Popular paid reader for macOS and iOS with a refined reading experience.
  • Thunderbird — Mozilla's free email client includes a built-in RSS reader.

RSS Security Considerations

Because RSS feeds are XML documents processed by client applications, they can be vectors for security attacks if not handled carefully:

XML External Entity (XXE) Attacks

XXE is the most significant security risk with RSS feeds. A malicious feed could include external entity declarations that, when processed by a vulnerable XML parser, can:

  • Read sensitive files from the server's filesystem
  • Perform server-side request forgery (SSRF)
  • Cause denial of service via recursive entity expansion (the "billion laughs" attack)

Mitigation: Always disable external entity processing and DTD loading in your XML parser. In most languages, this is a configuration option:

# Python (defusedxml)
import defusedxml.ElementTree as ET
tree = ET.parse('feed.xml')

// JavaScript (avoid xml2js defaults)
// Use a parser with external entities disabled

// PHP
libxml_disable_entity_loader(true);

Cross-Site Scripting (XSS)

RSS feeds may contain HTML in <description> fields. If a reader renders this HTML without sanitization, an attacker could inject malicious JavaScript.

Mitigation: Always sanitize HTML content from feeds before rendering. Strip <script> tags, event handlers, and other dangerous elements.

Feed Injection

If your application dynamically generates RSS feeds from user input (e.g., comments or forum posts), ensure the input is properly escaped to prevent XML injection attacks.


RSS Technical Specifications

RSS Validators

Further Reading