Features
What the engine does for a website beyond content and templates, in both bundles, and which page explains each feature.
These pages cover the parts of Meridian a website uses beyond its content model and its templates: the media library, search, menus, forms, mail, newsletters, redirects, analytics, AI assistance and accessibility. Every feature here is in both bundles. engine-cms and engine-dmo behave the same for all of them, and the commands on these pages are written as engine-dmo; swap in engine-cms on a plain CMS install.
A feature is switched on in configuration, and engine-dmo check validates that configuration before the server starts. Most features also need a database (they store something) and some need an external service you bring: a search backend, a mail provider, an AI provider. Nothing on these pages needs a third-party service to boot: without a search backend the search page serves browse mode, without a mail provider development mail goes to the log, and without an AI provider the AI features do not appear.
Media library
Search
Navigation
Forms and submissions
Transactional mail
Newsletters
Redirects and URLs
Analytics
AI assistance
Accessibility
Where each feature is configured
| Feature | Configuration | Admin screen | Command |
|---|---|---|---|
| Media library | media: and storage: in engine.yaml; images.yaml | Media | engine-dmo media |
| Search | search: in engine.yaml; special.search in routes.yaml; search/synonyms.yaml | Search index, Search synonyms, Insight search | engine-dmo search |
| Navigation | nav: in site.yaml; seed/navigation/ | Navigation | |
| Forms | endpoints.yaml per site; forms: and endpoints: in engine.yaml | Submissions | |
| Transactional mail | mail: in engine.yaml; mail: in site.yaml; templates/emails/ | engine-dmo mail | |
| Newsletters | newsletter: in engine.yaml; a subscribe step in endpoints.yaml | Newsletter | engine-dmo newsletter |
| Redirects | redirects: in routes.yaml; the redirect table | engine-dmo redirects | |
| Analytics | analytics: in engine.yaml; analytics/dashboards.yaml | Insight | engine-dmo analytics |
| AI assistance | ai: in engine.yaml; ai/prompts/ | AI queue and the editor | engine-dmo ai |
| Accessibility | accessibility: in site.yaml; accessibility.yaml | engine-dmo a11y |
Every key of every file is listed in the configuration reference, and engine-dmo config schema --file <kind> prints a file’s JSON Schema from the binary you are running. <kind> is the kind of file without .yaml (engine, site, routes, endpoints, dashboards, …) or a real path such as config/sites/main/site.yaml; a bare site.yaml is refused.
Common rules
- Secrets are environment variables. A provider key, token or password in
engine.yamlis a bare${VAR}interpolation. A literal secret is refused (MRD-1004), and so is a secret with a default value. - Ids are written by the tooling. Endpoints, navigation slots, entered metrics and other configuration elements carry a stable
id. Leave it out when you write the element and runengine-dmo check --fix, which writes one. See stable ids. - Every problem at once.
engine-dmo checkreports every configuration problem with its file, line and column, together, and exits 3 when any is an error. Template warnings (a layout withouthead(), a missingt()key) are printed above the summary but not counted in it, so0 errors, 0 warningscan follow printed warnings: read every line, not only the last. - Permissions. Each admin screen needs a permission. The built-in roles hold the common ones; a project grants the rest in
config/access/roles.yaml. Each page lists the permissions its feature uses.
Testing templates
How to verify templates with engine-dmo check, the language server in your editor, describe template and describe route, render --json, and template tests in tests/templates/*.test.yaml with selector, JSON-LD and snapshot assertions.
Media library
How uploads, alt text and captions per locale and per site, licence and rights records, duplicates, orphans and image derivatives work, with every media setting in engine.yaml.