The package server on GitHub
This page is for developers who want to understand, copy or contribute to the package server. It explains the
repository se7enxweb/exponential.packages.exponential.earth,
how GitHub turns it into https://exponential.packages.exponential.earth/, and what each file outside the release
folders is for. Repository facts were read with gh api (read only) on 2026-10-18.
Contents
- The repository
- From push to web site
- The workflow file
- The directory listing action
- CNAME
- FUNDING.yml
- crossdomain.xml and README.md
- Copying the setup for your own server
- Related pages
The repository
| Property | Value |
|---|---|
| Name | se7enxweb/exponential.packages.exponential.earth |
| Visibility | public |
| Default branch | master |
| Homepage | https://exponential.packages.exponential.earth/ |
| Fork of | ezpublishlegacy/packages.ezpublishlegacy.com, the 2014 mirror (History) |
| Size | about 2.5 GB with its history (the GitHub API reports 2,520,299 KB) |
| Issues | enabled |
| Commits | 341 (to 2026-10-16) |
The tree:
.github/FUNDING.yml
.github/workflows/workflow.yml
CNAME
README.md
crossdomain.xml
exponential/6.0/<version>/index.xml
exponential/6.0/<version>/<name>.ezpkg
exponential/6.0/<version>/thumbnails/<name>.pngTip
The repository is large because every .ezpkg of every release is kept in its history. For reading, clone it
without blobs: git clone --filter=blob:none https://github.com/se7enxweb/exponential.packages.exponential.earth.git,
then use git log and git ls-tree -r -l HEAD; Git fetches a file's content only when you open it.
From push to web site
| Step | What happens |
|---|---|
| 1 | A commit is pushed to master (directly or by merging a pull request) |
| 2 | The workflow main starts (on: [push]) |
| 3 | Job pages-directory-listing checks out master, writes an index.html into every folder and uploads the whole tree as the Pages artifact |
| 4 | Job deploy publishes that artifact to the github-pages environment |
| 5 | GitHub Pages serves it under the custom domain from CNAME, HTTPS enforced |
The Pages settings, as the API reports them: build type workflow (not a branch), source branch master, custom
domain exponential.packages.exponential.earth, HTTPS enforced. The workflow has run 150 times; the
runs are listed under Actions.
Note
While a deployment runs, the server can answer with errors for a few minutes. This is why the setup wizard retries a failed download (When the package server cannot be reached).
The workflow file
.github/workflows/workflow.yml, shortened to its working lines:
name: main
on: [push]
concurrency:
group: pages
cancel-in-progress: false
jobs:
pages-directory-listing:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
with:
ref: master
- uses: jayanta525/github-pages-directory-listing@main
with:
FOLDER: .
- uses: actions/upload-pages-artifact@v3
with:
path: '.'
deploy:
needs: pages-directory-listing
permissions:
pages: write
id-token: write
environment:
name: github-pages
runs-on: ubuntu-latest
steps:
- id: deployment
uses: actions/deploy-pages@v4| Part | Why |
|---|---|
concurrency: group: pages, cancel-in-progress: false | One deployment at a time. Its comment: "A push that arrives while a deployment runs waits for it, and only the newest waiting push deploys; each deployment publishes the whole tree as of its commit, so nothing is lost when an older waiting one is skipped." Added on 2026-10-12, when packages pushed one after another made each other's deployments fail |
ref: master | Always deploys the branch, whatever ref was pushed |
FOLDER: . | Listing pages for the whole tree, from the top |
path: '.' | The whole checkout is the site |
permissions | The deploy job may write to Pages and request an OIDC token, which deploy-pages needs |
The real file also has steps that print ls -al and du -sh ., to see the size of the artifact in the log.
The directory listing action
jayanta525/github-pages-directory-listing generates
the "Index of /..." page for each folder. What the pages look like is described in
Browsing the package server in a browser. Before 2023-12-24 the
server used a JavaScript file browser in a hand-made index.html; it was replaced by this action.
CNAME
CNAME holds one line, the host name GitHub Pages answers to:
exponential.packages.exponential.earthIt has had this value since 2025-08-13. Changing it moves the site to another host name; every installation whose
RemotePackagesIndexURL names the old one would then depend on a redirect. Do not change it in a pull request.
FUNDING.yml
.github/FUNDING.yml makes GitHub show a Sponsor button on the repository. It names GitHub Sponsors for the
se7enxweb organization, Patreon, and custom links to PayPal, Venmo, Cash App and https://se7enx.com. It was created
on 2023-12-24. It has no effect on the web site. See Who is the Exponential Foundation?
for how the project is funded.
crossdomain.xml and README.md
crossdomain.xmlis a cross-domain policy that allows access from any domain (<allow-access-from domain="*"/>). It came with the 2014 mirror; nothing in Exponential reads it.README.mdnames the server ("Package server for Exponential 6."), the date of its last update, and links to the project, the package server, the documentation, the community and the vendor. It is served as a file of the site and shown on the repository's front page.
Copying the setup for your own server
The same three things make any repository a package server: release folders with an index.xml and the packages, a
Pages workflow like the one above, and, if you want your own host name, a CNAME file and a DNS record for it. See
Running your own package server. For a package that everyone
should get, a pull request to this repository is the better way:
Contribute your site package.
Related pages
- Site packages: start here
- The package server
- History of the package server
- How a release reaches the package server
- The source repositories
- 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.