# gatsby-plugin-feed

> Creates an RSS feed for your Gatsby site.

Latest version **5.16.0** (published 2026-01-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install gatsby-plugin-feed
pnpm add gatsby-plugin-feed
yarn add gatsby-plugin-feed
bun add gatsby-plugin-feed
```

## Health

**Score 45/100 (D)** — status: stable.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 5.16.0 |
| Published | 2026-01-26 |
| First published | 2017-06-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=18.0.0 <26 |
| Dependencies | 6 |
| Unpacked size | 59.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Nicholas Young |
| Maintainers | pieh, kathmbeck, serhalp-netlify, mlgualtieri-gatsby, fk, tylerbarnes, daniellewgatsby |
| Keywords | atom, feed, gatsby, gatsby-plugin, rss |

## Links

- npm: https://www.npmjs.com/package/gatsby-plugin-feed
- Repository: https://github.com/gatsbyjs/gatsby
- Homepage: https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-feed#readme
- Issues: https://github.com/gatsbyjs/gatsby/issues
- npm.io page: https://npm.io/package/gatsby-plugin-feed

## Dependencies (6)

- [rss](https://npm.io/package/rss.md) ^1.2.2
- [fs-extra](https://npm.io/package/fs-extra.md) ^11.2.0
- [common-tags](https://npm.io/package/common-tags.md) ^1.8.2
- [lodash.merge](https://npm.io/package/lodash.merge.md) ^4.6.2
- [@babel/runtime](https://npm.io/package/@babel/runtime.md) ^7.20.13
- [gatsby-plugin-utils](https://npm.io/package/gatsby-plugin-utils.md) ^4.16.0

## Recent versions

- 5.16.0 (latest) — 2026-01-26
- 5.17.0-next.0 (next) — 2025-11-27
- 5.18.0-react19.1 (react19) — 2025-11-26
- 5.13.0-alpha-alt-image-cdn.44 (alt-image-cdn) — 2023-11-03
- 5.9.0-image-cdn-configurable.4 (image-cdn-configurable) — 2023-04-11
- 3.15.0 (latest-v3) — 2022-12-07
- 4.25.0 (latest-v4) — 2022-12-07
- 5.0.0-alpha-drupal-proxyurl.14 (drupal-proxyurl) — 2022-11-22
- 4.24.1-alpha-wordpress-image-err.27 (wordpress-image-err) — 2022-11-09
- 4.14.0-alpha-transformer-json.26 (alpha-transformer-json) — 2022-10-12
- 5.0.0-alpha-v5.d20221012t101120.57 (alpha-v5) — 2022-10-12
- 4.25.0-alpha-image-cdn-pathprefix.48 (image-cdn-pathprefix) — 2022-10-07
- 4.23.0-alpha-image-cdn-enc.40 (image-cdn-enc) — 2022-09-16
- 4.23.0-alpha-a5-peer.70 (alpha-a5-peer) — 2022-09-14
- 4.23.0-alpha-preview-gh-api.26 (preview-gh-api) — 2022-09-08
- … 512 more at https://npm.io/package/gatsby-plugin-feed/versions

## README

# gatsby-plugin-feed

Create an RSS feed (or multiple feeds) for your Gatsby site. **Please note**: This plugin only generates the `xml` file(s) when run in `production` mode! To test your feed, run: `gatsby build && gatsby serve`.

## Installation

```shell
npm install gatsby-plugin-feed
```

## Usage

`gatsby-plugin-feed` uses the [rss][rss] package to generate the RSS feed. We recommend using the [`siteMetadata`](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-config/#sitemetadata) information inside your `gatsby-config` to define the `title`, `description`, and `site_url` of the RSS feed. Those keys directly get passed to the [rss feedOptions][feedOptions].

```js:title=gatsby-config.js
module.exports = {
  siteMetadata: {
    title: `Your site title`,
    description: `Your site desccription`,
    site_url: `https://your-site-url.com`,
  }
}
```

Afterwards, you should configure `gatsby-plugin-feed` inside your `gatsby-config` like so (this example assumes the site uses [Markdown pages](https://www.gatsbyjs.com/docs/how-to/routing/adding-markdown-pages/)):

```js:title=gatsby-config.js
module.exports = {
  siteMetadata: {
    title: `Your site title`,
    description: `Your site desccription`,
    site_url: `https://your-site-url.com`,
  },
  plugins: [
    {
      resolve: `gatsby-plugin-feed`,
      options: {
        feeds: [
          {
            serialize: ({ query: { site, allMarkdownRemark } }) => {
              return allMarkdownRemark.nodes.map(node => {
                return Object.assign({}, node.frontmatter, {
                  description: node.excerpt,
                  date: node.frontmatter.date,
                  url: site.siteMetadata.siteUrl + node.fields.slug,
                  guid: site.siteMetadata.siteUrl + node.fields.slug,
                  custom_elements: [{ "content:encoded": node.html }],
                })
              })
            },
            query: `
              {
                allMarkdownRemark(
                  sort: { order: DESC, fields: [frontmatter___date] },
                ) {
                  nodes {
                    excerpt
                    html
                    fields {
                      slug
                    }
                    frontmatter {
                      title
                      date
                    }
                  }
                }
              }
            `,
            output: "/rss.xml",
            title: "Your Site's RSS Feed",
          },
        ],
      },
    },
  ],
}
```

`gatsby-plugin-feed` accepts two top-level plugin options:

- `query` (optional): A GraphQL query to fetch the `title`, `description`, and `site_url`. By default, the plugin queries for `siteMetadata`.
- `feeds` (required): One or multiple RSS feeds you want to define.

`feeds` itself has these required keys:

- `title`: Title of the RSS feed
- `output`: Output location of the `xml` file
- `serialize`: You get access to the GraphQL query inside the top-level `query` key and inside `feeds.query`. You have to return an array of objects containing keys of [rss `itemOptions`][itemOptions]
- `query`: GraphQL query to get contents for RSS items

**Need more help?** Check out the documentation [Adding an RSS Feed](https://www.gatsbyjs.com/docs/how-to/adding-common-features/adding-an-rss-feed/).

### Additional options

As mentioned above, `gatsby-plugin-feed` accepts optional additions.

`feeds` has these additional options:

- `match`: Configuration, indicating which pages will have feed reference included. The accepted types of `match` are `string` or `undefined`. By default, when `match` is not configured, all pages will have feed reference inserted. If `string` is provided, it will be used to build a RegExp and then to test whether `pathname` of current page satisfied this regular expression. Only pages that satisfied this rule will have feed reference included.
- `link`: Configuration that will override the default generated rss link from `output`.

All additional options are passed through to the [`feedOptions` section of the `rss` package][feedOptions]. Thus you could write something like this:

```js:title=gatsby-config.js
module.exports = {
  siteMetadata: {/* siteMetadata contents */},
  plugins: [
    {
      resolve: `gatsby-plugin-feed`,
      options: {
        feeds: [
          {
            serialize: ({ query: { site, allMarkdownRemark } }) => {
              /* contents go here */
            },
            query: `/* query goes here */`,
            output: "/rss.xml",
            title: "Your Site's RSS Feed",
            // Optional configuration specific for plugin:
            match: "^/blog/",
            link: "https://feeds.feedburner.com/gatsby/blog",
            // Optional configuration passed through to itemOptions
            custom_namespaces: {
              media: 'http://search.yahoo.com/mrss/',
            },
            language: `en-US`,
          },
        ],
      },
    },
  ],
}
```

The `serialize` function can return all keys of the [rss `itemOptions`][itemOptions] setup.

[rss]: https://www.npmjs.com/package/rss
[feedOptions]: https://www.npmjs.com/package/rss#feedoptions
[itemOptions]: https://www.npmjs.com/package/rss#itemoptions

---
_Source: https://npm.io/package/gatsby-plugin-feed · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
