Configuration
Every configuration file a Meridian project can have, where it lives, what it holds and which page lists its keys, plus how files are loaded, checked, given ids and validated in an editor.
A project’s configuration is YAML under config/ (or the directory --config names). It is committed to git: secrets never appear in it, only ${VAR} interpolations. Every file is checked as a whole, and every problem is reported together, each with its file, line and column, the source line and a caret.
engine-dmo check --no-db # every file, with no database
engine-dmo config validate # engine.yaml alone
engine-dmo config render # engine.yaml resolved, defaults included, secrets redacted
engine-dmo config schema --file site # one file's JSON Schema The files
| File | Holds | Reference |
|---|---|---|
engine.yaml | The install: server, database, storage, mail, search, AI, telemetry and the rest. Required | engine.yaml and the pages after it |
locales.yaml | The install’s locales and locale groups | locales.yaml and strings |
strings/<locale>.yaml | One locale’s template strings | locales.yaml and strings |
networks.yaml | Sets of sites sharing organisations, people and partner accounts | networks.yaml and memberships.yaml |
memberships.yaml | Membership tiers, in rank order (engine-dmo) | networks.yaml and memberships.yaml |
sites/<key>/site.yaml | One site: name, hosts, locales, navigation, SEO, delivery | site.yaml |
sites/<key>/routes.yaml | One site’s routes, redirects, special pages and home page | routes.yaml |
sites/<key>/endpoints.yaml | One site’s declared endpoints | endpoints.yaml |
sites/<key>/plugins.yaml | One site’s process plugins (experimental) | plugins.yaml |
sites/<key>/promotions.yaml | One site’s promotion slots (engine-dmo) | promotions.yaml |
sites/<key>/portal.yaml | One site’s portal, screens and actions (engine-dmo) | Portal files |
sites/<key>/images.yaml | One site’s image transforms | images.yaml |
sites/<key>/schema/<type>.yaml | A type, or part of one, on that site only | Schema files |
images.yaml | Image breakpoints, defaults and named transforms | images.yaml |
schema/<type>.yaml | A content type, or an extension of a core type | Schema files |
schema/_shared.yaml | Named field groups | Schema files |
blocks/_index.yaml | Shared block definitions | Schema files |
crm/organisation.yaml, crm/person.yaml | Custom fields on CRM records (engine-dmo) | Schema files |
portal/enquiries.yaml | Fields a partner keeps against an enquiry (engine-dmo) | Schema files |
portal/portal.yaml | The install’s portal (engine-dmo) | Portal files |
portal/roles.yaml | Partner roles (engine-dmo) | Portal files |
access/roles.yaml | Staff roles | access/roles.yaml and grants.yaml |
access/grants.yaml | Roles granted to staff groups under a scope | access/roles.yaml and grants.yaml |
analytics/reports.yaml | Scheduled member and organisation reports | analytics files |
analytics/dashboards.yaml | Organisation dashboards and entered figures | analytics files |
analytics/bots.txt | Extra user-agent substrings analytics filters, one per line | engine.yaml: analytics |
accessibility.yaml | The known accessibility issues register | accessibility.yaml |
ai/prompts/<key>.yaml | Overrides of the engine’s AI prompts | AI prompt overrides |
paidlistings.yaml | The paid listings provider and prices (engine-dmo) | paidlistings.yaml |
search/synonyms.yaml | Seed search synonyms | Seed files |
tags/vocabulary.yaml | The seed tag vocabulary | Seed files |
tags/smartlists.yaml | Seeded smart lists | Seed files |
A new project from engine-dmo init has engine.yaml, locales.yaml, access/grants.yaml and one site’s site.yaml and routes.yaml; every other file is optional. A file for a module the binary does not compile (such as memberships.yaml under engine-cms) is refused by the module’s name.
Stable ids
Elements that hold data (types, fields, groups, blocks, options, sites, locales, routes, endpoints, tiers, networks, screens, actions, roles, slots and landing families) carry an id, such as fld_thsh2xa6nf. The id is what stored data is keyed by, so renaming a handle keeps its data. Never write or change an id by hand:
engine-dmo check --fix --no-db # writes every missing id in place, keeping comments, then checks check without --fix reports a missing id as an error. The engine-dmo dev authoring verbs write ids as they add elements. See Stable ids.
Shared value formats
| Format | Example |
|---|---|
| Text per locale | label: { en-GB: Walk, fr-FR: Randonnée }. The source locale is required; a missing locale falls back |
| Duration | 30s, 15m, 2h |
| Retention period | 90d, 2w, 13m (months), 7y |
| Size | 25MB, 256KB |
| Tiers | A list of tier keys, or { min: <tier> } for that tier and every tier above it |
| Secret | ${VAR}: a bare interpolation, never a literal |
Editor support
engine-dmo init writes the JSON Schema of every file to .meridian/schema/ and maps the file patterns to them in the project’s VS Code and Zed settings. To refresh them after an engine upgrade:
engine-dmo config schema --write .meridian/schema --editors vscode,zed Each schema is generated from the structures the loaders decode, so an editor’s completion and validation match what check accepts.
webhooks
engine-dmo webhooks: The outbound webhook delivery log: deliveries, replay. Every subcommand, argument and flag.
engine.yaml
Every key of config/engine.yaml for the server, database, migrations, schema, templates, public files, logging, caches, storage, jobs, telemetry, retention, audit and extensions, with type, default and meaning; other sections are on their own pages.