Atom is better than RSS, in ways that matter
Posted by frizlab 1 day ago
Comments
Comment by tjansen 1 day ago
In practice, the differences between the syndication formats don't really matter. Today even less than when they were created, as a solution for most of the differences is just a prompt away.
In my humble opinion, JSON feed (https://www.jsonfeed.org/version/1.1/) is the most practical format. By a small margin, but still...
- it's really simple and doesn't use XML
- it doesn't allow stupid things like HTML in titles (which I guarantee >50% of all implementations can't handle correctly)
- JSON Feed allows feeds to have a <favicon> and a (square!) <icon>, which is a very practical thing for readers. You can use the <favicon> in lists of feeds, and the <icon> to present a single feed. Atom has a small square icon and a <logo> which is supposed to use a 2:1 aspect ratio. 2:1 is completely useless. No site has a logo in 2:1. It's also useless for most full-name logos, like 'New York Times'. (RSS is, of course, even worse; it doesn't even recommend an aspect ratio, practically guaranteeing that RSS readers can look bad)
You can see that JSON feed has been designed from a feed consumer's point of view: what does an RSS reader need to make a feed look good? While Atom and RSS have been written from an abstract publisher's point of view, making everything possible and allowing maximum flexibility. Especially RSS, which has shown its flexibility in becoming the de facto format for podcasts. And both Atom and RSS are really old, written at a time when it probably wasn't clear how RSS would eventually be used.
In the end, no matter which format a feed uses, users won't notice any difference (as long as publishers are smart enough to use square images!). So any feed is a win, no matter whether RSS, Atom, or JSON feed.
Comment by chrismorgan 1 day ago
We accept that sentences can have formatting, and headings can have formatting, so why shouldn’t titles? When you look at titles that get used on platforms like YouTube, there’s obviously a desire for formatting. People use Unicode shenanigans to work around the deficit frequently. (And they do so in ways that are mostly only available for the English script, quite inequitable for other scripts.) Even if you were to restrict it to ASCII, people GLEEFULLY abuse capital letters FOR EMPHASIS!!!!1!
Especially once you get to coding topics, titles need to support <code>, which is important semantics.
(My biggest disappointment with Atom is that text constructs are single-type-only. I wish you could provide distinct text and HTML representations, like email does with the multipart/alternative MIME type. In some places where I use <code> in titles, I’d just drop the <code>…</code> wrapping, in other places I’d turn it into `…`.)
I will write a proper article about all this some time soonish, encouraging people to use markup in titles.
Comment by tjansen 1 day ago
1. Because there are things you can obviously not put in a headline. Like a large image, a YouTube video, or a paragraph. Defining an HTML subset would make it somewhat usable. But letting each consumer of the Atom feed decide which subset they support will make such a title look bad on at least those renderers that don't support the same subset. No renderer can allow it completely (<script>...). HTML sanitation/injection becomes a much bigger problem when it's not limited to a text body that can be relatively easily sandboxed.
2. If you allow every feed to define its own font style or even color, that makes a list of posts look like a 2005 MySpace page. :)
It is producing bad UIs. Renderers can't really render it as plain text, as they might lose a part of the meaning. But they also can't really allow it because it might make their output look like trash. In the end, that would force renderers to develop complex heuristics of which elements and styles to allow, which to modify (do your HTML titles support dark mode? accessibility?), and which to filter out.
3. I don't see the practical value of having <code> in a headline. If it shouldn't be rendered in a different way for obvious reasons, and XML is not designed for human consumption, what is it good for? Who is the consumer of the <code> tag? AI?
Comment by chrismorgan 1 day ago
Inferior plain text: Using make and git diff for a simple and powerful test harness
Better plain text: Using `make` and `git diff` for a simple and powerful test harness
Better HTML: Using <code>make</code> and <code>git diff</code> for a simple and powerful test harness
I use the second for the <title> and og:title on my site, and the third in the <h1> and feeds. It will unfortunately be turned into the first by some feed readers, but that’s their problem. (Some feed readers do accept a subset of HTML phrasing content.)
> If it shouldn't be rendered in a different way for obvious reasons
I don’t perceive your obvious reasons.
Comment by tjansen 1 day ago
Comment by chrismorgan 1 day ago
Sounds wonderful. I think you aren’t realising that it’s already easy to abuse this stuff, with uppercase and exotic Unicode letters <https://yaytext.com/> and such. But people don’t abuse it in feeds.
I’m not talking about allowing <font face=Impact style=color:red>, just some relevant semantic HTML elements like <code>, <em> and <kbd>, which are pretty harmless to add, and useful.
Perhaps I should have gone with the MATHEMATICAL MONOSPACE characters for my plain text title. Alas, HN strips them. Demo in https://temp.chrismorgan.info/2026-08-02-titles.html. Doesn’t look any good for me with my specific fonts, would look better for some people.
Comment by gchamonlive 1 day ago
Comment by mcv 1 day ago
Comment by masfuerte 1 day ago
(Not that I want to defend RSS. In early versions valid RSS wasn't necessarily even valid XML. It is very poor.)
Comment by paulddraper 23 hours ago
It should be consistent, or else compromise browsing.
The content has no such situation.
Comment by chrismorgan 8 hours ago
Comment by paulddraper 4 hours ago
I don’t want one title 16pt and another 28pt.
Or one Helvetica and the other Arial.
Comment by jillesvangurp 1 day ago
The issue with RSS of course is that there is a lot of really crappy and ancient code out there that should have died a long time ago written in languages like PHP, Ruby, etc. by people who did not really care about details. Details like having unambiguous time stamps (what do you mean, you don't live in my time zone?), or details like "this text is not encoded in UTF-8 but in my unspecified locale specific ASCII variant" (why?!). Or indeed "this description contains malformed tag soup with some of the tags escaped".
Also, while most modern RSS and Atom parsers are pretty decent, it's not that hard to find feeds that still have parsing issues despite these frameworks giving it their best effort. Part of the reason is that the code that generates these feeds is a lot less well covered by frameworks. Lots of content management systems out there that use some wonky templating, home grown scripts, or other improvised shit to generate their feeds. That always was the biggest problem.
Comment by alehlopeh 23 hours ago
Comment by adrianwaj 1 day ago
Over-polling is also a problem with both formats.
But the Local-First Fediverse is evolving. https://share.gemini.google/NHjiUHtpRTiJ
That's important and will break the walled gardens, and will change money flows I suspect as advertising revenue is more equitably shared with content providers, who themselves can be better paid for content produced and content promised. It's the 'ol centralization <> decentralization swinging back and forth again.
Comment by Matumio 1 day ago
Comment by adrianwaj 14 hours ago
Perhaps humans need their own APIs for others to then mash-up in the way they please?
For example, I think the goal is to merge all entry fields into a local one that manages and monitors output. I should be able to see and record a stream of everything I do online but I can't. That stream, being a representation of me, is what's valuable. Straits of Hormuz on a person-by-person basis.
How many entry fields are there that you use? email, video, social, crypto, HN, chat, apps... the list goes on. There's a lot of duplicated effort there. Why so many?
I think the whole "One device to rule them all" that I mentioned here [1] is about putting a layer around yourself and letting others interface with you on your terms.
[1] https://news.ycombinator.com/item?id=48912226
local-first >> individual first
Comment by inigyou 1 day ago
> Your client does not have permission to get URL /share/d8748f435799 from this server. That’s all we know.
What's this link meant to be about?
Comment by adrianwaj 1 day ago
RSS or Atom - do they indicate whether they are providing a full or partial feed?
What is federated content?
Can the Fediverse be local-first?
Comment by encomiast 1 day ago
Comment by hardwaresofton 1 day ago
Even (especially?) as a person that appreciates Lisp, Lisp losing this fight twice is kind of funny.
Wonder if it’s going to happen an nth time with Guix vs Nix
Comment by eikenberry 1 day ago
Comment by leoc 1 day ago
Comment by 4ndrewl 1 day ago
Comment by leoc 1 day ago
Comment by notpushkin 1 day ago
Comment by humanfromearth9 1 day ago
Comment by notpushkin 1 day ago
Comment by DonHopkins 1 day ago
Comment by chrismorgan 1 day ago
Because essentially all feed readers support both Atom and RSS.
Comment by DonHopkins 1 day ago
After that, I was afraid to ask him to remove me too! I think I finally just moved on to another email address.
There's supposed to be a mailing-list-name-REQUEST email address just for administrative questions like that, but so many people now don't even know or support that, and just send removal requests to the whole list. Instead of complaining about people asking the whole mailing list to be removed, there's a much better passive aggressive strategy:
My favorite instance of emergent mailing list behavior was when a trouble maker named GUMBY created a "PLEASE-REMOVE-ME" mailing list, just for people who sent email to another entire mailing list asking to be removed from it, instead of sending their request to the administrator at mailing-list-name-REQUEST.
Whenever somebody would make that faux-pas, he'd add them to the PLEASE-REMOVE-ME mailing list, and the emergent behavior was that those people would discuss amongst themselves the fact that they really wanted to be removed from the PLEASE-REMOVE-ME mailing list, until they eventually learned that the way to get removed from a mailing list was to simply send email to PLEASE-REMOVE-ME-REQUEST, instead of the entire mailing list.
Worked like a charm!
Comment by ladax72707 1 day ago
Comment by kelnos 1 day ago
Though you might be upset about RSS being used when your reader screws up with it, because some things are difficult to interpret. Of course, you won't know why it screws up, and you'll probably blame the person who wrote the feed, not the format itself.
Comment by chrismorgan 1 day ago
Comment by qznc 1 day ago
It is XML, so not all HTML5 is allowed. You would have to convert your HTML5 to XHTML5. Possible but harder than string-concatenation.
It requires full self links, so you must put your domain name in there as relative links would be an error. When using a static generator, why should I care where the files are published?
My website has valid Atom feeds. Still, it's an annoying format to me.
Comment by talideon 1 day ago
I suspect you've been making your lifeIfe difficult for no good reason.
> why should I care where the files are published?
You don't, but those consuming your feed do. You do it for their benefit.
Comment by inigyou 1 day ago
Comment by chrismorgan 1 day ago
In most environments it’s no harder, and in browsers themselves (which is where half of it is consumed) it’s arguably easier.
Comment by qznc 2 hours ago
Comment by inigyou 1 day ago
Comment by chrismorgan 23 hours ago
When you parse a document or fragment that is in HTML syntax, the DOM representation is of elements in the http://www.w3.org/1999/xhtml namespace.
There is no difference.
Comment by inigyou 20 hours ago
Comment by chrismorgan 17 hours ago
Comment by ksec 1 day ago
Apart from iTunes, as the article said.
It has been 20+ years I do hope someone on HN can now spills the beans as to why.
Comment by konsalexee 1 day ago
I liked thought the article as I never deep dived in the differences
Comment by pauladams 6 hours ago
I get that ATOM is better in terms of being more consistent and the way it handles full content.
Is it true that RSS is simpler, and of you’re not publishing full html articles and other rich content, you don’t need the extra complexity?
Comment by kevincox 4 hours ago
Even the trivial case of trying to include "&" in a title is ambiguous and different clients will handle it differently.
Comment by pauladams 2 hours ago
Comment by pavel_lishin 1 day ago
Comment by chrismorgan 1 day ago
Comment by pauladams 6 hours ago
Comment by robalni 1 day ago
This would give us some kind of leader that shows the way. It would make it easier for developers if people were more focused on fewer standards and there would be a well defined point in time when we would upgrade to the new set of standards.
For those of you who are familiar with RISC-V, it would be like the RVA23 spec: one big collection of things to use that can be targeted and talked about as one thing with one name, rather than everyone having their own collection of extensions that they use.
Comment by vivzkestrel 1 day ago
- what is the best way to store rss data inside postgres
- will you store it as raw xml directly? or will you process it and store it?
- what format will you store it as if stored inside postgres?
- how will you handle updates to the feed? rss doesnt do websocket push as far as i can tell so you have to poll which gives you the entire feed with a few items removed and a few new items added in the best case scenario. how do you diff this for storing?
Comment by Kwpolska 1 day ago
Entries in feeds should have a guid you can use to detect updates/entries you have already seen. RSS readers typically don't delete entries that disappeared from the feed - entries disappear from feeds to limit their size.
You can get live updates to some RSS feeds using WebSub.
Comment by vivzkestrel 1 day ago
- what happens if your processing logic changes 6 months down the line?
- for example today you decide you want to remove all extra spaces and lowercase all titles before storing them
- 6 months down the line you want to revert, what now?
Comment by munch117 1 day ago
But also store derived data. Titles, authors, dates, article texts. You need those for whatever your application does. You don't want your application logic to be working with the raw text.
> how will you handle updates to the feed?
When polling, consider using HTTP HEAD to check for changes before GET.
What you do when an article ID reappears with different content, that up to you. I think readers usually replace the old entry with the new content, silently. But it's not the only option.
Comment by vivzkestrel 1 day ago
Comment by SahAssar 1 day ago
Comment by paulryanrogers 1 day ago
Comment by vivzkestrel 1 day ago
- if you split the rss document into its "items" i am not sure if you can store each item separately inside postgres using that XML data type
- if you store the whole document, you end up with a problem when say the feed partially updates after a few minutes
- one suggestion i hear from r/PostgreSQL is that you store the XML blob somewhere else like hstore or something and somehow index it back to postgres. I wonder how that works conceptually / architecturally speaking
Comment by zaptheimpaler 1 day ago
Comment by paulryanrogers 1 day ago
Comment by setr 1 day ago
You don’t even need to store it in pg itself; stuff it into a cheaper datastore like s3 and just have the locations stored in pg.
The only thing to optimize for is cost & storage. Access/retrieval doesn’t matter for a once in 6 months process.
Also what is this revolting formatting strategy you’ve found?
Comment by inigyou 1 day ago
Comment by inigyou 1 day ago
Comment by mmakeev 1 day ago
Comment by johannes1234321 1 day ago
TIL, I never questioned encoding >
Comment by SOLAR_FIELDS 1 day ago
Comment by DonHopkins 1 day ago
The content of that notorious discussion went on and off and on and off for weeks, giving all the netizens of the RSS community blogosphere terrible headaches, with people's entire blogs disappearing and reappearing every second, until it finally reached a flashing point, when Dave Winer humbly conceded that it wasn't the user's fault for being an idiot, and maybe just maybe there was tiny teeny little design flaw in RSS, and it wasn't actually such a great idea to allow HTML tags in RSS titles.
Comment by noAnswer 1 day ago
Comment by tim-projects 1 day ago
Comment by leephillips 1 day ago
Comment by rhdunn 1 day ago
Comment by leephillips 1 day ago
Comment by superkuh 1 day ago
Comment by chias 1 day ago
Comment by jpease 1 day ago
Comment by thaumasiotes 1 day ago
Try putting a Betamax tape into a VHS VCR and see if you can watch it.
Comment by benj111 1 day ago
Comment by thaumasiotes 1 day ago
An RSS reader that works with atom is the same as a VCR that will play VHS and Betamax cassettes out of the same physical slot, in a world where videocassettes are sold with no indication of which format they've been printed in, and they're all the same shape, and there are no VCRs that can fail to play either format.
> Or your blueray player that plays dvds and CDs....
Which, yes, is a lot like this, but absolutely nothing like VHS vs Betamax.
Comment by superkuh 1 day ago
This is like pointing at the monitor of a desktop computer and saying, "that's the computer". It is effective to communicate with people who aren't interested in computers, but it's also not true and the distinction does have important consequences for behavior. Atom is not RSS even if some feed readers support both and most people don't know what feeds are.
And because of that, and the early popularity and widespread adoption of RSS, the better format (atom) isn't used nearly as much. And calls to increase use of betamax/atom generally went and go unheeded.
Comment by fanf2 22 hours ago
Comment by stymaar 1 day ago
That may have been true 20 years ago, but now that pretty much no-one uses either of them , I'd be surprised if RSS was still meaningfully more widespread than Atom. (Except everything is being called RSS).
https://news.ycombinator.com/item?id=49141336 is the only valid response to your VHS/Betamax comparison, really.
Comment by talideon 1 day ago
I don't know why they persist in still doing that after all these years.
Comment by verisimi 1 day ago
Comment by stymaar 1 day ago
Do you use “RSS” as a protol specifically, or do you use “RSS” as in “any feed no matter the protocol”?
Comment by verisimi 1 day ago
> pretty much no-one uses either of them
Comment by stymaar 1 day ago
Comment by superkuh 17 hours ago
Comment by kelnos 1 day ago
Comment by thaumasiotes 1 day ago
Referring to an atom feed as an "RSS feed" is exactly equivalent to bringing Hydrox cookies to a potluck and hearing someone call them "Oreos".
Comment by LAC-Tech 1 day ago
Comment by thaumasiotes 1 day ago
Comment by LAC-Tech 19 hours ago
Comment by Vinnl 1 day ago
Atom can do < or & in titles, and offer both a summary and the full text.
Some podcast apps (Apple Podcasts) don't support Atom, so then plain RSS is better.
So it doesn't really matter that much.
Comment by throw0101a 1 day ago
Apple Podcasts stopped supporting Atom (sadly) a few years ago:
* https://podcasters.apple.com/4115-technical-updates-for-host...
Not sure why they decided to do so (lack of volume/traffic?).
Comment by chrismorgan 1 day ago
Comment by latexr 1 day ago
https://en.wikipedia.org/wiki/JSON_Feed
Not every programming language I use can output RSS/Atom/XML by default, but pretty much all of them can output JSON natively, no library needed, just fine. The spec is short and easy to understand, to the point it’s little effort to manipulate the feeds, adding to them or consuming them even without a dedicated reader if need be.
To consume other people’s feeds, I mostly don’t care what format they are as long as my reader can understand them. To generate my feeds, I always use JSON. Most of them are for personal use, but even for those which aren’t, I never had any complaints (most feed readers seem to be able to read those just fine).
Comment by mbirth 1 day ago
Comment by rhdunn 1 day ago
There's a draft version of XSLT 4 that Saxon supports which adds more capabilities for working with map and array types.
Comment by tjansen 1 day ago
Seriously, yes, the really old XSLT does not support JSON. But these days it is much easier to find tools that read or write JSON than to find decent XML support.
Comment by latexr 1 day ago
https://stackoverflow.com/a/49011455
That’s not something I care about, though. I don’t mean to imply that JSON feeds are objectively superior to RSS and Atom, I just mean to share what my personal observations are, which might be useful to someone else too.
Comment by BoingBoomTschak 1 day ago