A multiple Item package provides the ability to package multiple installable bundles which can then be downloaded and installed by a user, or provided pre-packaged with an application or by an external program. Every multiple item package must provide an install.rdf file (not old-style install.js!) and has the same requirements as an extension except as noted below.
There is currently no feature to prevent or warn the user when installing an older version of an extension.
Multiple Item Package File Layout
The multiple item package file layout is a simplified form of an installable bundle and requires a file extension of xpi
. A multiple item package may contain both extensions (e.g. xpi
file extension) and themes (e.g. jar
file extension). The basic structure is shown below:
/install.rdf Install Manifest /extension1.xpi Extension /extension2.xpi Extension /theme1.jar Theme /theme2.jar Theme ...
The Extension Manager will read the install.rdf
Install Manifest to determine if this is a Multiple Item Package and then start the installation of the individual packages it contains automatically. No other files besides the install.rdf Install Manifest and the files with a jar
and xpi
file extension will be extracted or utilized.
install.rdf
A multiple item package does not have the same requirements as an extension for its install.rdf. The only required properties are em:id
, em:targetApplication
, and em:type
.
For the Firefox and Thunderbird 1.5 Extension Manager to determine that the package is a multiple item package, the em:type
specified in your install.rdf must be 32
and specified as <em:type NC:parseType="Integer">32</em:type>
. The XML namespace xmlns:NC="https://home.netscape.com/NC-rdf#"
must also be declared in your install.rdf as shown below.
... <RDF xmlns="https://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:NC="https://home.netscape.com/NC-rdf#" xmlns:em="https://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <!-- nsIUpdateItem type for a Multiple Item Package --> <em:type NC:parseType="Integer">32</em:type> ...
For the Firefox and Thunderbird 2.0 Extension Manager you can use the above syntax or <em:type>32</em:type>
as shown below.
... <RDF xmlns="https://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="https://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <!-- nsIUpdateItem type for a Multiple Item Package --> <em:type>32</em:type> ...
When specifying em:targetApplication
the minVersion
specified should be the highest minVersion
and the maxVersion
specified should be the lowest maxVersion
from all of the installable bundles contained by the multiple item package for the em:targetApplication
. If this is not done, any items that are not compatible will not be installed unless a compatibility check discovers updated compatibility information.
Installation
Installation can be performed using any of the existing methods used for installing extensions / themes. The same user interface is used for installing a multiple item package (i.e. the individual packages contained in the multiple item package will not be listed). This also allows displaying of signing information for the multiple item package.
If a manager (e.g. extension / theme manager) is used, the manager will display the individual items contained by the multiple item package after the download completes in the same manner that it would if the user had chosen to install multiple individual items simultaneously. The manager will not display the multiple item package in the list of items after the download has completed.
Signing
All extensions now require signing by Mozilla. For multiple item packages, all internal add-ons need to be signed, but the container doesn't need to be signed. This means that the contained add-ons need to be submitted to AMO individually for signing. Additionally, the container add-on ID must not be the same as the ID of any of the contained add-ons.
Official References for Toolkit API
Official References. Do not add to this list without contacting Benjamin Smedberg. Note that this page is included from the pages listed below. So: Don't Add Breadcrumbs!
- Structure of an Installable Bundle: describes the common structure of installable bundles, including extensions, themes, and XULRunner applications
- Extension Packaging: specific information about how to package extensions
- Theme Packaging: specific information about how to package themes
- Multiple-item Extension Packaging: specific information about multiple-item extension XPIs
- XUL Application Packaging: specific information about how to package XULRunner applications
- Chrome Registration