Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/lildude/jekyll-json-feed

A Jekyll plugin to generate a JSON (RSS-like) feed of your Jekyll posts
https://github.com/lildude/jekyll-json-feed

feed jekyll jekyll-plugin json

Last synced: 3 months ago
JSON representation

A Jekyll plugin to generate a JSON (RSS-like) feed of your Jekyll posts

Awesome Lists containing this project

README

        

# Jekyll JSON Feed plugin

A Jekyll plugin to generate a [JSON feed](https://jsonfeed.org/) of your Jekyll posts.

[![Build Status](https://travis-ci.org/lildude/jekyll-json-feed.svg)](https://travis-ci.org/lildude/jekyll-json-feed) [![Gem Version](https://badge.fury.io/rb/jekyll-json-feed.svg)](https://badge.fury.io/rb/jekyll-json-feed)

## Installation

Add this line to your site's Gemfile:

```ruby
gem 'jekyll-json-feed'
```

And then add this line to your site's `_config.yml`:

```yml
plugins:
- jekyll-json-feed
```

⚠️ If you are using Jekyll < 3.5.0 use the `gems` key instead of `plugins`.
## Usage

The plugin will automatically generate a JSON feed at `/feed.json`.

### Optional configuration options

The plugin will automatically use any of the following configuration variables, if they are present in your site's `_config.yml` file.

* `title` or `name` - The title of the site, e.g., "My awesome site"
* `description` - A longer description of what your site is about, e.g., "Where I blog about Jekyll and other awesome things"
* `url` - The URL to your site, e.g., `http://example.com`. If none is provided, the plugin will try to use `site.github.url`.
* `author` - Global author information (see below)

### Optional front matter

The plugin will use the following post metadata, automatically generated by Jekyll, which you can override via a post's YAML front matter:

* `date`
* `title`
* `excerpt`
* `id`
* `tags`

Additionally, the plugin will use the following values, if present in a post's YAML front matter:

* `image` - URL of an image that is representative of the post (can also be passed as `image.path`)
* `banner_image` - URL of an image to use as a banner, like those used on Medium
* `author` - The author of the post, e.g., "Dr. Jekyll". If none is given, feed readers will look to the feed author as defined in `_config.yml`. Like the feed author, this can also be an object or a reference to an author in `_data/authors.yml` (see below).

### Author information

*TL;DR: In most cases, put `author: [your name]` in the document's front matter, for sites with multiple authors. If you need something more complicated, read on.*

There are several ways to convey author-specific information. Author information is found in the following order of priority:

1. An `author` object, in the documents's front matter, e.g.:

```yml
author:
twitter: benbalter
```

2. An `author` object, in the site's `_config.yml`, e.g.:

```yml
author:
twitter: benbalter
```

3. `site.data.authors[author]`, if an author is specified in the document's front matter, and a corresponding key exists in `site.data.authors`. E.g., you have the following in the document's front matter:

```yml
author: benbalter
```

And you have the following in `_data/authors.yml`:

```yml
benbalter:
picture: /img/benbalter.png
twitter: jekyllrb

potus:
picture: /img/potus.png
twitter: whitehouse
```

In the above example, the author `benbalter`'s Twitter handle will be resolved to `@jekyllrb`. This allows you to centralize author information in a single `_data/authors` file for site with many authors that require more than just the author's username.

*Pro-tip: If `authors` is present in the document's front matter as an array (and `author` is not), the plugin will use the first author listed.*

4. An author in the document's front matter (the simplest way), e.g.:

```yml
author: benbalter
```

5. An author in the site's `_config.yml`, e.g.:

```yml
author: benbalter
```

### Meta tags

The plugin exposes a helper tag to expose the appropriate meta tags to support automated discovery of your feed. Simply place `{% json_feed_meta %}` someplace in your template's `` section, to output the necessary metadata.

### SmartyPants

The plugin uses [Jekyll's `smartify` filter](https://jekyllrb.com/docs/templates/) for processing the site title and post titles. This will translate plain ASCII punctuation into "smart" typographic punctuation. This will not render or strip any Markdown you may be using in a title.

## Why JSON Feed?

Great question and I'll leave it to the [spec](https://jsonfeed.org/version/1) to answer:

> The JSON Feed format is a pragmatic syndication format, like RSS and Atom, but with one big difference: it’s JSON instead of XML.
>
> For most developers, JSON is far easier to read and write than XML. Developers may groan at picking up an XML parser, but decoding JSON is often just a single line of code.

## Credit where credit is due

This plugin is heavily inspired by the [Jekyll Feed plugin](https://github.com/jekyll/jekyll-feed) plugin. So much so, that it is a fork with JSON tweaks. Big thanks go to @benbalter for creating the Jekyll Feed plugin, licensing it under the MIT license and making it so easy to create this plugin (it took me an afternoon whilst I was doing other things).

## Contributing

1. Fork it (https://github.com/lildude/jekyll-json-feed/fork)
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request