The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Migrating from blogdown/Hugo to jekylldown + al-folio

al-folio is the de-facto reference theme for academic sites – publications generated from BibTeX, news, CV, and teaching pages as structured data. Hugo has no equivalent, which is the main reason to move a blogdown site to Jekyll. This vignette walks through that migration with jekylldown, keeping your posts in R Markdown throughout.

al-folio is the vignette’s focus, but migrate_hugo() targets any of the supported themes – theme = "chirpy", "minimal-mistakes" or "minima" work the same way, with pages, navigation, avatar and social profiles placed in each theme’s own convention (Chirpy _tabs/, Minimal Mistakes _pages/ + _data/navigation.yml + the author: sidebar, …). Steps 1, 2 and 4 apply to all of them; step 3 is al-folio-specific.

Before you start

  1. Work on a copy. migrate_hugo() never writes into the source site, but be conservative anyway: leave your production repository untouched until the new site builds and looks right.
  2. Diagnose your toolchain:
jekylldown::check()

A local Ruby/Jekyll is optional for this migration: knitting posts only needs R, and al-folio ships GitHub Actions workflows that build the site remotely. You only need Jekyll (plus bundle_install(), below) for local previews.

Step 1 – convert the site

library(jekylldown)

migrate_hugo(
  from  = "path/to/my-hugo-site",     # blogdown/Hugo site (read-only)
  to    = "path/to/my-new-site",      # created; must not exist yet
  theme = "al-folio",                 # fetched from GitHub (network needed)
  only_referenced = TRUE,             # skip static files nothing links to
  publications = "bib",               # the default; papers.bib from the DOIs (see below)
  theme_color = "red"                 # al-folio accent color (see below)
)

The Hugo config (config.toml/.yaml) is read first and drives the migration. What gets converted automatically:

The report printed at the end lists what is left: posts with remaining shortcodes and content not referenced by the Hugo menu (dead pages, custom layouts/) – review that list before assuming it can be dropped.

Step 2 – review the posts

Knit everything (no Jekyll needed) and read the output:

build_site("path/to/my-new-site", local_jekyll = FALSE)

Things worth checking in _posts/*.md:

Step 3 – adapt the al-folio configuration

migrate_hugo() fills in your identity (name, url, description) but al-folio’s rich _config.yml deserves a pass by hand:

Known al-folio gotchas

Verified with al-folio as of September 2026:

Step 4 – preview locally (optional)

al-folio manages its plugins with Bundler, so install its gems once into jekylldown’s isolated environment with bundle_install("path/to/my-new-site"), then serve:

serve_site("path/to/my-new-site")
# ... edit _source/*.Rmd; saving re-knits and reloads the browser
stop_server("path/to/my-new-site")

After bundle_install(), build_site() and serve_site() automatically use bundle exec jekyll, so the theme’s plugins are found.

Step 5 – deploy on GitHub Pages

  1. Create a repository named youruser.github.io and push the new site to it (including _source/ – it is excluded from the Jekyll build but belongs in version control).
  2. In the repository settings, enable GitHub Pages with GitHub Actions as the source: al-folio’s bundled workflow (.github/workflows/deploy.yml) builds and publishes the site on every push.
  3. Your R workflow from then on: new_post("Title", dir = site), write, build_site(site) (or just knit via build_site(site, local_jekyll = FALSE)), commit, push. No more two-repository setup as with blogdown – the source and the built site live in one repo, built remotely.

Migration checklist

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.