Meridian handbook
ReferenceCLI

init

engine-dmo init: Start a new project directory: a bare starter, or a copy of a project with --from; the files it writes, the guidance for coding agents, and what is and is not available outside a Meridian checkout. Every subcommand, argument and flag.

Init writes a new project into dir (default the current directory). With no flag it is the bare starter: one locale, one site, a route for the core page type, a home page in the seed and four templates, the smallest project that passes engine-dmo check and serves a page. With --from it copies a project directory instead, without node_modules, the Vite build output (public/build), local storage or .env files, and gives the copy’s configuration elements ids of their own.

engine-dmo init [dir] [flags]
ArgumentRequiredRepeatable
dirnono
FlagTypeDefaultMeaning
--agentsbooltruewrite AGENTS.md and the meridian and meridian-project skills for coding agents; --agents=false for none
--editorsstrings[zed,vscode]editors whose project settings map the config files to their schemas; empty for none
--fromstringcopy this project directory in place of the starter

--json prints the text output in the JSON envelope. Needs no project.

What the starter writes

PathWhat it is
config/engine.yamlThe install settings, every secret an environment variable. database.url: ${DATABASE_URL} has no default, so commands that load the configuration need DATABASE_URL set (see Commands and the environment)
config/locales.yamlOne locale, en
config/sites/main/site.yaml, routes.yamlOne site, with page routed at /{slug} and the home page set to the page with slug home
config/access/grants.yamlWho may do what on the site. See access
seed/seed.yaml, seed/documents/page/home.yamlThe seed set: one published home page, in en
templates/_shared/base.htmlThe layout
templates/_shared/page/entry.htmlThe page template
templates/_shared/errors/404.html, errors/500.htmlThe error pages
public/.keep, .gitignore, README.md
AGENTS.md, .claude/skills/meridian/SKILL.md, .claude/skills/meridian-project/SKILL.mdGuidance for coding agents, pointing at this handbook. Left out with --agents=false
.meridian/schema/*.json, .vscode/, .zed/The configuration files’ JSON Schemas, mapped for each editor in --editors

The core page type has only title and slug. Extend it (engine-dmo dev field add page summary --type text) before you write pages with a body. See Types.

The starter layout warns

engine-dmo check on a fresh starter prints this head has no head() and its own tags miss a meta description for templates/_shared/base.html and still exits 0. The starter layout is a placeholder meant to be replaced: print {{ head() }} in its <head> and the warning goes.

The .gitignore lists .env, but the engine never reads a .env file: set variables in your shell or process manager. See Configuration and secrets.

Starting from an example

--from copies any project directory. The example projects (a CMS site, a minimal DMO project, a destination site and others) live in the Meridian source repository, not in the binary or the container images, so --from examples/... works only in a checkout of that repository. With the binary alone, start from the bare starter.