Recent changes
Wednesday November 04 2026
-
extension.xml: the packaged description Updated Markdown page
Write the extension.xml of a theme with its metadata block (name, version, copyright, license, website) and optional dependencies, check it with xmllint, and keep it equal to ezinfo.php.
-
ezinfo.php: what the About page reads Updated Markdown page
Write the ezinfo.php file of a theme extension step by step, with the keys the About page and the upgrade checks read, a complete example from a real theme, and the checks to run before a release.
-
From the wizard's output to the first commit Updated Markdown page
The first hour after generating a theme - check every file, fix the metadata and composer.json, switch the theme on for a test siteaccess, see it render, and make the first commit.
-
A .gitignore for themes Updated Markdown page
What a theme's .gitignore keeps out of the repository - editor leftovers, backups, logs, build output and local settings - the file the design wizard writes, and how to check that nothing secret or private slipped in.
-
INSTALL.md and CHANGELOG.md Updated Markdown page
When a theme needs an INSTALL.md beside its README, what a CHANGELOG.md entry looks like (with the Added, Updated, Removed, Renamed and Fixed prefixes), and a real example from a published theme.
-
Installing your package on a test site Updated Markdown page
Try your package exactly as a user will - upload, review what the install meets, install (or install as drafts), check the site, and uninstall - on a throwaway installation, never on a live site.
-
Keeping every version field in sync Updated Markdown page
A theme's version number lives in up to five places; the list, the order in which to change them before a release, and a one-minute check that they agree.
-
The LICENSE file of a theme Updated Markdown page
Add the LICENSE file a theme needs before anyone may use it - which text to copy, where it goes, how the license is named in ezinfo.php, extension.xml and composer.json, and what the design wizard writes for you.
-
Loading order and which theme wins Updated Markdown page
When two extensions provide the same template or setting, the loading order decides which one wins; how the order is set, how ExtensionOrdering and extension.xml dependencies change it, and how to check it.
-
Naming your theme extension Updated Markdown page
The rules for the folder name of a theme extension, its design name, its class prefix and its Composer package name, with the conventions real themes follow and the names to avoid.
-
The package creator wizard, step by step Updated Markdown page
Walk through Setup > Packages > Create new package (/package/create) - choosing a wizard, the pickers, package information, maintainer, changelog, the review and Create package - and what you get at the end.
-
Choosing a license in the package wizard Updated Markdown page
The license drop-down of the package and RAD wizards - the configured list in package.ini [LicenseSettings] (GPL, LGPL, AGPL, MIT, GFDL, Creative Commons, public domain, proprietary), the default, how to add one, and…
-
The secret check before an extension is packaged Updated Markdown page
Why an export of your theme can be refused for holding secret values or key material, what the check looks for, how to fix a real finding, and how package_check.ini names a documentation example the check cannot tell…
-
Putting a theme under Git Updated Markdown page
Keep a theme in its own Git repository, rooted at the extension folder - why one repository per theme, how to start it, how to work on it inside an installation, and which commit message prefixes to use.
-
Writing the README of a theme Updated Markdown page
The sections a theme's README.md needs - what it is, a screenshot, requirements, install, switch on, configure, license and support - in the order a reader looks for them, with a template to copy.
-
Registering the design: DesignExtensions[] Updated Markdown page
The one setting that makes the template system look into a theme extension's design folder - design.ini [ExtensionSettings] DesignExtensions[] - how to write it, how to check that it works, and what goes wrong without…
-
Settings files in an extension Updated Markdown page
How a theme ships settings as .ini.append.php files in its settings/ folder, the file format with its PHP comment guard, which settings belong in a theme, and how to see which file wins.
-
The share folder: demo images, files and seed data Updated Markdown page
What a theme's share/ folder is for - demo images and files, database schema and seed data (.dba) - how real themes use it, and the rules that keep it small, legal and free of backups and personal data.
-
The site style package Updated Markdown page
The Site style wizard packs two stylesheets (site and classes), their images and a thumbnail into an Exponential package; what it is for, each step, and when a full theme extension is the better choice.
-
Siteaccess settings inside a theme Updated Markdown page
Ship settings that apply only while one siteaccess runs, in extension/<theme>/settings/siteaccess/<siteaccess>/, and settings for all of a theme's siteaccesses in settings/override/ - with the example of…