A metalsmith plugin to generate an RSS feed for a collection
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.



npm Build Status Code Style: prettier

A metalsmith plugin to generate an RSS feed for a collection.

Just a thin wrapper around the rss module.

Requires metalsmith-collections. Plays nicely with permalinks, more, and excerpts.


const collections = require('metalsmith-collections');
const feed = require('metalsmith-feed');

    (site: {
      title: 'Geocities',
      url: 'http://example.com',
      author: 'Philodemus'
  .use(collections({posts: '*.html'}))
  .use(feed({collection: 'posts'}));


Take a look at the tests for example usage.

  • collection string Required. The name of the configured metalsmith-collection to feed.

  • limit Number Optional. Maximum number of documents to show in the feed. Defaults to 20. Set to false to include all documents.

  • destination string Optional. File path to write the rendered XML feed. Defaults to 'rss.xml'.

  • preprocess function Optional. Map collection entries to RSS items. Some fields (like description and url) have default mappings that support Metalsmith plugin conventions. Many other fields (like title, author, and date) work great without any customization. You can customize any of these fields in preprocess.

        collection: 'posts',
        preprocess: file => ({
          // Make all titles uppercase
          title: file.title.toUpperCase()
    description: ...
    Description defaults to `file.less` from metalsmith-more,
    `file.excerpt` from metalsmith-excerpt, and finally the
    full `file.contents`

url: ... If files have path metadata (perhaps from metalsmith-permalinks) but not url metadata, we'll prefix path with site_url to generate links. */ }) }) );

Remaining options are passed to the [rss](https://github.com/dylang/node-rss) module as `feedOptions`, along with `metadata.site`.

### Multiple Feeds

Have a few collections you'd like to export? Register this plugin once for each:

    foo: 'foo/*.html',
    bar: 'bar/*.html'
    collection: 'foo',
    destination: 'foo-rss.xml'
    collection: 'bar',
    destination: 'bar-rss.xml'