Kamaankamaan
Free tool · No login

RSS feed generator

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.

Paste your posts as
A JSON array. Keys read: title, url, date, description (aliases like link / excerpt / datePublished also work).
2 items parsed
Output format
Save this as 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.

Do this automatically
Kamaan keeps a clean, per-language feed for every product blog you run, automatically, so you never hand-write feed XML again.
Start free trial30 days free on all plans. No credit card. Publish once, ship every language.
The basics

What an RSS feed is and why a headless blog still needs one

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.

How to use it

Generate a feed in three steps

  1. Set the feed details. Title, site URL, feed URL, and description. These become the channel metadata at the top of the feed.
  2. Paste your posts. As a JSON array straight from your CMS API, as CSV, or as one Title | URL per line. The counter confirms how many parsed.
  3. Pick a format and copy. Choose RSS 2.0, Atom, or JSON Feed, then save the output at your feed URL and link it from your head.
Common mistakes

The feed errors that make readers skip your blog

  • Relative or missing links. Every item needs an absolute URL, or readers cannot open the post.
  • No dates. Without pubDate, readers cannot sort or tell what is new. Always include a publish date.
  • Unescaped characters. A raw ampersand or angle bracket in a title breaks XML parsing. This tool escapes them for you.
  • No self link. A feed should reference its own URL so readers can verify and refresh it. The output includes this.
  • Never advertising the feed. If you do not add the rel="alternate" link tag in your head, auto-discovery fails.
For headless + multilingual blogs

A feed is easy once, a chore forever, and multiplied by every language

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.

FAQ

Frequently asked questions

What is an RSS feed generator?

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.

What is the difference between RSS, Atom, and JSON Feed?

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.

How do I add an RSS feed to a Next.js or Astro blog?

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.

Where do I put the feed file and how do readers find it?

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.

What fields does each post need?

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.

Is my data uploaded anywhere?

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.

Do I need a separate feed per language?

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.

More free tools