The XML Nobody Replaced

OPML โ€” Outline Processor Markup Language โ€” was designed by Dave Winer around 2000 as a generic format for hierarchical outlines. Its adoption as the standard container for RSS subscription lists was largely accidental: Winer's own aggregator tools supported it early, feed readers followed, and by the time Google Reader arrived the format had enough momentum that every serious client treated OPML import and export as a basic expectation.

The structure is straightforward XML. A <body> element holds a tree of <outline> nodes; each subscription carries a type="rss" attribute alongside xmlUrl (the feed address) and htmlUrl (the site's homepage). Folders become parent <outline> elements with child nodes nested inside them. The OPML 2.0 specification, maintained by Winer, runs to a few pages and has not required revision in years โ€” because the core use case is simple enough that the format simply works.

Feed reader export dialog on a monitor screen showing OPML file download prompt, adult hand on mouse
Moving between readers is a file transfer, not a migration. OPML carries the URLs; read state, starred items and folders mostly stay behind.Photo: SHVETS production / Pexels
Terminal window on a dark monitor showing a raw Atom feed in XML, angle brackets and namespaces visible, person's hands on keyboard
A feed is a text file sitting on a server. Between the publisher and the reader there is a fetch, and nothing else.Photo: Tima Miroshnichenko / Pexels

What kept OPML central is not technical sophistication but universal adoption. Feedly, Inoreader, NewsBlur, NetNewsWire, and virtually every other feed reader alive today accepts an OPML file for bulk import and exports one on request. When Google Reader shut down on 1 July 2013, the mass migration that followed ran almost entirely on OPML: readers exported their subscription lists before the lights went out, then imported them into whichever replacement they chose. The format's longevity owes less to its elegance than to that collective muscle memory and the absence of anything that solved the problem better.

The weaknesses are real. OPML carries no subscription metadata beyond the feed URL and a display title โ€” no read/unread state, no per-feed settings, no indication of which items a user has seen. Moving between readers loses all reading history. The format also has no formal standardisation body; governance sits entirely with Winer's personal publication of the spec, which suits continuity but makes the ecosystem dependent on a single maintainer's goodwill and attention.

Attempts to extend or replace OPML have gone nowhere. The IndieWeb community has discussed richer portability formats; the Podcasting 2.0 namespace introduced its own OPML-adjacent structure for podcast subscription sharing. Neither displaced the original. Two decades in, the file that moves a reading life from one reader to another remains a lightly specified XML document that was never really designed for the job it now defines.

From the record

Chronology

  1. c. 2000Dave Winer develops OPML as a generic outline format
  2. OPML 2.0 spec publishedavailable at opml.org; no revision since
  3. 1 July 2013Google Reader shutdown triggers mass OPML-driven migration

What the format actually carries

  • xmlUrlthe feed's own address
  • htmlUrlthe corresponding website
  • type="rss"signals a subscription node
  • Folder nesting via parent <outline> elements
  • What it does NOT carry: read state, per-feed settings, reading history