Skip to content
Get started

zel

One binary. Everything you do to a Zellij site, you do with it.

zel is the interface to Zellij. Creating a content folder, converting one from another tool, checking it, running it, building it and putting it online are all subcommands of the same binary.

It is a native executable with no Node dependency. The commands that describe the content model read a schema compiled into the binary. The commands that build a site run the engine in a container, so nothing on your machine needs npm, a Node version, or a lockfile.

Installing

Binaries are published on the repository's releases page — Linux, macOS and Windows, x86-64 and arm64, each with a .sha256 beside it.

terminal
curl -fsSL https://raw.githubusercontent.com/mylife-inc/releases/main/zellij/install.sh | sh

Or download the archive for your platform, verify it against its .sha256, and put zel on your PATH. See the Quickstart for the detail.

What it does

Write

Create a content folder, or a page, or one section — with the fields already filled in. Ask what any section type takes.

Convert

Read an existing MkDocs or Docusaurus tree and write the Zellij equivalent beside it.

Check and run

Validate the folder, and serve it locally while you write.

Ship

Produce a static site or a container image, and put either one online.

The whole surface

CommandStatus
zel newA content folder, a section, a page, a guide, a projectAvailable
zel explainWhat a section type takesAvailable
zel listSection types, themes, formats, targetsAvailable
zel contextThe whole content model as one file, for an AI agentAvailable
zel detectWhat tool a folder was written forAvailable
zel convertThat folder, as Zellij contentAvailable
zel migratedetect, convert and check in one stepAvailable
zel checkValidate a content folderAvailable
zel fmtCanonical formatting for the YAMLPlanned
zel devDevelopment serverAvailable
zel serveServe what build producedPlanned
zel buildA static site, or a container imageAvailable
zel deployBuild and put it onlinePlanned
zel imageBuild, run and push container imagesAvailable
zel ciWrite a pipeline that does all of it on pushAvailable
zel publishcheck, build and deploy in one stepPlanned
zel shipSomebody else's docs to a published site, in one linePlanned
zel doctorWhat is installed, what is missingAvailable

How a command finds your content

Every command that reads or writes content takes an optional directory:

bash
zel check              # figure it out
zel check ./docs       # this one

With no argument, zel looks for, in order:

  1. A zel.toml

    Searching upward from the current directory. Its content key wins over everything else. See Configuration.

  2. A ./content folder

    The conventional name, and what zel new docs creates.

  3. The current directory

    If it holds a site.yaml or a pages.yaml, it is the content root.

If none of those match, the command says so and stops. It never guesses at a folder that merely contains Markdown — a wrong guess produces a conversion or a build that looks finished and is not.

Where Docker comes in

Commands that only read the content model — explain, list, context, detect, convert, new — are pure Rust and need nothing installed.

Commands that produce a site — check, dev, build, deploy — run the engine, and the engine is a Next.js application. Rather than require Node, zel runs it in a container from a public image.

terminal
zel doctor

tells you whether a container runtime is present and which image it would use. You never write a Dockerfile, and you never see one unless you ask for it with zel image dockerfile.