What Zellij is
A versioned Next.js engine that turns a folder of structured content into a complete website.
Zellij is a package. Your site is a folder of YAML and Markdown, plus a Next.js app of about thirty lines that imports the package and gets out of the way.
The name is Moroccan: zellij is mosaic tilework, where elaborate walls are composed from a small fixed set of geometric tiles. The engine works the same way — pages are composed from a fixed vocabulary of sections, styled by themes.
Getting content into it
You do not have to start from an empty folder.
Start from nothing
zel new docs writes a folder that already validates.
Convert what you have
MkDocs and Docusaurus convert into a new folder, never over the original.
Generate it from source
zel context writes the reference an AI agent needs to author one.
What you write
my-product/
├── site.yaml # name, brand, theme, footer
├── menu.yaml # the top bar
├── pages.yaml # pages, each an ordered list of section names
├── sections/ # one file per section
├── assets/
└── 01-guide/
├── _sidebar.yaml # makes this folder a documentation tree
└── *.mdx
Every file is optional. A folder containing nothing but a _sidebar.yaml and
some Markdown builds a complete documentation site, with a name taken from the
folder itself.
What you get
Marketing pages
Nineteen section types, composed per page and reusable across them.
Documentation
Sidebar, breadcrumbs, on-this-page, prev/next, and ⌘K search.
Themes
Fourteen, switchable at runtime, with no component aware of any of them.
A build that checks itself
Broken links, missing files and unknown section types fail the build.
What it is not
Zellij is not a code generator. It does not scaffold a project or emit files into your repository. That distinction is what makes upgrades a version bump instead of a merge — all the rendering logic lives in the package, and it improves without touching your site.
It is also not a general-purpose page builder. The section vocabulary is fixed and deliberately small. If you need a layout that does not exist, the answer is to add a section type to the engine — where every site gets it, and where it is schema-validated and themed like the rest — rather than to hand-write one page.
Where to go next
Read the quickstart if you want something running in ten minutes. Read the content model if you want to understand the shape of the thing first; it is the decision every other part of the engine follows from.
