Statac

Arriving from another tool

From Jekyll

What statac import reads from a Jekyll site, and what each part becomes.

What it reads

Jekyll’s In the new site
_config.yml, _config.yaml or _config.toml, at the top Tells Statac the site is Jekyll’s. TOML is read as YAML is.
The folder source names The only place the site is read from
_posts/, at the top or in a folder content/posts/, each post named for the title part of its file’s name
_drafts/ content/posts/, each post with draft: true
A .md, .markdown or .html file with front matter, outside Jekyll’s own folders A page at the same place: about.md as content/about.md
A folder collections names, such as _recipes/ content/recipes/, with draft: true on each page where Jekyll didn’t publish it
A file with no front matter static/, at the same path
YAML and JSON in _data/ data/. Any other file there is listed.
_layouts/, _includes/, _sass/, _plugins/, and files with front matter that aren’t writing, such as a feed template Not converted, and listed once each
The built output, where destination says, or _site/ Read, to check the old addresses

Every page and post becomes a .md file; one written in HTML holds its HTML. A page the templates made, such as an archive of the posts, isn’t brought across, and the report names it.

A home page with writing of its own becomes content/index.md. Otherwise the starter’s stays, naming only the folders of posts that came across.

Settings

Jekyll’s Statac’s
title title
url and baseurl url, the whole address. Where url gives none, it is asked for, and baseurl is added to an answer with no path.
lang or locale language, or en where neither is set
timezone timezone, or none where it isn’t set
paginate posts_per_page. On the home page it sets nothing.
Each later page of the home page, wherever paginate_path put it: Jekyll’s own, /page2/, or /p2/, /page/2/ or /blog/page2/ A page at the top of content/, such as content/page2.md, redirecting to the posts’ page that holds the same posts, such as /posts/page/2/
jekyll-feed among the plugins: or gems: feed_ids_before, the day of the import, and feed_ids_from: jekyll, so feed readers see no old post as new
A setting of your own, such as author A value of your own
markdown, theme and every other setting with no equal Listed
Always date_format, the shorter dates and a new feed_key.

Front matter

Jekyll’s Statac’s
No title The one Jekyll showed, made from the file’s name
No date The day in the file’s name: 2026-10-04-post-1.md becomes post-1.md with date: 2026-10-04
published: false draft: true
last_modified_at updated
toc: true contents: true
description, or else excerpt summary
tags on one line, tags: rust go A list
categories, category Tags, such as category_linux
Another list, such as authors, or Categories with a capital A field of your own, making no tags
permalink, redirect_from, redirect_to The same, as Addresses has them
layout, and a page’s excerpt_separator Taken off
yes true, as Jekyll read it
"1984", "3.10" The same, quotes kept

Jekyll read a date with seconds and no offset, written without quotes, such as 2026-10-04 09:30:00, as UTC whatever the site’s time zone. It is written 2026-10-04T09:30:00Z, the same moment. A date without seconds, or in quotes, gets no Z.

Template tags

Jekyll’s Becomes
{% highlight ruby linenos %} to {% endhighlight %} A fenced code block, ```ruby, with linenos dropped
{% raw %}, {% endraw %} Taken out, inside code too, keeping what they held
{% post_url 2026-10-04-post-1 %}, {% link about.md %} The page’s address, with the site’s path in front: /blog/2026/10/04/post-1.html under /blog. One naming no page is left, and listed.
{{ site.baseurl }}, relative_url, absolute_url The address with the site’s path and no host: {{ "/photo-1.jpg" | relative_url }} under /blog is /blog/photo-1.jpg
{{ site.url }} The site’s whole address, https://example.org/blog, or nothing before a / or another {{
{{ "text" }}, {{ page.title }} The text, or the value of a field of the page’s own front matter, inside code too. One through a filter, or naming anything else, is left, and listed.
{% include note.html text="Note 1" %} @old_note(text='Note 1'), with snippets/old_note.html written to stand for it
The site’s excerpt_separator <!--more-->, where it stands on a line of its own
Any other Left as written, and listed at its line

{{ site.baseurl }} or {{ site.url }} in front of post_url, link, relative_url or absolute_url adds no second path.

In a code block or a code span, a template tag is left as written and listed. Only raw and a template tag holding nothing but the page’s own words are converted there.

What isn’t converted

  • Markdown that Statac reads differently: {: .class}, {:toc}, and <div markdown="1">. Each is left as written, and listed.
  • A feed a template made. Where nothing in the new site stands at its old address, the report lists it. A list’s feed: line can put its feed there.

Jekyll’s ways

Jekyll What Statac does
Where Jekyll published each page Works it out from the settings’ permalink and the page’s own, then keeps it
A page a plugin made for a category or a tag, such as /categories/linux/, /category/linux.html or /tag/rust.html Finds it in the old built output, and sends its readers on to the tag’s page
<pre>, <script>, <style> or <textarea> holding a blank line, or a {% highlight %}, straight after other HTML Puts a blank line before it, so the code stays code
[label]: /address on the line after a footnote, [^1]: A note. Puts a blank line before it, so it stays a link definition and not more of the footnote
Maths Jekyll set maths between $$ and $$ only: see other changes

Where next?

Something unclear or wrong? Open an issue on GitHub.