The theme registry for Shopclass — the catalog a Shopclass site browses, installs, and updates themes from, with GitHub itself as the backend. No market server, no accounts, no database anywhere but the site's own.
Registrations are open, by pull request — see CONTRIBUTING.md for the walkthrough, what CI
checks, and what a maintainer reviews beyond that. This repo has no in-repo release workflow
(nothing here needs one yet — see "Currently registered" below); a new release of bender or
storefront in its own repository is picked up by the catalog's daily schedule automatically.
Most Shopclass themes already live in their own repository with their own release cadence —
bender and storefront both do. For a theme like that, registration is the normal
path: one small JSON file here that points at the theme's real home, not a copy of its
source.
-
External registration (the default). The theme stays in the author's own repository.
external/<slug>.jsonrecords where to find it — a GitHub repo and a pattern matching its release asset. A scheduled job resolves that into a catalog entry by reading the theme's real header block out of the released zip, so the catalog can never drift from what a site actually installs. See CONTRIBUTING.md. -
In-repo hosting (the exception). For a theme with no home of its own, the full package lives here under
themes/<slug>/instead, and this repository is what builds and releases it. Reach for this only when option 1 genuinely isn't available.
Both paths produce an identical catalog entry — a Shopclass install cannot tell which one a theme took.
| Theme | Hosting | Latest | Role |
|---|---|---|---|
bender |
External — mindstellar/theme-bender | v3.3.1 | Legacy default theme, superseded by Storefront in Shopclass 6.0.0. Still maintained for existing installs. |
storefront |
External — mindstellar/theme-storefront | v1.0.2 | Bundled default theme since Shopclass 6.0.0. |
This registry publishes a static, versioned catalog that core reads directly — no per-package API calls, one conditional GET per day:
| File | Purpose |
|---|---|
v1/updates.json |
Every registered theme, every released version, with its compatibility fields and downloads — what an install's update check polls |
v1/index.json |
Slim browse list — slug, name, short description, author, latest version, icon, categories, tags, updated_at, downloads |
v1/packages/<slug>.json |
Full detail — rendered README, screenshots, per-version changelog, links, downloads |
v1/categories.json |
The category vocabulary in schema/categories.json, with counts |
downloads is GitHub's own cumulative release-asset download count (includes CI, mirrors, and
repeat downloads — not an install count); the admin's Browse tab can sort by it, and otherwise
defaults to "Recently updated" (updated_at, taken from each theme's newest release).
Published to GitHub Pages from a catalog branch, live at
https://mindstellar.github.io/shopclass-themes/v1/…, mirrored at
https://raw.githubusercontent.com/mindstellar/shopclass-themes/catalog/v1/… for when Pages
is unreachable. catalog.yml rebuilds on release, daily, and on demand.
| Piece | Status |
|---|---|
Schemas (schema/*.schema.json), category vocabulary |
Real — validated in this repo |
external/bender.json, external/storefront.json |
Real registrations |
CONTRIBUTING.md walkthrough, tools/package-lint.php (in core) |
Real — you can run it today |
PR validation — external registrations (.github/workflows/pr-validate.yml): schema, reachability, release/asset resolution, package-lint against the downloaded artifact |
Real |
PR validation — in-repo themes: schema, package-lint, php -l, deprecated-API scan, smoke install |
Real |
Release build (release.yml) — zip, tag, GitHub Release per package |
Not applicable yet — no in-repo theme exists to release; see below |
Catalog build (catalog.yml) and the catalog branch / Pages deploy |
Real — live at the URLs above, rebuilding on release, daily, and on demand |
Core catalog client (Catalog, Browse/Updates tabs, install/update) |
Real — shipped in Shopclass 6.1.0 |
| Catalog signing | Not built |
| Rendered author-docs site | Not built |
Every theme registered here today is external, so there is nothing for a release workflow to
build yet — release.yml does not exist in this repository. The moment a theme is hosted
in-repo under themes/<slug>/ (Path 2 in CONTRIBUTING.md), it needs the
release workflow the plugin registry already runs: detect a Version: header change on push to
main, build <slug>_<version>.zip honouring .distignore with a single top-level directory
named for the slug, tag and publish a GitHub Release from it, then trigger catalog.yml. That
must be shopclass-plugins' release.yml
and its tools/detect-version-changes.sh / tools/build-release-zip.sh /
tools/changelog-section.sh, copied here unchanged rather than a second implementation of the
same job — the discipline catalog.yml already follows in both repos.
The system design and full phasing live in docs/MARKET.md in the
mindstellar/shopclass repository; the package
contract this registry validates against is docs/PACKAGE-SPEC.md there.
GPL-3.0-or-later. See CODE_OF_CONDUCT.md for community expectations.