- This repository is a collection of standalone DatoCMS plugins. Each plugin lives in its own directory with its own
package.json. - There is no workspace tooling here. Run package commands from the plugin directory you are changing.
- Plugins do not share runtime source code, but many implementation patterns repeat. Before inventing a new DatoCMS SDK, CMA, or UI pattern, check sibling plugins for an existing approach.
- Prefer the nearest nested
AGENTS.mdwhen working inside a plugin directory.
From an individual plugin directory:
npm installnpm run buildnpm run lint/npm run lint:fixwhen that plugin defines themnpm run testwhen that plugin defines it
From the repo root:
./foreach.sh <command>runs the same command in every plugin directory.node run-checks.jsruns lint and build on a subset of plugins.
- Stack: TypeScript, React, Vite,
datocms-plugin-sdk, and@datocms/cma-client-browser. - Prefer
datocms-react-uifor plugin UI unless the package already follows an established alternative. - The root
biome.jsonis the common formatting and lint baseline: single quotes, space indentation, noany, no non-null assertions, no CommonJS, and preferfor...ofover.forEach(). - Generated build output lives in package-level
dist/orbuild/directories; do not hand-edit generated artifacts. - Do not assume every plugin has tests, lint scripts, or the same file layout. Verify in the local
package.jsonfirst.
npm run buildin the touched plugin is the default validation step.- Also run that plugin's test or lint commands when your change affects logic they cover.
- Do not assume there is a usable root-level
package.json.