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

What the package server is

The package server's job in an Exponential installation, what it is and is not, which parts of Exponential read from it, and the exact requests they make.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/site-packages/package-server/what-the-package-server-is.md

On this page

What the package server is

This page is for anyone who installs Exponential and wants to know what the installer talks to on the internet. It answers: what the package server does, what it does not do, which parts of Exponential use it, and which requests they send.

Contents

  1. Its job
  2. What it is not
  3. Who reads from it
  4. The requests, step by step
  5. How it answers
  6. Why a static site
  7. Related pages

Its job

The package server publishes the site installer packages of each Exponential release: the .ezpkg archives a new installation is built from, and one index.xml per release that lists them. The default server is https://exponential.packages.exponential.earth/.

The description of its repository on GitHub puts its role plainly: "This server is tied to the individual Exponential 6 Setup Wizard Installation Configuration Process used only once to install the software as designed. Users do not need to use this server outside the setup wizard usage."

So an installation reads from the server while it is being installed, and afterwards only when an administrator asks for another package (for example through ezupdate's package servers).

What it is not

It is not ...Because ...
an applicationit is a static HTTPS site published by GitHub Pages; nothing on it runs code
an account systemthere is no sign-in, no API key, no upload form; everyone gets the same files
a Composer repositoryComposer packages (extensions, the kernel) come from Packagist; the package server only holds .ezpkg files
a place for updates of a running sitean installed site does not check it; updating code is done with Git or Composer (Update with Git)
the only source of packagesthe installer also uses packages already in var/storage/packages/ and accepts an uploaded .ezpkg

Who reads from it

Part of ExponentialWhenCode
The setup wizard, step Site packagewhen the step is shown and when a package is chosenkernel/setup/steps/ezstep_site_types.php
The kickstarter (exp:kickstarter run)in the SiteTypes step, for [site_types] Site_package of kickstart.inithe same step class, in kickstart mode
The console install (exp:install --package=<name>)the same step, driven from the command linethe same step class
ezupdate, Package serverswhen an administrator lists a server's packages or fetches oneextension/ezupdate/classes/ezupdatepackageservers.php (in the ezupdate extension)

All of them use the same address, settings/package.ini [RepositorySettings] RemotePackagesIndexURL (Package server settings). ezupdate lists that server first, read only, next to servers you add yourself.

The requests, step by step

For the setup wizard, eZStepSiteTypes does this:

  1. It builds the index address: RemotePackagesIndexURL plus /index.xml. For 6.0.15:

    https://exponential.packages.exponential.earth/exponential/6.0/6.0.15/index.xml
  2. It downloads that file into the cache directory (<cache>/packages/index.xml), parses it and keeps every <package> element. For the list on the screen it keeps only those with type="site".

  3. When you choose a site package that is not imported yet, it downloads the package's url and imports it into var/storage/packages/7x/<name>/.

  4. It reads the imported package's <dependencies><requires> and, for every required package that is missing or older than its min-version, looks up its url in the same index and downloads it too.

Every download is a plain GET. With the PHP curl extension, site.ini [ProxySettings] ProxyServer (and User, Password) is used when set; redirects are followed (at most five). See the index.xml format for the file and How the setup wizard uses packages for the whole step.

How it answers

Checked on the live server:

RequestAnswer
GET /exponential/6.0/6.0.15/index.xml200, Content-Type: application/xml
GET /exponential/6.0/6.0.15/sevenx_multisite.ezpkg200, Content-Type: application/octet-stream, with Content-Length, Last-Modified and ETag
any of these filesCache-Control: max-age=600
a folder, such as /exponential/6.0/6.0.15/200, a generated directory listing page (Browsing the package server)
http:// instead of https://301 to the HTTPS address
a release folder that does not exist404

Note

max-age=600 means a file that was just republished can be served from a cache for up to ten minutes. A fixed package may therefore take a few minutes to reach every installer.

Why a static site

  • Nothing to break in. There is no server code, database or upload; the attack surface is the files.
  • Anyone can check it. Every file on the server is in a public Git repository with its full history (The package server on GitHub).
  • Anyone can copy it. A release folder is just files. Copy it to any web server or to disk and point RemotePackagesIndexURL at the copy (Offline installs and mirrors).
  • Contributions are pull requests. A new package reaches every installation by being merged into the repository (Contribute your site package).

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