Content dialect
The one field migrated MDX almost always needs.
If your MDX came from another documentation platform, content.dialect is the field
that decides whether it builds.
{ "content": { "dialect": "mintlify" } }Valid values are exactly "reed", "fern" and "mintlify". The default is "reed" —
Reed’s own canonical, dialect-independent authoring form.
Nothing else is accepted. Writing "mint" is rejected by the schema:
Invalid enum value. Expected 'reed' | 'fern' | 'mintlify', received 'mint'mint is a template name, not a dialect. The two vocabularies are separate, and
mixing them fails loudly rather than silently picking one.
Why the same markup means two things
Section titled “Why the same markup means two things”ParamField’s path attribute is spelled identically in Fern’s and Mintlify’s docs and
means different things in each:
- Fern’s
<ParamField path="limit">usespathas the parameter’s name. - Mintlify’s
<ParamField path="limit">usespathas the parameter’s location — an implicitin: "path"— and expects the name to come from elsewhere.
Reed’s canonical ParamField requires a name prop. So a page of Mintlify-authored MDX,
left at the default dialect, fails reed check with:
✗ [DS-S03] content file "....mdx"'s "ParamField" is missing required prop "name" (contract: ParamField)Setting content.dialect: "mintlify" makes Reed read path as a location shorthand, and
the same page passes cleanly. content.dialect: "fern" switches the mapping for content
migrated from Fern, where path genuinely does mean the parameter’s name.
Choosing
Section titled “Choosing”Set the dialect your MDX was written in, not the one you wish it were. The field changes how existing markup is interpreted; it does not convert files. One project has one dialect — there is no per-page override, so content from two upstream platforms has to be normalized before it can share a site.