Authoring
Publishing
A pull request here, or your own marketplace repository, and what a pin does.
A marketplace is a GitHub repository with an addons/ directory and a generated marketplace.json at its root. That is the whole format.
Through the official marketplace
Open a pull request adding your directory. It is reviewed, and once merged it ships to every player, because the official marketplace is built into the loader and cannot be removed. Review is what makes it the trust anchor.
Addons contributed here are under the repository's MIT licence.
Running your own
Copy .github/workflows/marketplace.yml as it is. It regenerates the index from the addon.json files on every push. Its README step does nothing unless your README carries the <!-- addons:start --> markers.
Never hand-edit marketplace.json.
pnpm index
Players add your source by owner and repository. The loader warns them plainly at that moment that they are trusting you with their account, because they are.
Pin to a tag
A source can point at a branch or a tag. Point yours at a tag if you want installs to be reproducible: a branch means the code can change under an installed player without any version moving.
What an FQID is
Every installed addon is identified by its marketplace id plus its addon id. That pair is the storage namespace, so the same addon id published from two sources is two addons with separate settings and data.
Moving a source to a different tag never changes its id, so everything installed from it keeps its settings, keybinds and data.
Updates, and pins
The loader compares your published version against what a player has and offers an update. It never installs one by itself, for any marketplace: an update is always a player pressing a button. Bump version for every change a player should receive, or nobody already installed gets it.
A player can pin an addon, which means "stop offering", not "install that instead". A marketplace serves one version per ref, so there is no older body to go back to. The row stays visible carrying its pin, saying an update exists and the player's own choice is holding it back.