Create an RSS feed on a Xano endpoint

Why would you want to do that?

Because let's assume you have a blog that you write and deliver from Xano. And why not expose an RSS feed? You have everything for that, right?

I use Brave browser on a daily basis and it actually has a nice little news feed on the blank tabs. That's where I noticed that some of the blogs I visit allow you to 'sub to RSS' and as a result those items appear on your new tab. Extremely convenient.

So I thought why not build it for my very own blog.

And that's what I did. In a super simple endpoint, that just fetches a list of my published posts and then populates the actual XML via a TWIG template:

xml
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>@calycode | blog</title>
    <link>https://blog.calycode.com</link>
    <description>We document and reflect on backend systems, automation, and the intersection of no-code and engineering, aiming to help others see the beauty in clear, practical solutions.</description>
    <atom:link href="https://blog.calycode.com/rss" rel="self" type="application/rss+xml" />
    {% for post in $var.posts %}
      <item>
        <title>{{ post.title }}</title>
        <link>https://blog.calycode.com/posts/{{ post.slug|e('url') }}</link>
        <guid>https://blog.calycode.com/posts/{{ post.slug|e('url') }}</guid>
        <pubDate>{{ post.created_at_secs|date("D, d M Y H:i:s O") }}</pubDate>
        <description><![CDATA[{{ post.summary|default(post.title)|raw }}]]></description>
      </item>
    {% endfor %}
  </channel>
</rss>

Okay, but Xano returns a JSON, how will this work? Or can Xano actually deliver more?

Sure it can. You just slap a HTTP Header function step with the appropriate content type and done! This is a very important method to actually return almost any arbitrary type of response. (This allowed me to also build an over-the-air update flow for an electron app, where the releases lived on Google Cloud Platform, but the electron auto-updater talked to Xano to get the latest version.)

xanoscript
util.set_header {
    value = "Content-Type: application/rss+xml"
    duplicates = "replace"
}

And with that your RSS feed is live. I mean, my RSS feed is live. You can 'follow' it here:

@calycode | blog | RSS

Sidenote, if you want your feed to be truly discoverable, consider putting it into the <head> of your sites. Else it's just a L'Art pour L'Art feature.

If you still can't believe your eyes what did you just do, check the validity of your RSS Feed here: W3C Feed Validator

This is just yet another example how awesome Xano can be if one steps out of the cruel monotonious CRUD-ly world.

Have a good one!


@calycode, we build open, reliable, and automated workflows for Xano that empower teams with clarity, transparency, and control. Our mission: make backend development safe, collaborative, and future-ready, so every team can ship confidently and trust the process.


We have a Chrome Browser Extension for Xano to get you rolling much faster and more reliable Xano systems. If you're curious how @calycode/cli works with Xano features, check out our repo, docs or drop us a message on Discord!


You can also get started with Xano right now, here.