Packaging your application as an extension
This page is for application creators who want others (or other installations) to install their application. An
extension that installs with one composer require, activates with one setting and documents itself is easy to adopt.

Contents
The repository
One Git repository per extension, its root being the extension directory (Anatomy of an extension):
expdemo/
├── composer.json
├── extension.xml
├── ezinfo.php
├── LICENSE
├── README.md what it does, requirements, install, settings
├── doc/ the longer documentation
├── classes/ modules/ design/ settings/ share/ bin/ cronjobs/ translations/
└── tests/composer.json
Extensions are Composer packages of type ezpublish-legacy-extension; the installer plugin places them in
extension/<name> (3.5 Extensions are Composer packages):
{
"name": "yourvendor/expdemo",
"description": "Demo application for Exponential",
"type": "ezpublish-legacy-extension",
"license": "GPL-2.0-or-later",
"require": { "php": ">=8.0" },
"extra": { "ezpublish-legacy-extension-name": "expdemo" }
}Libraries your code needs go in require; never commit vendor/. Publishing it: Composer packages and Packagist.
extension.xml and ezinfo.php
Both state the same name, version, copyright, license and website; the about page (/ezinfo/about) reads
extension.xml first. Dependencies on other extensions go into extension.xml <dependencies>. See the shipped
extension/ezstarrating/extension.xml for a complete example.
Install steps
Document, and automate where possible:
composer require yourvendor/expdemoActiveExtensions[]=expdemo./console ext:expdemo:install-schema(your idempotent table installer, Database schema and .dba files)php bin/php/ezpgenerateautoloads.php -eand./console exp:velocity deploy- Policies to give, cron lines to add, settings to set in
settings/override/.
License
Exponential is GPL v2 or later; code that runs inside it is usually distributed under a compatible license. Put the
license in LICENSE, composer.json, ezinfo.php and extension.xml. Credit code you based your work on
(Licensing for buyers); this is not legal advice.
Checklist
- To do: Installs with Composer into
extension/<name>; activates with one line. - To do: Works with a clean installation and the shipped design (templates overridable).
- To do: No secrets, no host names, no personal data in the repository.
- To do: Translatable texts, at least English.
- To do: Tests run in CI (Continuous integration for extensions).
- To do: Version in all metadata files matches the tag (Versions and releases).
- To do: README with requirements, install, settings and support.
Related pages
- Composer packages and Packagist
- Versions and releases of your extension
- Source control and releases standard
- Free documentation: this page is free to copy, translate and improve under the GNU FDL 1.3.
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.