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] | Argument | Required | Repeatable |
|---|---|---|
dir | no | no |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--agents | bool | true | write AGENTS.md and the meridian and meridian-project skills for coding agents; --agents=false for none |
--editors | strings | [zed,vscode] | editors whose project settings map the config files to their schemas; empty for none |
--from | string | copy this project directory in place of the starter |
--json prints the text output in the JSON envelope. Needs no project.
What the starter writes
| Path | What it is |
|---|---|
config/engine.yaml | The 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.yaml | One locale, en |
config/sites/main/site.yaml, routes.yaml | One site, with page routed at /{slug} and the home page set to the page with slug home |
config/access/grants.yaml | Who may do what on the site. See access |
seed/seed.yaml, seed/documents/page/home.yaml | The seed set: one published home page, in en |
templates/_shared/base.html | The layout |
templates/_shared/page/entry.html | The page template |
templates/_shared/errors/404.html, errors/500.html | The error pages |
public/.keep, .gitignore, README.md | |
AGENTS.md, .claude/skills/meridian/SKILL.md, .claude/skills/meridian-project/SKILL.md | Guidance 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.