Everything you need to know about JSON Feed — what it is, why it exists, how to create one, and how readers like Blogs Are Back support it alongside RSS and Atom.
JSON Feed is a syndication format — just like RSS and Atom — that lets readers subscribe to your blog. The difference? It uses JSON instead of XML.
Created by Brent Simmons and Manton Reece in 2017, JSON Feed was born from a simple observation: most web developers are already fluent in JSON. They parse it, debug it, and generate it every day. XML — especially the RSS flavor of XML with its namespaces, CDATA sections, and date format quirks — is a different story.
JSON Feed doesn't replace RSS. It's an alternative. Many blogs offer both, and most modern feed readers (including Blogs Are Back) support all three formats transparently.
A minimal JSON Feed
{
"version": "https://jsonfeed.org/version/1.1",
"title": "My Blog",
"home_page_url": "https://myblog.com",
"feed_url": "https://myblog.com/feed.json",
"items": [
{
"id": "https://myblog.com/first-post",
"url": "https://myblog.com/first-post",
"title": "Hello, World",
"content_html": "<p>My first post.</p>",
"date_published": "2025-01-15T10:00:00Z"
}
]
}That's it. No XML declarations, no CDATA, no namespace prefixes.
Open a JSON Feed in your browser and you can actually read it. Try that with a raw RSS feed.
No XML escaping, no CDATA sections, no namespace declarations. Just JSON.stringify() and you're done.
RSS has well-documented pitfalls: unescaped ampersands, date format variations, encoding issues. JSON avoids most of them.
Every language has a battle-tested JSON parser. XML parsing libraries are heavier and more varied in behavior.
RSS (XML)
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>My Blog</title>
<link>https://myblog.com</link>
<description>A blog</description>
<item>
<title>Hello & Welcome</title>
<link>https://myblog.com/hello</link>
<guid>https://myblog.com/hello</guid>
<pubDate>Wed, 15 Jan 2025
10:00:00 +0000</pubDate>
<content:encoded><![CDATA[
<p>My first post.</p>
]]></content:encoded>
</item>
</channel>
</rss>JSON Feed
{
"version": "https://jsonfeed.org/
version/1.1",
"title": "My Blog",
"home_page_url": "https://myblog.com",
"items": [
{
"id": "https://myblog.com/hello",
"url": "https://myblog.com/hello",
"title": "Hello & Welcome",
"content_html": "<p>My first
post.</p>",
"date_published":
"2025-01-15T10:00:00Z"
}
]
}Notice the difference? No XML declaration, no namespace prefixes, no CDATA escaping. Ampersands and special characters just work — JSON handles escaping automatically. Dates use ISO 8601, which every language parses natively.
versionrequiredMust be "https://jsonfeed.org/version/1.1"
titlerequiredThe name of your blog
home_page_urlURL of the blog itself (not the feed)
feed_urlURL of this feed (self-referencing)
descriptionWhat your blog is about
iconURL to a large icon (512x512 or larger)
faviconURL to a small icon for the feed
languagePrimary language (e.g. "en", "fr")
itemsrequiredThe posts in your feed (see item fields below)
idrequiredUnique, permanent identifier for the post
urlURL of the post on your blog
titleTitle of the post
content_htmlFull HTML content of the post
content_textPlain text content (alternative to HTML)
summaryShort plain-text summary or excerpt
date_publishedPublication date in RFC 3339 format
date_modifiedLast modified date in RFC 3339 format
imageURL of the main image for the post
authorsArray of author objects with name and url
tagsArray of tag strings
Tip: Provide either content_html or content_text (or both). Including full content gives your readers the best experience — they can read entire posts without leaving their feed reader.
Use content_html to include complete post HTML. Readers prefer to read articles in their feed reader without clicking through.
All URLs — post links, images, feed_url, home_page_url — should be absolute. Relative URLs break when the feed is consumed outside your site.
The id field should never change once a post is published. The permalink URL is a good choice. Changing IDs causes duplicate posts in readers.
Serve your feed with Content-Type: application/feed+json. This helps feed readers auto-detect the format. application/json also works but is less specific.
Many readers still only support RSS/Atom. Offering both formats maximizes your reach. Both can be generated from the same data source.
No — keep your RSS feed and add a JSON Feed alongside it. RSS has decades of ecosystem support. JSON Feed is a complement, not a replacement. Both can be generated from the same data.
Support has grown steadily since 2017. Major readers like NetNewsWire, Feedbin, Inoreader, Blogs Are Back, and many others support it. Some older readers may not, which is why offering both formats is recommended.
Atom is another XML-based format that addressed some of RSS's shortcomings. JSON Feed takes a different approach by abandoning XML entirely. You don't need all three — RSS + JSON Feed covers the widest range of readers.
JSON Feed is a well-documented open specification but not an IETF or W3C standard like Atom (RFC 4287). In practice, this doesn't matter — it's widely implemented and the spec is stable at version 1.1.
Yes. Since it's valid JSON, any JSON validator catches syntax errors. For spec compliance, check that your feed includes the required version, title, and items fields, and that each item has an id.
Whether you offer RSS, JSON Feed, or both — submit your blog to our directory so readers can discover your work.