Get listed in the store.
Your microfirmware is built and hosted, but only you know it exists. This step adds it to the catalogue every device downloads, which is one small pull request against this repository.
What you are actually asking for
The store does not host your files and does not want a copy of them. It keeps a
registry of origins, and an origin is two things: who
you are, and the URL of the apps.json you already host.
A build job fetches every origin in that registry, merges what it finds into one catalogue per channel, and publishes it. So you are not submitting your apps. You are submitting a pointer to them, and you keep control of what is on the other end.
Adding an app, releasing a new version, fixing a description: none of those need
another pull request. You edit your own apps.json in place, at the same
URL, and the store picks it up on its next build. The registry entry only names where
to look.
Before you start
Fork, and open the right file
Fork this repository, clone your fork, and branch:
git checkout -b add-my-origin
Which file you edit depends on the channel you picked in step 10:
| Channel | Registry file |
|---|---|
| Stable | origins/atari-st.json |
| Testing | origins/atari-st-test.json |
| Development | origins/atari-st-dev.json |
atari-st/apps.json.
That file and its siblings are generated by the build from the registry. Anything you write there is overwritten on the next run, and a pull request that changes it will be sent back.
Append your entry
The file has a platform, a channel, and an origins
array whose first entry is SidecarTridge's. Add one object to the end of that array, and
mind the comma after the entry before yours:
{
"creator": {
"id": "retro-homebrew",
"name": "Retro Homebrew Collective",
"url": "https://retro-homebrew.example"
},
"official": false,
"enabled": true,
"url": "https://retro-homebrew.example/atari-st/apps.json"
}
That is the whole change. Four things to get right:
| Field | What to put, and why |
|---|---|
creator.id |
A lowercase-kebab slug, unique on the platform. It becomes your filter key in the store, so pick one you can live with. Changing it later reads as a different creator. |
official |
Always false. true marks the first-party SidecarTridge
origin, exactly one registry entry may carry it, and a creator entry that sets it
is rejected. |
enabled |
true. Set it false later to keep your entry on file
but leave it out of the build. |
url |
Your hosted apps.json. There is also a source field
for files kept inside this repository. It is not for creators, so always use
url. |
creator also takes an optional image and contact.
The full field reference is in
CREATORS.md .
Run the check before you push
The pull request runs a required check. You can run exactly the same thing locally, which turns a review cycle into a ten-second loop:
pip install jsonschema # enables the strict validator
python3 tools/build_catalog.py --check --strict # exactly what the PR check runs
A pass ends with one line:
check: OK
Anything else means something is wrong, and the lines above name the file and the rule.
Because --strict actually fetches your URL, this also catches
a host that is unreachable or a path you mistyped, which is the failure most likely to
embarrass you in review.
Build the catalogue locally and serve the repository:
python3 tools/build_catalog.py --platform atari-st
python3 -m http.server # then open http://localhost:8000
You will see a line per origin, such as
- retro-homebrew (unofficial): +3 app(s). These local builds are
throwaway, so do not commit the regenerated atari-st/apps.json
in your pull request.
Open the pull request
Commit the registry change on its own and open a pull request against main. A
reviewer wants three things in the body: the apps.json URL, one line on what
your microfirmwares do, and anything unusual they should know.
Opening it triggers the Validate origins check, which validates your
registry entry, fetches your apps.json, and validates that too. It must be
green before the pull request can merge. If it fails, the troubleshooting table in
CREATORS.md
maps each message to its cause.
After a maintainer merges it, the build folds your listing into the published catalogue and the site deploys. Your apps appear under your creator name, with a filter for browsing just yours.
What the build does to your data
Your apps.json is not copied verbatim. Four things happen to it, so that every
creator's data behaves the same way. None of them is a surprise once you know.
- Your apps are tagged with your creator id and shown under your name.
-
Duplicate UUIDs resolve in SidecarTridge's favour. If one of your apps
shares a
uuidwith theirs, yours is dropped. Use your own. -
Device names are rewritten to canonical spellings. For Atari ST those
are
ST,STE,MegaST,MegaSTE,TTandFalcon. Case, punctuation and a leading platform name are ignored, soAtari MegaSTandatari-megastboth resolve. A name matching nothing is kept as written and reported in the log, never discarded, but it will appear in the store as its own filter entry. -
descriptionis sanitised to a whitelist of tags when it is rendered.
Afterwards
You are done with this repository. To ship a new version, bump
version.txt, rebuild, upload the new .uf2, and update your own
apps.json in place at the same URL. The store rebuilds daily and picks it up.
Ask a maintainer if you need it sooner.
You installed a toolchain, flashed a bootloader, built from a template, learned the memory map, wrote something of your own, debugged it on real 1980s hardware and got it into the catalogue that every SidecarTridge device downloads.
If any page here was wrong, unclear or out of date, please say so . The next person following this will thank you.