The catalogue
The Store reads one file, catalog.json, from the latest LedgeAddOns release. It lists each add-on and where to download its files, with a hash for each one.
Where it lives
https://github.com/Ammyy9908/LedgeAddOns/releases/latest/download/catalog.jsonEvery release is tagged catalog-<commit>, after the reviewed commit it was built from, and its files never change once published.
Format
{
"schemaVersion": 1,
"sourceCommit": "fee6376d70ff44c322363157ed3ec8fe7a36a51e",
"entries": [
{
"id": "spotify-likes",
"name": "Spotify Likes",
"summary": "Like Spotify songs from your Ledge player",
"version": "1.0.0",
"architectures": ["arm64", "x86_64"],
"files": {
"executable": { "url": "https://github.com/…/spotify-likes.binary", "sha256": "…" },
"manifest": { "url": "https://github.com/…/spotify-likes.manifest.json", "sha256": "…" },
"icon": { "url": "https://github.com/…/spotify-likes.icon.png", "sha256": "…" }
},
"listing": {
"developer": "Ledge",
"category": "Media",
"availability": "Free · macOS 14 or later",
"description": "…",
"feedbackURL": "https://github.com/…/issues/new",
"screenshots": [{ "url": "https://github.com/…/spotify-likes.preview-….png", "sha256": "…" }],
"motionDemo": { "url": "https://github.com/…/spotify-likes.preview-….mp4", "sha256": "…" }
}
}
]
}listing comes from the add-on's listing.json, with each screenshot and demo turned into a release address and hash. Older entries have no listing; their page in the Store says what's missing rather than inventing it.
What Ledge checks
| Check | Rule |
|---|---|
| Schema | schemaVersion is 1, and sourceCommit is a full 40-character commit hash |
| Entries | At most 100, each with a unique ID in the same format as the manifest |
| Files | Exactly three per entry: executable, manifest and icon |
| Architectures | Only arm64 and x86_64 |
| Addresses | Packages, screenshots and demos all on HTTPS on github.com, inside this catalogue's own release, with no query or fragment |
| Listing | Developer, category and availability present; feedback address on HTTPS; at most 8 screenshots; no negative install count |
| Hashes | Each downloaded file, screenshot and demo must match its SHA-256, or it isn't used |
| Sizes | The catalogue at most 1 MB, a manifest 64 KB, an icon 4 MB and an executable 32 MB |
After the download, Ledge validates the package exactly as it does a local one, then asks you to trust it. Nothing runs before that.