Lighthouse
April 28, 2025Product

What is OPML?

What is OPML?

OPML, or Outline Processor Markup Language, is an XML-based file format designed for the exchange of outlines between applications. It was created in the year 2000 by Dave Winer as part of his work on outliners.

Outliners are tools used to organize information in a hierarchical, tree-like structure. The original purpose of OPML was to serve as a universal format for these outlining applications to import and export structured lists.

Over time, its most common use has shifted to managing and sharing lists of web feed (RSS, Atom, JSON Feed) subscriptions. This transition happened as the blogosphere grew, and users needed a way to move their subscription lists between different feed readers. During that time, OPML became the de facto standard for exchanging collections of blog and news feed URLs.

Technical specification

OPML is based on XML.The basic structure of an OPML file consists of a single <opml> root element, which contains a <head> and a <body>.

The <head> holds metadata about the document, such as its title, creation date, and owner information.

The <body> element contains one or more <outline> elements, which represent a node in the outline tree and contain text and metadata. These nodes can be organized in a hierarchy, allowing for folders and subfolders within a list.

In the standard spec, the only mandatory attribute of an <outline> is text. However, in the context of feed readers and sharing web feeds, a few more attributes are important:

  • type: Must be set to rss to indicate that the outline is an RSS feed
  • xmlUrl: Is the URL of the RSS feed

Generally the text attribute should be the title of the RSS feed.

The specification also includes additional, optional, attributes to add more metadata from the feed: htmlUrl, description, language, title. The title is an additional attribute because the text can be changed, but the title is defined to be the the feed’s title.
These properties correspond to the respective top-level elements of the RSS feed.

Another optional attribute is category. It’s a comma-separated list representing tags.

Use-cases in the RSS ecosystem

The most important use of OPML in the RSS ecosystem is as an exchange format for feed lists. When users switch between feed readers, they can export their subscriptions as an OPML file from one application and import them into another. This interoperability is possible because OPML supported and understood by most feed readers.

Similarly, it also serves as a backup format. Instead of importing the file in another feed reader, users can keep a local copy in case their chosen feed reader is discontinued or their account data lost.

Another use is the sharing of blog lists. Bloggers and publishers can create OPML files containing curated lists of feeds, which can then be shared with others.

In that sense the OPML files are used as a technical implementation of blogrolls, which makes them easy to import with feed readers.

Besides that, OPML can be used for any other kind of list of links, not just blogs. For example, lists of podcasts, newsletters, or websites.

Limitations and challenges

One of the main challenges with OPML is the differences in implementation in feed readers, since there is no strict standard for interpreting the hierarchy. Some applications treat nested <outline> elements as folders, while others use them to represent tags. Consequently, the organization of feeds may look different when an OPML file is imported into a new reader.

Another limitation is that OPML only supports a few basic attributes for feed metadata, such as title and URLs. It does not natively support icons, update frequency, or other information. While OPML can be extended with custom attributes, they are not widely supported.

Creating OPML files

The easiest way to create OPML files is using the export function of a feed reader, and they usually include all subscribed feeds.

There are also editors specifically designed for creating OPML files. These tools typically provide a graphical interface for adding, removing, and organizing outlines, and then export the result as an OPML file.

Blogroll editors are another option. They tailor their UI to create feed lists, and don’t allow general editing of outlines. Instead, they include additional features like automatic feed finding, showing more feed metadata, merging multiple OPML files, and sharing them with others.

Alternatively, since OPML is a straightforward XML format, files can be created or edited by hand using any text or XML editor.

Conclusion

OPML is the only widely adopted format for exchanging lists of RSS and Atom feeds, despite the fact that its original intent was for a different purpose.

Currently, its biggest use is for moving feed subscriptions from one feed reader to another. But it could be used for so much more.

One big problem with web feeds is their difficulty to discover and find good feeds to subscribe to. OPML could facilitate an ecosystem of people creating lists of topic-specific blogs, websites, and newsletters, and sharing them with others. These lists could be aggregated, which would make it possible to search them.

A thriving ecosystem of people creating blogrolls could be the solution to the discoverability and recommendation problem of web feeds.