Nov 13, 2020

Cross posting from a next.js blog to

I like the idea of, and I’ve lazily cross-posted my blog to the site via RSS for a while, but the feed always ended up in the format of [post title] - [link to post], which doesn’t capture the spirt of microblogging.

I reworked the RSS feed in general when updating this site to next.js, but I thought I'd take a stab at getting crossposting working too.

Since I couldn’t find much in their documentation on what parameters were used to construct the feed from an RSS feed, I found users who were cross posting, looked at their feeds, and then tested out a couple posts to see how they showed up on the timeline.


  1. It's much easier to use a JSON feed. This is perhaps not surprising since Manton Reece drafted the spec and created
  2. Microblogging is strongly against using titles for posts.

I ended up taking the same loop my index page uses (gets every single markdown post, but then returns the latest ten) and running it through this function:

1import siteConfig from "../data/config.json"; 2var md = require("markdown-it")(); 3 4const makeJsonFeed = (posts) => { 5 const feed = { 6 feed_url: siteConfig.jsonURL, 7 title: siteConfig.description, 8 home_page_url: siteConfig.siteUrl, 9 author: { 10 url: siteConfig.siteUrl, 11 name:, 12 }, 13 }; 14 const items = => { 15 return { 16 author: { 17 url: siteConfig.siteUrl, 18 name:, 19 }, 20 id: `${siteConfig.siteURL}${post.slug}`, 21 url: `${siteConfig.siteURL}${post.slug}`, 22 date_published:, 23 content_html: md.render(post.markdownBody), 24 }; 25 }); 26 feed.items = items; 27 28 return JSON.stringify(feed); 29}; 30 31export default makeJsonFeed;

And on the index route, I use it like this:

1const jsonFeedObj = makeJsonFeed(postsToUse); 2fs.writeFileSync("./public/rss/feed.json", jsonFeedObj);

While I do have titles on most of my posts, they are optional, and I chose to leave them off the JSON feed. If they are added, goes back to the [post title] - [link to post] I was trying to get away from!

You can see the result at my timeline or in the JSON feed.

Got something to say?


Back to top