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

Specification: extension metadata (ezinfo.php and extension.xml)

This page is the reference for how an extension tells the system who it is: its name, version, license and website, as shown on Setup > About and used by the upgrade checks. Read it if you write or release an extension…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/specifications/6.0/extension-metadata.md

On this page

Specification: extension metadata (ezinfo.php and extension.xml)

This page is the reference for how an extension tells the system who it is: its name, version, license and website, as shown on Setup > About and used by the upgrade checks. Read it if you write or release an extension, or if an extension shows a wrong version or no license on the about page.

Since September 2026 every extension, design and theme that ships with or beside Exponential 6.0.15 carries both files and keeps them in step with its release.

In short

  • Write both extension.xml (with a <metadata> block) and ezinfo.php. extension.xml is read first.
  • The version in both files is the release version without a v (tag v6.0.8 gives 6.0.8).
  • Raise both in the commit the release tag points at, then tag.
  • Check with php -l ezinfo.php and xmllint --noout extension.xml.

The reader: expInfo

The class expInfo (lib/ezutils/classes/expinfo.php) is the stable, read-only API for extension metadata. It reads both files and normalises them. Its public static methods:

MethodReturns
activeExtensions()Metadata of every active extension, keyed by directory name
availableExtensions()Metadata of every extension on disk, active or not
hasActiveExtension( $name )Whether the named extension is active
extensionInfo( $name, $activeOnly = false )Metadata of one extension, or false if not found (or inactive when $activeOnly is true)
activeNames()The directory names of the active extensions
kernelInfo( $section = false )Information about the kernel installation

The normalised fields are name, description, summary, version, copyright, author, license and info_url. A summary becomes the description when no description is given.

Read order

OrderSourceRule
1extension.xmlRead first. Fields come from <metadata> when the file has one, otherwise from the top level of the file. Non-empty values win
2ezinfo.phpUsed when extension.xml is missing or cannot be parsed. Class <extensionname>Info with a method info() that returns an array; keys are matched case-insensitively. A key that extension.xml already gave is not replaced
3composer.json and the git originFill what neither file gave (version, description, license, website)

Parse errors of extension.xml are collected and then cleared, so a persistent worker does not accumulate errors across requests.

ezinfo.php

<?php
class myextensionInfo
{
    static function info()
    {
        return array(
            'Name'      => "My Extension",
            'Version'   => "1.2.3",
            'Copyright' => "Copyright (C) 1998 - 2026 Exponential Foundation and 7x. All rights reserved.",
            'License'   => "GNU General Public License v2.0 (or any later version)",
            'Info_url'  => "https://github.com/se7enxweb/myextension"
        );
    }
}
?>

Rules the Exponential releases follow:

RuleWhy
The class name is the directory name plus Info—
Name is a readable name, not the directory nameenhancedezbinaryfile, xrowmetadata and exp_enhanced_link declared their directory name and showed it on the about page until the release of 30 September 2026
Keys are quoted stringsAn unquoted key such as Name is a constant lookup; fixed in explayouts_ui and explayouts_ui_api
info() is staticIt is called statically
Version has no v prefixTag v6.0.8 is 'Version' => "6.0.8"

extension.xml

<?xml version="1.0" encoding="utf-8" ?>
<software>
    <metadata>
        <name>Exponential Website Interface LS</name>
        <version>6.0.16</version>
        <copyright>Copyright (C) 1998 - 2026 Exponential Foundation and 7x. All rights reserved.</copyright>
        <license>GNU General Public License v2.0 (or any later version)</license>
        <info_url>https://github.com/se7enxweb/ezwebin</info_url>
    </metadata>
    <dependencies>
        <requires>
            <extension name="ezjscore" />
        </requires>
        <extends>
            <extension name="ezwt" />
        </extends>
    </dependencies>
</software>
  • <requires> names extensions that must be active; <extends> names extensions this one builds on.
  • The flat form, <extension requires="..."><name>..</name><summary>..</summary><version>..</version>...</extension> (used by syndication), is read the same way, from the top level.

Release rule

  1. Choose the release version.
  2. Write it into both files, in the commit the release tag will point at. Never tag first and bump afterwards: a published tag cannot be corrected.
  3. Move the other version fields of the repository with it: version in composer.json where present, and the version header of share/filelist.md5 where the extension has one.
  4. Set license to the full text GNU General Public License v2.0 (or any later version), or exactly what the extension's license file says, and info_url to the extension's project page.

//autogentag// and dev-master are not versions.

File manifest (share/filelist.md5)

An extension that ships share/filelist.md5 (for example cjw_newsletter) lists the checksum of each of its files. Setup > System Upgrade > File consistency check lists every line that no longer matches as a modified file, so refresh the manifest in the same release as any file change. Examples from cjw_newsletter:

ReleaseWhat happened
4.1.4Changed 21 files without refreshing the manifest; the check listed all of them
4.1.5Corrected the manifest
4.1.14The manifest left out 33 files under classes/runnable/
4.1.15The manifest lists all 309 tracked files

Check before publishing

Run in the extension directory:

php -l ezinfo.php
xmllint --noout extension.xml

Expected: No syntax errors detected in ezinfo.php, and no output from xmllint. Then confirm both files show the new version.

Since 29 October 2026 the copyright of Exponential is held by the Exponential Foundation and 7x together, the Foundation named first: "Exponential Copyright © 1998-2026 Exponential Foundation and 7x", in files "Copyright (C) 1998 - 2026 Exponential Foundation and 7x. All rights reserved." Who holds it and why, what the GPL lets you do, the third-party notices that stay and how to write the notice in new files and extensions: Copyright and copyleft.

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