Overview
Authoritative reference for the 18 WordPress.org Plugin Directory guidelines. Covers GPL licensing, plugin naming/trademark rules, trialware restrictions, and all other submission requirements.
When to use
Use this skill when you need to:
- Review a WordPress plugin for compliance with the WordPress.org Plugin Directory guidelines
- Check GPL license compatibility for a plugin or its bundled libraries
- Verify license headers in plugin files
- Identify common guideline violations before submission
- Answer questions about what is or is not allowed on WordPress.org
- Evaluate premium/upsell flows, license checks, or freemium positioning
- Review "teaser" or "preview" UI for trialware violations
Inputs required
- Plugin source code (or specific files to review)
- Optional: plugin readme and plugin header metadata for naming and license checks
Procedure
- Check the plugin's license header against the Valid License Headers section below.
- Walk through the 18 Guidelines checklist, paying special attention to Guidelines 1, 4, 5, 7, 8, and 17.
- Confirm trialware/freemium compliance using the checklist in guideline-review-checklist.md (Guideline 5 section).
- For bundled third-party code, verify license compatibility against GPL-Compatible Licenses (Quick) below.
- Flag matches from Common GPL Violations (Quick) below.
- For edge cases, consult the detailed references and the GNU GPL FAQ.
18-Guideline Review Checklist
Use the detailed, per-guideline checklist in guideline-review-checklist.md. Load this reference file only when a full guideline audit is requested.
GPL Compliance (Guideline 1 in Detail)
Use gpl-compliance.md for full license tables, compatibility nuances, and examples. Keep this inline section as a quick decision aid.
Verification (Licensing)
- Every licensing-related issue must cite Guideline 1 and include the file path and exact license string.
- Confirm compatibility claims against GPL-Compatible Licenses (Quick) and escalate ambiguous licenses.
Failure modes (Licensing)
- If a license is not clearly GPL-compatible, do not guess. Check the GNU license list.
- For dual-license packages, verify both licenses and redistribution terms.
Quick Reference: WordPress GPL Requirements
- WordPress is GPLv2 or later.
- Plugins distributed on WordPress.org must be 100% GPL-compatible (code and assets).
- Include a valid
License: header and License URI: in the main plugin file.
- Do not add restrictions that conflict with GPL freedoms.
Valid License Headers
GPL Versions Summary
| Version |
Year |
Key Addition |
| GPLv1 |
1989 |
Base copyleft: share-alike for modifications |
| GPLv2 |
1991 |
"Liberty or death" clause (Section 7), clearer distribution terms |
| GPLv3 |
2007 |
Anti-tivoization, explicit patent grants, compatibility provisions |
WordPress uses GPLv2 or later, meaning plugins can use GPLv2, GPLv3, or "GPLv2 or later".
For full license texts, see:
License Compliance Checklist
When reviewing a plugin, verify:
Valid License Headers for WordPress Plugins
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
License: GPL-3.0-or-later
License URI: https://www.gnu.org/licenses/gpl-3.0.html
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
GPL-Compatible Licenses (Quick)
- Safe defaults: GPL-2.0-or-later, GPL-3.0-or-later.
- Commonly accepted permissive families: MIT/Expat, BSD, ISC, zlib, Boost.
- Conditional compatibility requires care: Apache-2.0 and MPL-2.0 (verify usage context).
- For full accepted and rejected identifiers, use gpl-compliance.md.
Common GPL Violations (Quick)
- Split licensing that restricts distributed code.
- Obfuscated or non-corresponding source distribution.
- Restrictive clauses (non-commercial, no-resale, forced backlink).
- Bundling GPL-incompatible libraries or assets.
Plugin Naming Rules (Guideline 17)
Use naming-rules.md for full trademark lists, slug blocks, and naming examples. Keep this inline checklist for quick screening.
Naming Checklist (Quick)
- Name is not a placeholder and has at least 5 alphanumeric characters.
- Header name and readme name match.
- Name is specific and function-related; avoid keyword stuffing.
- Trademark/project names appear only after connectors like
for, with, using, and.
- No banned/discouraged terms or trademark portmanteaus.
- Slug is lowercase, hyphenated, <= 50 chars, and avoids blocked terms.
1---2name: wp-plugin-directory-guidelines3description: Use when reviewing WordPress plugins for GPL compliance, checking license headers or compatibility, evaluating upsell/freemium/trialware patterns, validating plugin naming or trademark rules, checking plugin slugs, understanding why a plugin was rejected from WordPress.org, or answering any question about the 18 WordPress.org Plugin Directory guidelines — even if the user doesn't mention 'guidelines' explicitly.4---56## Overview78Authoritative reference for the 18 WordPress.org Plugin Directory guidelines. Covers GPL licensing, plugin naming/trademark rules, trialware restrictions, and all other submission requirements.910## When to use1112Use this skill when you need to:13- Review a WordPress plugin for compliance with the WordPress.org Plugin Directory guidelines14- Check GPL license compatibility for a plugin or its bundled libraries15- Verify license headers in plugin files16- Identify common guideline violations before submission17- Answer questions about what is or is not allowed on WordPress.org18- Evaluate premium/upsell flows, license checks, or freemium positioning19- Review "teaser" or "preview" UI for trialware violations2021## Inputs required2223- Plugin source code (or specific files to review)24- Optional: plugin readme and plugin header metadata for naming and license checks2526## Procedure27281. Check the plugin's license header against the **Valid License Headers** section below.292. Walk through the **18 Guidelines** checklist, paying special attention to Guidelines 1, 4, 5, 7, 8, and 17.303. Confirm trialware/freemium compliance using the checklist in [guideline-review-checklist.md](references/guideline-review-checklist.md) (Guideline 5 section).314. For bundled third-party code, verify license compatibility against **GPL-Compatible Licenses (Quick)** below.325. Flag matches from **Common GPL Violations (Quick)** below.336. For edge cases, consult the detailed references and the [GNU GPL FAQ](https://www.gnu.org/licenses/gpl-faq.html).3435## 18-Guideline Review Checklist3637Use the detailed, per-guideline checklist in [guideline-review-checklist.md](references/guideline-review-checklist.md). Load this reference file only when a full guideline audit is requested.3839## GPL Compliance (Guideline 1 in Detail)4041Use [gpl-compliance.md](references/gpl-compliance.md) for full license tables, compatibility nuances, and examples. Keep this inline section as a quick decision aid.4243### Verification (Licensing)4445- Every licensing-related issue must cite **Guideline 1** and include the file path and exact license string.46- Confirm compatibility claims against **GPL-Compatible Licenses (Quick)** and escalate ambiguous licenses.4748### Failure modes (Licensing)4950- If a license is not clearly GPL-compatible, do not guess. Check the [GNU license list](https://www.gnu.org/licenses/license-list.html).51- For dual-license packages, verify both licenses and redistribution terms.5253### Quick Reference: WordPress GPL Requirements5455- WordPress is **GPLv2 or later**.56- Plugins distributed on WordPress.org must be 100% GPL-compatible (code and assets).57- Include a valid `License:` header and `License URI:` in the main plugin file.58- Do not add restrictions that conflict with GPL freedoms.5960### Valid License Headers6162## GPL Versions Summary6364| Version | Year | Key Addition |65|---------|------|--------------|66| GPLv1 | 1989 | Base copyleft: share-alike for modifications |67| GPLv2 | 1991 | "Liberty or death" clause (Section 7), clearer distribution terms |68| GPLv3 | 2007 | Anti-tivoization, explicit patent grants, compatibility provisions |6970WordPress uses **GPLv2 or later**, meaning plugins can use GPLv2, GPLv3, or "GPLv2 or later".7172For full license texts, see:73- [GNU General Public License v1](https://www.gnu.org/licenses/gpl-1.0.html)74- [GNU General Public License v2](https://www.gnu.org/licenses/gpl-2.0.html)75- [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html)7677## License Compliance Checklist7879When reviewing a plugin, verify:8081- [ ] Main plugin file has a valid `License:` header (e.g., `GPL-2.0-or-later`, `GPL-2.0+`, `GPLv2 or later`)82- [ ] Main plugin file has a `License URI:` header pointing to the GPL text83- [ ] If bundled libraries exist, each has a GPL-compatible license84- [ ] No "split licensing" (e.g., code GPL but premium features proprietary)85- [ ] No additional restrictions beyond what GPL allows86- [ ] No clauses restricting commercial use, modification, or redistribution87- [ ] No obfuscated code (violates the spirit of source code availability)8889## Valid License Headers for WordPress Plugins9091```92License: GPL-2.0-or-later93License URI: https://www.gnu.org/licenses/gpl-2.0.html94```9596```text97License: GPL-3.0-or-later98License URI: https://www.gnu.org/licenses/gpl-3.0.html99```100101```text102License: GPLv2 or later103License URI: https://www.gnu.org/licenses/gpl-2.0.html104```105106### GPL-Compatible Licenses (Quick)107108- Safe defaults: GPL-2.0-or-later, GPL-3.0-or-later.109- Commonly accepted permissive families: MIT/Expat, BSD, ISC, zlib, Boost.110- Conditional compatibility requires care: Apache-2.0 and MPL-2.0 (verify usage context).111- For full accepted and rejected identifiers, use [gpl-compliance.md](references/gpl-compliance.md).112113### Common GPL Violations (Quick)114115- Split licensing that restricts distributed code.116- Obfuscated or non-corresponding source distribution.117- Restrictive clauses (non-commercial, no-resale, forced backlink).118- Bundling GPL-incompatible libraries or assets.119120## Plugin Naming Rules (Guideline 17)121122Use [naming-rules.md](references/naming-rules.md) for full trademark lists, slug blocks, and naming examples. Keep this inline checklist for quick screening.123124### Naming Checklist (Quick)125126- Name is not a placeholder and has at least 5 alphanumeric characters.127- Header name and readme name match.128- Name is specific and function-related; avoid keyword stuffing.129- Trademark/project names appear only after connectors like `for`, `with`, `using`, `and`.130- No banned/discouraged terms or trademark portmanteaus.131- Slug is lowercase, hyphenated, <= 50 chars, and avoids blocked terms.