Design reusable, editor-friendly DatoCMS schemas. Advice needs no CLI, MCP, login, or setup. Use supplied requirements/schema; inspect live schema through an available authorized route only when needed. Decide shape here; route implementation below.
Core principles
- Content is data, not pages. Structure for meaning, not presentation.
- Single source of truth. Avoid content duplication.
- Don't recreate built-ins. Record meta (
created_at,published_at, …), asset meta (alt,title,custom_data,focal_point), and ordering (position) all exist already — never add sibling fields, on records or blocks. Seereferences/separation-of-concerns.mdandreferences/model-configuration.md§ Behaviour — ordering. - Future-proof. Design for unknown channels and redesigns.
- Editor-centric. Optimize for editors, not developers. Always add hints to fields, fieldsets, models unless obvious — schema is editor UI. See
references/separation-of-concerns.md§ Hints.
Routing
Once modeling decision made:
- Implementation —
datocms-cli(migrations, default) ordatocms-cma(user opts out of migrations / wants immediate schema mutation). - Querying / rendering —
datocms-cdafor GraphQL reads and Structured Text query fragments;datocms-frontend-integrationsfor framework rendering. - Validator and cascade-strategy mechanics —
datocms-cma/references/schema.md(link/structured-text validators,on_reference_delete_strategy, etc.). - Building, editing, or validating DAST — datocms-structured-text: document model, editing; source import/export → conversion. CMA persists the finished payload.
Missing sibling reference → modeling advice here still stands; for implementation mechanics install that skill from datocms/agent-skills or update the full bundle.
References
Mandatory — never propose models, blocks, or fields from memory. Before any structured question or schema suggestion, load every reference whose decision is in scope.
Match decision → file:
references/separation-of-concerns.md— naming/shaping for meaning, not appearance; redesign test; record-meta + file/gallery-meta + position duplication anti-patterns.references/models-vs-blocks.md— model vs block; structural rules (no orphans, no link-field references, locale inheritance); per-record limits (300 KB / 500 blocks / 5 levels); locale multiplier.references/block-fields-and-structured-text.md—single_blockvsrich_text(Modular Content) vsstructured_text; inline-vs-block-vs-itemLink-vs-inlineItem matrix; native-node modeling choices; native nodes (blockquote,code,list,heading,thematicBreak,link) — never recreate as blocks; image/gallery/video block shape (nocaptionsibling).references/content-reuse.md— link fields, project-level Blocks Library, built-inseo, frameless single-block, fieldset grouping, block-library hygiene.references/taxonomy-classification.md— flat tags, tree models, faceted classification via multiple links, cascade strategies.references/ui-organization.md— Content tabmenu_item(editors), Schema tabschema_menu_item(devs), saved views viaitem_type_filter, emoji conventions, IA heuristics.references/model-configuration.md— singleton, draft mode,all_locales_required, sortable/tree/ordering,inverse_relationships_enabled,presentation_title_field,presentation_image_field,collection_appearance, CDA SEO fallbacks; create-then-wire mechanic.references/field-configuration.md— validators (enum, format, length, unique,slug_title_field,required_alt_title,required_seo_fields,transformable_image, dimensions, structured-text size);appearanceeditors (string_select+enum, markdown/wysiwyg/textarea, framed vs framelesssingle_block,link_selectvslink_embed, structured_text nodes/marks/heading_levels, SEO previews, slugurl_prefix, color presets).