

OPML Is Underrated
source link: https://kmaasrud.com/blog/opml-is-underrated.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

kmaasrud
OPML is underrated
As a response to the general enshittification of major platforms, I would say we are seeing a resurgence of the old web’s ethos, with personal blogs gaining traction and the concept of the small web on the rise. That might be colored by the digital communities I hang around in (which are mostly dominated by programmers) but it does at least empirically feel like a trend1. That brings along with it a new interest in open web standards. Among them is RSS2, which both I, and I think a lot others, have increasingly integrated into our digital routines to keep track of posts from people and sources we’re following. RSS aligns perfectly with the movement towards more personalized and controlled content consumption. Unlike the algorithm-driven feeds of other platforms — which often prioritize engagement over relevance or quality — RSS allows me to curate my own information stream. This feels important to me, as it gives me a level of autonomy over the content that shapes my views and knowledge, as opposed to handing that power over to advertisers.
There is an issue, though. RSS feeds can be a bit clunky to manage and keep track of. Their decentralized nature also makes discoverability an issue. Enter OPML, which is an outliner format that is most commonly used to store a list of feed subscriptions. I promise you; having a single file that stores all the feeds you’re interested in is a gamechanger, as it makes it significantly easier to organize, migrate, and share those feeds across different platforms and devices. Here’s an example:
<?xml version="1.0" encoding="utf-8"?>
<opml version="2.0">
<head>
<title>A list of feeds I follow</title>
</head>
<body>
<outline text="My favorite blog" xmlUrl="https://a-cool-blog.tld/blog/feed.xml" type="rss"
htmlUrl="https://a-cool-blog.tld/blog" description="You can also add a description" />
<!-- more outline elements with feeds... -->
</body>
</opml>
Each outline item must have the type rss
(that goes for
both RSS and Atom feeds) and must include the xmlUrl
attribute. Optionally, you can specify some more attributes, like adding
a title with text
, a description with
description
and a link to the blog front page with
htmlUrl
— that added metadata can be very useful. Yes, it
is XML-based, which I admit isn’t exactly the easiest format to work
with, but it has a few advantages, which we’ll get back to.
With OPML, you don’t need separate applications or services to categorize feeds. Categorization can be achieved within a single OPML file through its outlining capabilities or by managing multiple OPML files, each dedicated to a different category or use-case. It is a very viable workflow to have one OPML file for your YouTube subscriptions, another for your favorite Twitter/X and Mastodon users, one more for news sites, and yet another for personal blogs — the world’s your oyster. However, there aren’t many application that support nested OPML outlines or categorizing based on different files, sadly, but there should be! This is a call to action, developers: Perfect side-project!
Beyond personal convenience, OPML has the potential to better the ecosystem of the small web. By not only sharing an RSS feed on your personal website, but also your list of subscribed feeds, we’re effectively creating a recommendation system that is based on concious curation, not statistical metrics. Your OPML file is now called a blogroll, and you officially get to call yourself a 90s web developer. Jokes aside, I believe the simple fact that there is a known person behind each recommendation is advantageous. Yes, this might promote smaller digital social circles, but I personally think the transparency of a known source is the best way to combat filter bubbles. That part is a whole sociological discussion in itself, so if you would like to discuss it further, I would love chatting about it on my mailing list.
Now, getting back to the fact that OPML is XML-based; I’d like to highlight an often-overlooked feature of this: The ability to use an XSL stylesheet to display the OPML file rendered through a HTML template when loaded in a browser. With this, you can add a short introduction and guide to the format, making the blogroll more accessible to those unfamiliar with it. It also opens the possibility to showcase each feed with added context or descriptions.
Here is an example XSL stylesheet you can use:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/opml">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>
<xsl:value-of select="head/title"/>
</title>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<style> /* Insert CSS here */ </style>
</head>
<body>
<p>
This is a list of blogs and news sources I follow. The page
is itself an <a href="http://opml.org/">OPML</a> file, which
means you can copy the link into your RSS reader to
subscribe to all the feeds listed below.
</p>
<ul>
<xsl:apply-templates select="body/outline"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="outline" xmlns="http://www.w3.org/1999/xhtml">
<xsl:choose>
<xsl:when test="@type">
<xsl:choose>
<xsl:when test="@xmlUrl">
<li>
<strong>
<a href="{@htmlUrl}"><xsl:value-of select="@text"/></a>
(<a class="feed" href="{@xmlUrl}">feed</a>)
</strong>
<xsl:choose>
<xsl:when test="@description != ''">
<br/><xsl:value-of select="@description"/>
</xsl:when>
</xsl:choose>
</li>
</xsl:when>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
You can link to the stylesheet in your OPML file by adding
<?xml-stylesheet type="text/xsl" href="path/to/stylesheet.xsl"?>
at the top. I actually do this on my own blogroll, so check
that out if you want some inspiration.
While we’re all getting a bit fed up with the big platforms, OPML is like a breath of fresh air from the old web days. It’s all about making life easier when managing feeds, sharing cool finds, and stumbling upon new stuff. So I encourage you to create your own blogroll, slap it on your website, and share what you’re into. It’s a simple move, but it could spark some real connections and bring back a bit of that community vibe we miss.
Please reach out to me if you have some hard time-series statistics on the number of people with active personal websites.↩︎
Like most people, I’ll be using RSS to refer to both RSS and Atom. You can read more about the differences between the two here.↩︎
home · src · feed · wiki · blogroll · inbox
Here are some posts from sites I follow
crates.io: API status code changes
Cargo and crates.io were developed in the rush leading up to the Rust 1.0 release to fill the needs for a tool to manage dependencies and a registry that people could use to share code. This rapid work resulted in these tools being connected with an API t…
via Rust Blog February 6, 2024
SourceHut network outage post-mortem
It’s been a busy couple of weeks here at SourceHut. At the time of writing, we have restored SourceHut to full service following an unprecedented 170 hour outage, and while we still have numerous kinks to sort out following an unscheduled emergency migration…
via Blogs on Sourcehut January 19, 2024
When hope and gloom unite
This is the Matrix and I am Neo. Not because I am the One — I'm not. The reason I am Neo is because I really can fly, I really can stop bullets, I really can download knowledge to my brain. The reader might expect that I justify the above but instead I…
via nutcroft January 16, 2024
Recommend
-
38
In all the chatter around architecture and design patterns when building or upgrading a software system, the fundamental programming paradigms are becoming second fiddle. To preempt any impediments in execution and long-t...
-
30
Side-mounted fingerprint sensors are completely underrated After trying it on the side, I can’t go back By...
-
56
Java Enums - one of the underrated features of Java I remember when I was first...
-
40
A curated list of awesome libraries source: delphinmedia
-
10
When I started working with Kubernetes and Infrastructure as Code, I quickly found out that I needed a secrets management solution, but when I googled around there didn’t seem to be a solid consensus on a best practice app...
-
9
Benefits of using throwing functions (try) - Swift's most underrated feature? Benefits of using throwing functions (try) - Swift's most underrated feature? June 16th, 2020 I've always found throw...
-
8
Drop-Shadow: The Underrated CSS Filter Tue Aug 04 2020 This article was updated on 13 August 2020 to include ad...
-
10
Building a Large Scale Distributed Outline Renderer for OPML Apr 23, 2002 Building a Large Scale Distributed Outline Renderer for OPML Last updated: 6/5/2002; 8:34:17 AM
-
10
[Golang] XML Parsing Example (6) - Parse OPML Concisely February 26, 2015 The previo...
-
3
[Golang] XML Parsing Example (5)Based on previous examples, this post shows how to parse OPML file. The following OPML example comes from my web f...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK