---
title: Plugin Scaffold
---

This page orients you to the Linchpin WordPress plugin standard and routes you to instantiate a plugin, apply an overlay, or maintain the template.

<!-- wp:docspress/hero {"eyebrow":"Linchpin WordPress standard","title":"Plugin Scaffold","description":"A CI-green WordPress plugin that is also the house template. Instantiate a new plugin from a pinned ref, then replace this identity.","primaryLabel":"Start a plugin","primaryUrl":"/wordpress-plugins/plugin-scaffold/getting-started/","primaryNewTab":false,"secondaryLabel":"Overlays","secondaryUrl":"/wordpress-plugins/plugin-scaffold/overlays/","secondaryNewTab":false,"visualVariant":"sync-diagram","layout":"split","mediaPosition":"right","mediaWidth":44,"imageScale":100,"height":"standard","tone":"theme","textAlign":"left","showGrid":false,"showOrbit":false} /-->

<!-- wp:docspress/callout {"tone":"warning","title":"Do not develop product features here","content":"<p>This repository is the standard, not a product. Run <code>linchpin plugin scaffold</code> to copy a pinned ref, rename the identity, and write a new plugin directory.</p>","collapsible":false} /-->

<!-- wp:docspress/audience-paths {"eyebrow":"Choose a path","title":"What are you doing?","description":"Start with the workflow that matches the job.","paths":[{"title":"Start a plugin","description":"Copy a pinned ref of this standard, apply overlays, and rename the identity.","url":"/wordpress-plugins/plugin-scaffold/getting-started/","cta":"Instantiate","icon":"code","accent":"blue","newTab":false},{"title":"Choose overlays","description":"Blocks, WordPress.org listing, or a self-hosted updater channel.","url":"/wordpress-plugins/plugin-scaffold/overlays/","cta":"See overlays","icon":"api","accent":"gold","newTab":false},{"title":"Maintain the standard","description":"Change the template, keep CI green, and ship the next scaffold release.","url":"/wordpress-plugins/plugin-scaffold/development/","cta":"Work on the repo","icon":"code","accent":"green","newTab":false}],"columns":3,"tone":"theme","textAlign":"left","compact":false,"showNumbers":false} /-->

## What this is

Plugin Scaffold is the house WordPress plugin standard. The checkout is a real plugin: it boots on `plugins_loaded`, registers activation and deactivation hooks, and stays CI-green. It is also the tree `linchpin plugin scaffold` copies.

Current release: **0.1.0**. Requires **PHP 8.3** and **WordPress 6.9**. License: GPL-2.0-or-later.

<!-- wp:docspress/diagram {"title":"How a new plugin is made","type":"flow","source":"plugin-scaffold -> CLI: copy pinned ref\nCLI -> overlays: apply selected overlays\nCLI -> new plugin: rename identity","caption":"Overlays are applied by the scaffold command, not at runtime."} /-->

## What ships in a checkout

<!-- wp:docspress/file-tree {"root":"plugin-scaffold/","tree":"plugin-scaffold.php\nuninstall.php\nincludes/\n  functions.php\n  Core/\n    Bootstrap.php\n  Controller/\n    Controller_Interface.php\n    Install.php\n  Helper/\n    Files.php\nsrc/\n  admin/\n    index.js\noverlays/\n  blocks/\n  wporg/\n  self-hosted/\nscripts/\n  build.sh\ntests/","caption":"Overlays are not loaded when this plugin runs."} /-->

Read the [PHP API](reference/php-api.md) for the public classes, functions, constants, and hooks. Read [scripts](reference/scripts.md) for every Composer and npm command this repository defines.

## Requirements

<!-- wp:docspress/fields {"title":"Runtime and toolchain","description":"Values taken from the plugin header, composer.json, package.json, and .nvmrc.","fields":[{"name":"PHP","type":"string","required":true,"defaultValue":">=8.3","description":"composer.json require.php and the plugin header Requires PHP field.","values":"","deprecated":false},{"name":"WordPress","type":"string","required":true,"defaultValue":"6.9","description":"Plugin header Requires at least and Tested up to. phpcs.xml.dist sets minimum_wp_version to 6.9.","values":"","deprecated":false},{"name":"Node","type":"string","required":true,"defaultValue":"24.13.0","description":"package.json engines.node is >=24.13.0. .nvmrc pins 24.13.0. CI reads .nvmrc.","values":"","deprecated":false}],"searchable":true,"compact":false} /-->

## Next

- [Instantiate a plugin](getting-started/)
- [Install this checkout](getting-started/installation.md)
- [Troubleshooting](troubleshooting.md)
