Extensions
An extension adds functionality to Exponential, or changes existing functionality, without changing the kernel. It plugs into the kernel through settings, templates, modules and classes of its own, so an upgrade of Exponential replaces the kernel and keeps the extension. Your own features belong in an extension for the same reason.
What an extension can do
- carry a design: templates, stylesheets, scripts and images for a site or a siteaccess;
- add modules with new views and policies, template operators and fetch functions;
- add datatypes, workflow events, login and other handlers, cronjob parts and console commands;
- bring tables of its own (share/db_schema.dba, for every database engine), settings and translations;
- bring its own documentation, which the help center shows as soon as the extension is active.
An extension is a folder under extension/. Two files make it known to the system, with the same version in both: extension.xml (name, version, license, website, dependencies) and ezinfo.php.
Install and enable an extension
1. Get it. Most extensions are Composer packages named se7enxweb/<name> on Packagist, of the type ezpublish-legacy-extension, which Composer places in extension/<name>:
composer require se7enxweb/ezflow
An extension that is not a Composer package can be copied or cloned into extension/ by hand; never clone by hand a package that composer.json requires.
2. Switch it on, for the whole installation with ActiveExtensions[] in settings/override/site.ini.append.php, or for one siteaccess with ActiveAccessExtensions[] in settings/siteaccess/<siteaccess>/site.ini.append.php:
[ExtensionSettings]ActiveExtensions[]=ezflow
The same from the console (the first command only shows the change), or in the administration under Setup > Extensions, which activates an extension after a review of the change:
./console exp:ini add 'site.ini/ExtensionSettings/ActiveExtensions[]' ezflow global --dry-run --allow-root-user./console exp:ini add 'site.ini/ExtensionSettings/ActiveExtensions[]' ezflow global --allow-root-user
3. Make the system see it: regenerate the autoload array and clear the caches, or let one command do every step of a PHP change in order:
php bin/php/ezpgenerateautoloads.php -ephp bin/php/ezcache.php --clear-all --allow-root-user./console exp:velocity deploy --allow-root-user
The order of ActiveExtensions[] is the order of priority: an extension loaded earlier wins over a later one for settings and templates. An extension with tables gets them on a new installation from the setup, and on an existing one from ./console exp:upgrade (Exponential 6.0.15). The full walk-through: Extensions: find, install, configure, build and release.
Extensions maintained by 7x and the Exponential Foundation
A new Exponential 6 installation already brings a set of extensions: some live in the kernel tree, the others come through composer.json and the PHP floor package se7enxweb/exponential-php-floor. Which ones a new installation activates is listed in Extensions of a new installation. Among them:
| Extension | What it does |
|---|---|
| ezjscore | Ajax server functions, script and stylesheet packing, jQuery 4 |
| ezoe | The online rich text editor |
| ezwebin | The website interface design |
| ezflow | Page layouts with blocks (classic) |
| explayouts | Exponential Layouts: layouts, zones and blocks edited in the browser |
| eztags | Tags and the tags datatype |
| ezprestapi | REST API v1 and v2 |
| ezautosave, ezmultiupload, ezie, ezodf | Automatic saving of drafts, uploading several files at once, the classic image editor, OpenDocument import and export |
| ezstarrating, ezgmaplocation | The star rating and map location datatypes |
| cjw_newsletter | Newsletters |
| sevenx_authentication_2fa | Two-step sign-in |
| expwt | The website sidebar, which replaces the website toolbar ezwt |
| expui, exp_adminui | The jQuery 4 interface API of the designs, and the Admin UI look of the administration |
| ezoracle | The Oracle database driver |
| ezupdate | Updates from the administration |
More are available to install, for example ezfind (Solr based search), ezcomments (comments) and ezcontentstaging (content staging). Every repository is on github.com/se7enxweb; Setup > Extensions in the administration shows each installed extension with its version, license and project page.
Documentation of an extension
Every extension documents itself in the same place. README.md and INSTALL.md (and CHANGELOG.md and LICENSE where it has them) sit on top of the extension, and every other page is a Markdown file in its doc/ directory, with doc/README.md as the start page, in English. The help center of every installation shows the documentation of each active extension under Help > Extensions, with its own index and search, without any setup.
Extension documentation started out as plain text files: a README and an INSTALL without a suffix, a CHANGELOG, doc/*.txt. It has evolved to full Markdown documents, which give headings, links between pages, tables, highlighted code and images. Markdown is the convention for new and updated extensions; old plain-text files keep working and are shown as plain text. See Documenting an extension.
Build your own
The RAD tools of the administration (Setup > RAD) write a complete extension for a module, a datatype, a workflow event, template operators, a design and more, with a preview of every file first. Extending Exponential 6.0 is the map for developers.
Where to find more
- Exponential Projects: extensions and designs from the community, with their own pages.
- The package server: extension and site packages for the setup wizard.
- The documentation of the extensions in the help center on this site.
- The extension catalogue: one page per shipped extension.
Pages of the earlier documentation
Graham Brookins (05/11/2026 9:09 am)
Graham Brookins (05/11/2026 9:09 am)