Statac

Arriving from another tool

From Eleventy

What statac import reads from an Eleventy site, and what each part becomes.

What it reads

Eleventy’s In the new site
.eleventy.js, eleventy.config.js, .mjs or .cjs, or a package.json that names @11ty/eleventy among what it needs Tells Statac the site is Eleventy’s, and holds the settings.
Each .md file in the input folder The same place under content/
An .html page A Markdown file holding its HTML
A page in a template language, such as .njk, .liquid, .webc or .11ty.js, or one looping over the old site’s pages Not brought across, and named under “Pages made by templates”. One that only shows such a loop, inside {% raw %}, comes across.
The includes and data folders, node_modules/, the built output, and what .eleventyignore and .gitignore leave out Not read as pages
JSON and YAML in the data folder data/
A folder’s posts.json or posts.11tydata.json, or a page’s post-1.11tydata.json pages. lines in the folder’s own page, as below
What the settings copy with addPassthroughCopy static/, at the address it had
A file beside a page that the page’s writing names Beside the page
A _redirects file Each page’s redirect_from
The built output, _site/ or where the settings’ dir says Read, to check the old addresses

A symbolic link may also lead to a plain folder outside the input folder, as Eleventy read it.

A folder where every page has permalink: false and none has a title holds parts of other pages, such as a post’s comments. Statac leaves it behind, and lists it under “Not converted”. A file with permalink: false anywhere else, or with a title, comes across as a draft.

What Statac reads in the settings

Note:

An Eleventy site’s settings are a program, and Statac runs none of it. It reads the file’s text for the plain forms most sites write, a value in quotes or true or false, and the report notes each thing it took from there and each it assumed.

What Read from Where nothing is found
The folders dir: { input, output, includes, data }, or dir: { input } where the file says const input = "src" once ., _site, _includes and _data
What is copied as it is addPassthroughCopy("..."), or an object of such names
Markdown’s ways breaks: true, linkify: true, html and the plugin markdown-it-attrs, or, where the settings file holds none, a file it fetches by a path, as import x from "./config/markdown.js"
Where an excerpt ends excerpt_separator, which becomes <!--more-->
The writing’s template language markdownTemplateEngine Liquid

The site’s path, pathPrefix, is read too, and written in front of each address the url filter gave: see template tags. The settings give no whole address, so Statac asks for it, and adds the path to an answer that has none: https://example.org gives url: https://example.org/blog. Where the answer is Enter, those links are broken until you add the whole address with its path to statac.yaml.

Everything else the settings do, such as filters, plugins and data made by code, is listed by name under “Settings Statac didn’t read”. Eleventy keeps no title or language: the new site’s title is made from the old folder’s name and its language is en, for you to put right. The timezone is UTC, as Eleventy read a date without an offset.

Front matter

Eleventy’s Statac’s
title, date, tags, draft The same, tags as a list
description summary, where the page has none
updated, modified, lastmod updated
permalink The page’s address, as below
permalink: false draft: true
categories, a list or one name Tags, such as category_linux
A date of Last Modified, Created, git Last Modified or git Created Taken off, and listed
No date, and no day in the file’s name The first day in its path, as in 2026-01-02-post-1/index.md
eleventyNavigation, eleventyComputed and Eleventy’s other words with no equal Fields of your own, each listed
layout Taken off, and counted
templateEngineOverride Taken off, once the writing is read in its language
Front matter in JSON, after ---json Read
Front matter in JavaScript, after ---js Listed: the page comes across without it
A control character in a value Taken out, and counted

posts/2026-10-04-post-1.md becomes content/posts/post-1.md, with a permalink keeping the address Eleventy gave it:

---
title: Post 1
date: 2026-10-04
permalink: /posts/2026-10-04-post-1/
---

Values handed down

posts/posts.json:

{ "layout": "post.njk", "tags": "posts", "author": "Name" }

becomes tags: [posts] on each post and, in content/posts/index.md, a line that hands it down:

pages.author: Name

Tags gather from every level, as Eleventy gathered them. A field Statac keeps for each page, such as title, or one in a folder with no page of its own, is written on each page. Data written as JavaScript, .11tydata.js, is listed.

Template tags

The writing’s template tags are read as Liquid, or as Nunjucks where the settings say.

Eleventy’s Becomes
An address in quotes, single or double, through the url filter alone: {{ "/about/" | url }} The address with the site’s path in front: /blog/about/ where the settings say pathPrefix: "/blog/". A whole address is written as itself. A name not in quotes, as {{ page.url | url }}, or url followed by another filter is left as written, and listed.
raw, highlight and an include The same as from Jekyll
One of the site’s own, such as {% image "photo-1.jpg", "A photo" %} A snippet call by its own name, @image('photo-1.jpg', 'A photo'). One around writing, up to its {% endnote %}, becomes a call that wraps it.

@image here is the old site’s name, not one of Statac’s: its snippet shows nothing until you write it.

What isn’t converted

Where the settings’ Markdown had:

Setting What Statac does
breaks: true Ends each line inside a paragraph with a backslash, A line\. Lists’ own lines, code and HTML are left as they are.
markdown-it-attrs Lists each {.class}
linkify: true Lists each address written bare without www. or http, such as example.org, which Statac doesn’t link
HTML turned off Lists each place HTML is written

Eleventy’s ways

A page’s address is worked out by Eleventy’s rules: its folders and its name, /posts/post-1/, or its folder’s where the file is index.md or named as its folder. A permalink holding template tags is worked out where it uses only page.fileSlug, page.filePathStem, page.date through Liquid’s date filter, the page’s own fields, and the filters slugify and slug: on Post 1, dated 2026-01-02,

permalink: "/{{ page.date | date: '%Y' }}/{{ title | slugify }}/"

becomes

permalink: /2026/post-1/
Eleventy What Statac does
Any other permalink holding template tags Lists it. The page stays at Statac’s own address.
A permalink with no ending, /about, a file of that name to Eleventy Publishes the page at /about/, and lists it
A data file that is a program, such as _data/eleventyComputed.js or posts.11tydata.js, naming permalink Lists it. The pages take the address Eleventy gives a file by its name.
A page a template made, in a folder whose data gives a permalink Lists no old address for it: find where the old site published it
Category pages Finds them in the old built output, or, with none, where a template makes one page for each of collections.categories, as permalink: "categories/{{ category | slugify }}/". Through a filter of the site’s own, they can’t be known.
A package in package.json with katex, mathjax, texmath or markdown-it-math in its name Takes it that the old site set maths

Where next?

Something unclear or wrong? Open an issue on GitHub.