Marketplace
The CLI side of the SPLENT marketplace. It builds and searches the feature index, and logs you in to publish SPL models. The web catalog, the UVL configurator and third-party publishing are explained in the Marketplace section.
The index is a cache you can rebuild, never a second source of truth. Everything it knows about a feature comes from the feature’s [tool.splent.contract] at its latest released tag, and everything it knows about variability comes from the SPL lines the marketplace publishes, read at their DOI. With --local it is built from the workspace instead.
The model
- Releasing a feature publishes it.
feature:releasetags the repository and uploads to the forge and PyPI. There is no upload, account or API for features on the marketplace. - Publishing an SPL model goes through the marketplace.
spl:publishsends the.uvlto the marketplace, which relays it to UVLHub with its own key and returns the DOI. This is the only thinglogin,whoamiandlogoutare for. You never hold a UVLHub key. - The index is derived.
marketplace:indexscans the forge organisations and any registered third-party repositories, reads each contract at its latest tag and writes oneindex.json. When it is stale or lost, rebuild it. - Third parties are curated. An external author releases on their own forge organisation, and a reviewed pull request adds the repository to the registry file
marketplace:index --registryreads. Contracts are validated when the index is built. - The CLI and the web share the index.
marketplace:searchandfeature:inforead the local copy in.splent_cache/marketplace/index.jsonwhen it exists.SPLENT_INDEX_URLis fetched only when that copy is missing or with--refresh, and a successful fetch becomes the new copy. The published build is athttps://git.splent.io/splent-io/splent_index/raw/branch/main/index.json.
What the index contains
| For each | It holds |
|---|---|
| Feature | The full contract (provides, requires, extensible, docker), the derived archetype, description, category, tags, the latest git tag, PyPI presence, reverse dependencies (used_by) and the source repository |
| SPL | The DOI and the parsed UVL (mandatory and optional features, alternative groups, constraints) |
| Index | The collisions, features that provide the same route, service or model and can only coexist behind an alternative group |
Commands
| Command | Purpose |
|---|---|
marketplace:index |
Build index.json from forge organisations, a registry file or the workspace (--local) |
marketplace:search |
Search the index, or list a forge organisation live |
login |
Log in to a marketplace and store the token per registry |
whoami |
Show the identity, scopes, expiry and which credential is in use |
logout |
Revoke the token on the server and remove it locally |
feature:search |
Alias of marketplace:search |
feature:info |
Show a feature’s contract without cloning it |
check:contracts |
Check that contracts and the UVL constraints agree on dependencies |
login, whoami and logout carry no namespace, like docker login.
Which marketplace
| Variable | Effect |
|---|---|
SPLENT_MARKETPLACE_URL |
The registry to talk to, https://marketplace.splent.io by default. login, whoami and logout also take --registry URL. The --registry of marketplace:index is something else, the path of a registry.toml |
SPLENT_MARKETPLACE_TOKEN |
A token from the environment. It wins over the stored one, which suits CI |
SPLENT_CREDENTIALS |
The path of the credential store. See where the token is stored |
Credentials are kept per registry, so a production marketplace and a local one coexist. A local marketplace answers at http://splent_marketplace_app_web:5000 from inside splent_cli_container and at http://localhost:5818 from the host.