creating-blocks

Templates and guidelines for creating new WordPress blocks from scratch — load this before generating block files

npx skills add https://github.com/automattic/data-liberation-agent --skill creating-blocks

When to use me

Use this skill when creating a new block from scratch. Do not use this skill when modifying an existing block.

Generating Blocks Instructions

  • Always use the current folder to generate the block
  • Always remove space before the PHP opening tag, nor leave more than one empty new line at the end of any file
  • Always use block props to make sure the block is selectable in the canvas
  • Always use the lowercase for block name slugs
  • Never close the last PHP opening tag, you always leave it open
  • Never suggest or generate code outside the specification, such as REST controllers, PHP classes, or other code that is not part of a standard WordPress block
  • Prefer building blocks that have the same behaviour on the frontend and the backend, unless the user asks for a block that is specifically different on the frontend
  • Do not opt for placeholders in the editor
  • Be proactive in adding inspector or block toolbar controls that can make the block more interactive and customizable
  • Never redeclare functions in PHP and always guard with function_exists
  • Do not create additional markdown files with extense documentations or installation instructions
  • Make sure the block is registered correctly so that it renders on the front end
  • Use the InnerBlocks component from @wordpress/block-editor as much as possible.

Interactive Blocks

When the block requires frontend interactivity (clicks, toggles, accordions, modals, carousels, counters, tabs, search filters):

  • The block MUST also be dynamic (uses render.php, no save.js)
  • Use plain JavaScript with standard DOM APIs (querySelector, addEventListener, classList, etc.) in view.js — never use the WordPress Interactivity API
  • In block.json: use "viewScript": "file:./view.js" (not viewScriptModule)
  • In render.php: use standard HTML attributes and CSS classes that your JavaScript targets
  • Use data-* attributes on the block wrapper to pass server-side values to JavaScript

Reference Files

Before generating block files, read the relevant references from the references/ directory next to this skill file.

  • references/artefact-templates.md — REQUIRED: read this FIRST before generating any block files. Contains exact file templates with correct paths, asset references, and build pipeline details. You MUST follow these templates exactly.
  • references/file-templates.md — additional guidelines for each block file type
  • references/inner-blocks.md — read this if the block uses InnerBlocks or child blocks
  • references/dynamic-vs-static.md — read this if you need to decide between a dynamic, static, or interactive rendering approach
  • references/interactivity-api.md — read this when creating an interactive block that needs frontend JavaScript

More skills from automattic

dn-info
automattic
Get detailed information about a registered domain using the dn CLI. Use when the user wants to see domain details like expiration date, nameservers, contacts,…
official
wordpress-plugin-publish
automattic
Use this skill when publishing, submitting, reuploading, verifying, packaging, checking, demoing, or releasing WordPress.org plugins with Pressship. It covers…
official
dev
automattic
Development workflows for WordPress ActivityPub plugin including wp-env setup, testing commands, linting, and build processes. Use when setting up development…
official
gitattributes
automattic
Use when auditing or updating .gitattributes export-ignore coverage so dev-only files (lint configs, CI, tests, docs, build tooling) don't ship in the…
official
integrations
automattic
Third-party WordPress plugin integration patterns. Use when adding new integrations, debugging compatibility with other plugins, or working with existing…
official
design-systems
automattic
Bold aesthetic direction guidance for web design. Use when making creative decisions about typography, color, motion, spatial composition, and overall visual…
official
site-specification
automattic
Extract comprehensive site specifications from simple descriptions. Use when analyzing a user's theme request to determine site type, audience, tone, layout…
official
wordpress-block-theming
automattic
WordPress Full Site Editing (FSE) theme architecture. Use when generating theme.json, block templates, template parts, patterns, and functions.php for…
official