Wikidown

Home / Site Templates / Data Driven Templates

Data-Driven Templates

wikidown export-html can render a full site — a landing page with a venue list, a map page with this month's date, membership tiers — from data files and wiki pages, with no front matter in any wiki page.

Deploy the site with the usual pipeline; see Publishing to GitHub Pages.

Data files: site.data

Every .json, .yml, and .yaml file under the wiki's _data/ folder is loaded into site.data, keyed by file name without the extension. Subfolders become nested keys:

File Liquid
_data/site.json site.data.site
_data/team.yml site.data.team
_data/hops/2026-11.json site.data.hops["2026-11"]
{% assign cfg = site.data.site %}
{% assign hop = site.data.hops[cfg.currentHop] %}
<h2>{{ hop.date | date: "%B" }}'s venues</h2>

YAML scalars are typed the way Jekyll types them: unquoted numbers are numbers, so sort orders them numerically, and yes/no are booleans. A file that doesn't parse stops the export with an error that names the file.

site.data.navigation is always the nav tree built from .order. A leftover _data/navigation.yml from Jekyll publishing is ignored, with a warning.

Every other top-level key in _config.yml is also available as site.<key>, as in Jekyll.

Other pages in a template

Each entry in site.pages has url, title, name, path (Venues/Pinebox.md), dir, layout, and content (the rendered HTML). Jekyll's where / first lookup works:

{% assign vp = site.pages | where: "path", "Venues/Pinebox.md" | first %}
<a href="{{ vp.url | relative_url }}">{{ vp.title }}</a>

To show another page's text, use wiki_body instead of content:

{{ "Venues/Pinebox.md" | wiki_body }}
{{ "Venues/Pinebox.md" | wiki_body: "strip_title" }}
{{ "Venues/Pinebox.md" | wiki_title }}

Filters

Fluid supplies standard Liquid filters (where, map, first, date, truncatewords, strip_html, ...). export-html adds the common Jekyll filters (relative_url, absolute_url, markdownify, jsonify, slugify, ...), a numeric sort, and its own wiki_body / wiki_title. Jekyll-only extras such as where_exp and group_by aren't available. The full list, with what each does, is in the Template Reference.

Per-page layouts and the site root

Wiki pages don't choose a layout; _config.yml does:

wikidown:
  root_page: /Home      # also rendered as the site's index.html
  layouts:
    /Home: landing      # _layouts/landing.html
    /Map: map
    /Venues/*: venue    # every page under /Venues

Without root_page, the wiki root's index.html is rendered as before. It gets a page object (page.url is /) plus any values from its front matter. A layout: other than none in that front matter is applied.

Examples

Each example is taken from the Warehouse District Art Hop site (source), and shows the data, the template, and why it's built that way.

For a start-to-finish walkthrough, see Building a Marketing Site. See Customizing the Theme for the default layout and index.html, and Publishing to GitHub Pages for deployment.