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.


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
- c. 2000Dave Winer develops OPML as a generic outline format
- OPML 2.0 spec publishedavailable at opml.org; no revision since
- 1 July 2013Google Reader shutdown triggers mass OPML-driven migration
What the format actually carries
xmlUrlthe feed's own addresshtmlUrlthe corresponding websitetype="rss"signals a subscription node- Folder nesting via parent
<outline>elements - What it does NOT carry: read state, per-feed settings, reading history



