Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

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.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/designers/extensions/extension-folder-structure.md

On this page

The folder structure of a theme extension

This page is for designers who want to know where each file of a theme goes. How the folders below design/<name>/ are organized in detail is explained in Design directory layout.

The complete tree

extension/mytheme/
├── ezinfo.php                      metadata for the About page (required)
├── extension.xml                   packaged metadata, read first (required)
├── composer.json                   when the theme is a Composer package
├── LICENSE                         the license text (required for publishing)
├── README.md                       what it is and how to switch it on
├── INSTALL.md, CHANGELOG.md        install steps and history (recommended)
├── design/
│   └── mytheme/                    the design (its name is the SiteDesign value)
│       ├── templates/              pagelayout.tpl and the templates
│       ├── override/templates/     templates chosen by override rules
│       ├── stylesheets/
│       ├── javascript/
│       ├── images/
│       └── fonts/
├── settings/
│   ├── design.ini.append.php       DesignExtensions[]=mytheme (required)
│   ├── site.ini.append.php         optional
│   ├── override.ini.append.php     override rules (optional)
│   ├── mytheme.ini                 a settings file of your own (optional)
│   └── siteaccess/<siteaccess>/    settings for one siteaccess (optional)
├── autoloads/                      template operators (optional)
├── classes/                        PHP classes (optional)
├── modules/                        modules with views (optional)
├── translations/<locale>/translation.ts
├── share/                          demo images, files, database seed data
└── packages/                       .ezpkg files shipped with the theme

What reads each part

PartRead byPage
ezinfo.php, extension.xmlSetup > About, Setup > Extensions, the upgrade checksezinfo.php, extension.xml
design/<name>/The template system, once DesignExtensions[] names the extensionRegistering the design
settings/*.ini.append.phpThe settings system, for every active extensionSettings files in an extension
settings/siteaccess/<sa>/The settings system, only while that siteaccess runsSiteaccess settings inside a theme
autoloads/, classes/The autoload array, after php bin/php/ezpgenerateautoloads.php -eTemplate operators in a theme
translations/The translation system when TranslationExtensions[] names the extensionTranslations in a theme
share/Installers and your own scriptsThe share folder
packages/Whoever imports them with ezpm or Setup > PackagesBundling content class packages

Three published themes compared

Foldersevenx_themes_simplecjw_themes_jumpersevenx_themes_media
design/simplestarter, standardmedia
settings/siteaccess/yescjw_starteryes
classes/, modules/-yesyes
translations/yesger-DEyes
packages/20 content class packages--
share/-content-images, content-filesdatabase schema and data
CHANGELOG.md-yes-

Read the trees yourself: ls extension/cjw_themes_jumper on an installation that has it, or browse the repository on GitHub.

Step by step: create the skeleton by hand

  1. mkdir -p extension/mytheme/design/mytheme/{templates,stylesheets,javascript,images} extension/mytheme/settings
  2. Write settings/design.ini.append.php (Registering the design).
  3. Write ezinfo.php and extension.xml.
  4. Add LICENSE and README.md.
  5. Check: php -l extension/mytheme/ezinfo.php and xmllint --noout extension/mytheme/extension.xml.

Or let the design extension wizard write all of it.

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

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