👉 Visit the DatoCMS homepage or see What is DatoCMS?
Monorepo with Typescript libraries for handling and rendering DatoCMS Structured Text documents.
html-to-structured-text- Convert HTML (or Hast syntax tree) to a valid Structured Text document.
datocms-structured-text-utils- A set of Typescript types and helpers to work with DatoCMS Structured Text fields.
datocms-structured-text-to-plain-text- Plain text renderer for the Structured Text document.
datocms-structured-text-to-html-string- HTML renderer for the DatoCMS Structured Text field type.
datocms-structured-text-to-markdown- Markdown renderer for the DatoCMS Structured Text field type.
<StructuredText />- React component that you can use to render Structured Text documents.
<datocms-structured-text />- Vue component that you can use to render Structured Text documents.
datocms-structured-text-to-dom-nodes- DOM nodes renderer for the DatoCMS Structured Text field type. To be used inside the browser, as it expects to find
document.createElement.
- DOM nodes renderer for the DatoCMS Structured Text field type. To be used inside the browser, as it expects to find
datocms-contentful-to-structured-text- Convert Contentful Rich Text to a valid Structured Text document.
datocms-structured-text-dastdown- Lossless textual serialization (dastdown) for Structured Text documents, with both a parser and a serializer.
datocms-structured-text-slate-utils- Helpers to translate Structured Text documents to and from Slate structures.
datocms-structured-text-generic-html-renderer- Shared building blocks for the HTML-ish renderers above. You rarely depend on it directly.
- Introduction
- Structured Text format
- Migrating to Structured Text
- Fetching Structured Text using DatoCMS GraphQL API
- Creating Structured Text fields using DatoCMS Rest API
- Creating records with Structured Text fields using DatoCMS Rest API
An npm-workspaces monorepo built with Turborepo and released with Changesets.
git clone https://github.com/datocms/structured-text && cd structured-text
npm install # one install for all ten packages; no bootstrap step
npm run build # turbo, in dependency order
npm test # eslint, then the Jest suite (448 tests, nothing external)Node 22 or later — see .nvmrc. The published packages themselves have no such
requirement; it is the release tooling that does.
The packages resolve each other through their built dist/, so run
npm run build before npm test on a fresh checkout.
Every user-visible change needs a changeset: run npx changeset from the repo
root in the same PR, pick the packages that changed and the bump level (patch
is for bug fixes only, new API surface is minor), and commit the file it
writes under .changeset/. See .changeset/README.md
for the details — in particular, the packages version independently, so
which ones you list matters.
To release, from an up-to-date, clean main, run npm run publish from the
repo root. It builds and tests, applies the pending changesets — bumping only
the packages that changed and writing their CHANGELOG.mds — publishes to npm,
and only then tags each published package name@X.Y.Z, pushes, and creates a
GitHub release per tag whose notes come straight from those changelog entries.
An interrupted release is resumed by re-running it, never undone. Use
npm run publish-next for a prerelease under the next dist-tag.
This repository is published under the MIT license.
DatoCMS is Headless CMS for the modern web. Trusted by 25,000+ businesses, agencies, and individuals, it gives your team one place to manage content and ship it to any website, app, or device via API.
New here? Start with Create free account and the Documentation. Stuck? Ask the Community. Curious what's new? Product Updates.
Building with AI: Agent Skills turn coding assistants (Claude Code, Cursor) into expert DatoCMS developers, with full read/write via the auto-installed CLI. No local terminal? Use the MCP Server instead.
Talking to DatoCMS from code:
- Content Delivery API (CDA) — the fast, read-only GraphQL API your website/app uses to fetch published content.
- Content Management API (CMA) — the REST API for creating and updating content, models, and project settings (think scripts, migrations, integrations).
- CLI — terminal tool for schema migrations and importing from Contentful/WordPress.
Framework guides: end-to-end recipes for fetching content, rendering Structured Text, optimizing images/video, handling SEO, and setting up live preview with visual editing in Next.js, Nuxt, Svelte, and Astro.
Want a head start? Browse our starter projects — ready-to-deploy example sites for popular frameworks.