Paste a JSON array from your headless CMS, a CSV, or a simple list of posts, and get a valid RSS 2.0, Atom, or JSON Feed. Built for Next.js, Astro, and Nuxt blogs. Nothing leaves your browser.
rss.xml<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Kamaan Blog</title>
<link>https://kamaan.io/blog</link>
<description>Notes on multilingual SEO and headless publishing.</description>
<language>en</language>
<atom:link href="https://kamaan.io/blog/feed.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Fri, 28 Aug 2026 13:25:04 GMT</lastBuildDate>
<item>
<title>Publish once, ship every language</title>
<link>https://kamaan.io/blog/publish-once</link>
<guid isPermaLink="true">https://kamaan.io/blog/publish-once</guid>
<pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
<description>How auto-translation works.</description>
</item>
<item>
<title>Correct hreflang, every time</title>
<link>https://kamaan.io/blog/hreflang</link>
<guid isPermaLink="true">https://kamaan.io/blog/hreflang</guid>
<pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate>
<description>The reciprocal-tag problem, solved.</description>
</item>
</channel>
</rss>Serve this file at your feed URL and link it from your <head> with a <link rel="alternate">. In a Next.js or Astro app, generate it from a route handler so it stays in sync as you publish.
An RSS feed is a machine-readable list of your latest posts. Feed readers, email digests, aggregators, and plenty of automation tools poll it to know when you publish something new. Despite predictions of its death, RSS quietly powers newsletters, podcast distribution, and a huge amount of content automation, and it is often the simplest way to let people and systems follow your blog without an account.
If you run a headless blog on Next.js, Astro, or Nuxt, your content lives behind an API rather than in a CMS that ships a feed for free. That means the feed is on you to generate. The good news is it is just a structured list: give a title, a link, a date, and a description per post, wrap it in the right RSS 2.0, Atom, or JSON Feed envelope, and host it. This tool does the wrapping.
Title | URL per line. The counter confirms how many parsed.Generating a feed from a static list is a five-minute job, this tool proves it. Keeping it live is the real work: the feed has to regenerate every time you publish, and if you run the blog in several languages, each locale really wants its own clean feed so subscribers are not fed posts they cannot read. Wire that up by hand across a growing content calendar and it becomes one more pipeline to babysit.
Kamaan takes that off your plate. Because it already handles publishing and auto-translating your blog into 99+ languages over a REST API, it can keep a correct, per-language feed current as part of the same publish step, no XML by hand, no stale feeds. The tool above is great for a one-off or a prototype. Kamaan is what you graduate to when a feed per language, per product blog, needs to stay right on its own.
It is a tool that turns a list of your blog posts into a valid feed file, RSS 2.0, Atom, or JSON Feed, that readers, email services, and aggregators can subscribe to. Instead of hand-writing XML, you paste your posts (as a JSON array from your CMS, a CSV, or a simple list) and copy out a spec-correct feed you can host at a URL like /rss.xml.
RSS 2.0 is the oldest and most universally supported XML format, and it is the safe default. Atom is a stricter, more modern XML format that some tools prefer. JSON Feed is a newer format that expresses the same thing as JSON instead of XML, which is easier to generate and parse in a JavaScript stack. This tool outputs all three from the same input, so you can pick whichever your subscribers and tools expect.
The clean way is a route that renders the feed at request or build time from your post data, for example a route handler at app/rss.xml in Next.js or an endpoint in Astro, so the feed stays in sync as you publish. This tool is perfect for prototyping that output or generating a one-off static feed: paste your posts, copy the RSS, and drop it in as a static file, then move the same structure into a route once you are ready.
Host the file at a stable URL such as https://yoursite.com/rss.xml, then advertise it from your pages so feed readers can auto-discover it. Add a link tag in your head: a link element with rel="alternate", type="application/rss+xml", and href pointing at the feed. Many readers and browser extensions look for exactly that tag.
At minimum a title and a URL. A publish date and a description or excerpt make the feed far more useful, dates let readers sort and detect new posts, and descriptions give a preview. This tool reads title, url, date, and description (plus common aliases like link, datePublished, and excerpt when you paste JSON), and fills in a sensible current date if one is missing.
No. The entire generator runs in your browser with JavaScript. Your pasted posts never leave the page and nothing is sent to a server. That makes it safe to paste an export from an internal or unpublished CMS while you build your feed.
If you publish the same blog in multiple languages, a per-language feed lets subscribers follow the version they read, and it keeps each feed clean rather than mixing locales. Maintaining one feed per language by hand is tedious. Kamaan, which auto-translates your blog into 99+ languages, can keep each localized feed correct for you as part of publishing, instead of you regenerating XML every time.