Go to file
Chris Morgan e25915b231 Support and default to generating Atom feeds
This includes several breaking changes, but they’re easy to adjust for.

Atom 1.0 is superior to RSS 2.0 in a number of ways, both technical and
legal, though information from the last decade is hard to find.
http://www.intertwingly.net/wiki/pie/Rss20AndAtom10Compared
has some info which is probably still mostly correct.

How do RSS and Atom compare in terms of implementation support? The
impression I get is that proper Atom support in normal content websites
has been universal for over twelve years, but that support in podcasts
was not quite so good, but getting there, over twelve years ago. I have
no more recent facts or figures; no one talks about this stuff these
days. I remember investigating this stuff back in 2011–2013 and coming
to the same conclusion. At that time, I went with Atom on websites and
RSS in podcasts. Now I’d just go full Atom and hang any podcast tools
that don’t support Atom, because Atom’s semantics truly are much better.

In light of all this, I make the bold recommendation to default to Atom.

Nonetheless, for compatibility for existing users, and for those that
have Opinions, I’ve retained the RSS template, so that you can escape
the breaking change easily.

I personally prefer to give feeds a basename that doesn’t mention “Atom”
or “RSS”, e.g. “feed.xml”. I’ll be doing that myself, as I’ll be using
my own template with more Atom features anyway, like author information,
taxonomies and making the title field HTML.

Some notes about the Atom feed template:

- I went with atom.xml rather than something like feed.atom (the .atom
  file format being registered for this purpose by RFC4287) due to lack
  of confidence that it’ll be served with the right MIME type. .xml is a
  safer default.

- It might be nice to get Zola’s version number into the <generator>
  tag. Not for any particularly good reason, y’know. Just picture it:

    <generator uri="https://www.getzola.org/" version="0.10.0">
	Zola
    </generator>

- I’d like to get taxonomies into the feed, but this requires exposing a
  little more info than is currently exposed. I think it’d require
  `TaxonomyConfig` to preferably have a new member `permalink` added
  (which should be equivalent to something like `config.base_url ~ "/" ~
  taxonomy.slug ~ "/"`), and for the feed to get all the taxonomies
  passed into it (`taxonomies: HashMap<String, TaxonomyTerm>`).
  Then, the template could be like this, inside the entry:

    {% for taxonomy, terms in page.taxonomies %}
        {% for term in terms %}
            <category scheme="{{ taxonomies[taxonomy].permalink }}"
		term="{{ term.slug }}" label="{{ term.name }}" />
	{% endfor %}
    {% endfor %}

Other remarks:

- I have added a date field `extra.updated` to my posts and include that
  in the feed; I’ve observed others with a similar field. I believe this
  should be included as an official field. I’m inclined to add author to
  at least config.toml, too, for feeds.
- We need to have a link from the docs to the source of the built-in
  templates, to help people that wish to alter it.
2020-04-14 17:27:08 +05:30
.github Update PULL_REQUEST_TEMPLATE.md 2019-05-07 07:18:26 -07:00
completions Update completions 2019-08-25 19:15:12 +02:00
components Support and default to generating Atom feeds 2020-04-14 17:27:08 +05:30
docs Support and default to generating Atom feeds 2020-04-14 17:27:08 +05:30
src Update image to 0.23 2020-02-10 20:48:52 +01:00
sublime_syntaxes Update syntect dump files 2020-03-12 21:04:01 +01:00
sublime_themes chmod -x a couple of files that needed it 2020-04-14 17:27:08 +05:30
test_site Support and default to generating Atom feeds 2020-04-14 17:27:08 +05:30
test_site_i18n Support and default to generating Atom feeds 2020-04-14 17:27:08 +05:30
.editorconfig Create new project 2016-12-06 14:51:33 +09:00
.gitignore Optionally do not slugify paths (#875) 2020-02-02 17:48:43 -08:00
.gitmodules Point to https submodule instead of git 2018-11-15 17:12:36 +01:00
azure-pipelines.yml Fix Windows CI 2020-02-03 12:17:20 -08:00
build.rs Use Rust 2018 edition (#885) 2020-02-02 17:48:43 -08:00
Cargo.lock Update deps + fix some misleading doc 2020-04-12 17:21:04 +02:00
Cargo.toml 0.10.2 2020-03-25 15:19:17 +01:00
CHANGELOG.md Support and default to generating Atom feeds 2020-04-14 17:27:08 +05:30
CONTRIBUTING.md Adding GH specific issues/pr templates 2018-11-30 23:16:21 +01:00
Dockerfile Update dockerfile to remove hardcoded version number (#939) 2020-02-02 17:42:43 -08:00
EXAMPLES.md fixes #844 duplicate entries in doc (#845) 2020-02-02 17:47:01 -08:00
is-ehh.svg improve README comparison svgs 2019-04-09 14:36:55 -04:00
is-no.svg improve README comparison svgs 2019-04-09 14:36:55 -04:00
is-yes.svg improve README comparison svgs 2019-04-09 14:36:55 -04:00
LICENSE USe date range for license 2018-01-16 13:39:56 +01:00
netlify.toml Use zola 0.8 for the docs 2019-06-22 13:15:13 +02:00
README.md Add ZEIT Now support 2019-09-30 11:11:25 -04:00
rustfmt.toml rustfmt 2018-10-31 08:18:57 +01:00
snapcraft.yaml Update changelog 2020-02-02 17:45:16 -08:00

zola (né Gutenberg)

Build Status

A fast static site generator in a single binary with everything built-in.

Documentation is available on its site or in the docs/content folder of the repository and the community can use its forum.

Comparisons with other static site generators

Zola Cobalt Hugo Pelican
Single binary yes yes yes no
Language Rust Rust Go Python
Syntax highlighting yes yes yes yes
Sass compilation yes yes yes yes
Assets co-location yes yes yes yes
Multilingual site ehh no yes yes
Image processing yes no yes yes
Sane & powerful template engine yes yes ehh yes
Themes yes no yes yes
Shortcodes yes no yes yes
Internal links yes no yes yes
Link checker yes no no yes
Table of contents yes no yes yes
Automatic header anchors yes no yes yes
Aliases yes no yes yes
Pagination yes no yes yes
Custom taxonomies yes no yes no
Search yes no no yes
Data files yes yes yes no
LiveReload yes no yes yes
Netlify support yes no yes no
ZEIT Now support yes no yes yes
Breadcrumbs yes no no yes
Custom output formats no no yes no

Supported content formats

  • Zola: markdown
  • Cobalt: markdown
  • Hugo: markdown, asciidoc, org-mode
  • Pelican: reStructuredText, markdown, asciidoc, org-mode, whatever-you-want

ehh explanations

Hugo gets ehh for the template engine because while it is probably the most powerful template engine in the list (after Jinja2) it personally drives me insane, to the point of writing my own template engine and static site generator. Yes, this is a bit biased.

Zola gets ehh for multi-language support as it only has a basic support and does not (yet) offer things like i18n in templates.

Pelican notes

Many features of Pelican come from plugins, which might be tricky to use because of a version mismatch or inadequate documentation. Netlify supports Python and Pipenv but you still need to install your dependencies manually.