Theme extensions
Packaging a theme as an extension: structure, settings, dependencies and the designs it adds.
46 pages
- Theme extensions: start here The map of everything about packing a design into a theme extension - folder structure, ezinfo.php and extension.xml, the settings a theme ships, the RAD design wizard, Composer packages and Exponential packages…
- The design extension wizard (Setup > RAD) Generate a complete theme extension in a few minutes with the design extension wizard at /setup/designextension - every field, the file preview, Create in extension/ and Download as zip - step by step.
- The package creator wizard, step by step 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.
- Checklist: the theme extension is ready The checklist to run before a theme extension leaves your hands - structure, metadata, settings, license, Composer, packages, design quality and a clean repository - each item with the command or page that checks it.
- What a theme extension is A theme extension is one folder under extension/ that carries a design and everything it needs; why designs belong there and not in the installation's own design/ folder, with three real themes as examples.
- Naming your theme extension 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 folder structure of a theme extension Every folder and file a theme extension can hold, what reads it, and which ones are required, shown on a complete tree and compared with three published themes.
- ezinfo.php: what the About page reads 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.
- extension.xml: the packaged description 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.
- Keeping every version field in sync 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.
- Copyright and author lines How to write the copyright line of a theme in ezinfo.php, extension.xml, file headers and composer.json - years, holders, earlier authors of a ported or forked design - with real examples.
- The LICENSE file of a theme 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.
- Writing the README of a theme 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.
- INSTALL.md and CHANGELOG.md 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.
- Registering the design: DesignExtensions[] 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…
- The design settings a theme ships Which design settings belong in the theme extension and which belong to the installation - SiteDesign, AdditionalSiteDesignList[], StandardDesign and the stylesheet and script lists - with a recommended split.
- Settings files in an extension 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.
- Siteaccess settings inside a theme 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…
- Giving a theme its own settings file Give a theme its own settings file (mytheme.ini) with documented defaults, read it from templates with ezini() and from PHP with eZINI, and let installations override it safely.
- Activating a theme: ActiveExtensions and ActiveAccessExtensions Switch a theme extension on for the whole installation or for one siteaccess, in the browser (Setup > Extensions) or on the command line, and run the steps that make the change visible.
Documentation license
This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.
Exponential Copyright © 1998-2026 Exponential Foundation and 7x