👉 Visit the DatoCMS homepage or see What is DatoCMS?
Monorepo with the TypeScript libraries used to build DatoCMS plugins.
You should not need to install these packages manually. Follow our Build your first plugin guide to easily scaffold a plugin with both packages already set up.
From there, the Plugin SDK documentation and real-world examples cover everything else.
datocms-plugin-sdk- TypeScript SDK to build DatoCMS plugins.
datocms-react-ui- React component library to mimic the DatoCMS interface inside plugins.
To work on the packages themselves (e.g. to prepare a PR or debug an issue in the framework itself), see the "Developing" section of each package's README: datocms-plugin-sdk, datocms-react-ui. Both are developed in this npm-workspaces monorepo, and share a version number whenever they are released together.
Every push to a branch here publishes a preview of both packages, which you can
install into a real plugin — no npm release, no npm link:
npm i https://pkg.pr.new/datocms-plugin-sdk@<commit-sha>
npm i https://pkg.pr.new/datocms-react-ui@<commit-sha>
The exact URLs show up in the commit's check run on GitHub, and in a comment on the pull request once there is one. Installing one preview pulls in the previews of its siblings built from the same commit, so a change spanning several packages can be tried as one coherent set.
Previews are throwaway: they are never published to npm, and the URL stops
resolving after a while. Never commit one to a package.json that ships.
Maintainers only. The two packages share one version number and are always released together.
- Describe your change. Run
npx changesetin the same PR that makes the change: it asks which packages are affected and whether the bump is a patch/minor/major, then writes a small markdown file under.changeset/which you commit.patchis for bug fixes only; new API surface isminor. See.changeset/README.md. - Release. From an up-to-date, clean
master, runnpm run release. It builds and tests first, then applies the pending changesets (bumping the versions and writing theCHANGELOG.mds), publishes to npm, and only then tags each packagename@X.Y.Z, pushes, and publishes one GitHub release per tag — its notes are the changelog entries changesets just wrote.
If a release is interrupted, do not undo anything: run npm run release
again. It detects that some package is still missing from the registry and
resumes the publish instead of starting a new release.
npm run release:next does the same under the next dist-tag, leaving
latest untouched; its GitHub releases are marked as prereleases, so they don't
become the repository's "Latest release" either.
The script itself is
@datocms/release-toolchain,
shared with every other DatoCMS repository and pinned here by 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.