Marketplace
The SPLENT marketplace is built on one rule: the index is a regenerable
cache, never a second source of truth. Everything the marketplace knows
about a feature derives from the feature’s own pyproject.toml — the
auto-generated [tool.splent.contract] — read at its latest released tag,
plus the SPL catalog (splent_catalog) for variability.
The model
- Publishing is releasing.
splent feature:releasebumps the version, regenerates the contract, tags the repo and uploads to GitHub/PyPI. The tag IS the publication — there is no separate upload to the marketplace, no login, and no publish API. - The index is derived.
splent marketplace:indexscans the configured GitHub organisations (and any explicitly registered third-party repos), reads each feature’s contract at its latest tag, and emits a singleindex.json. If the index is ever stale, wrong or lost: rebuild it. Nothing is edited in place. - Third parties are curated, not uploaded. External authors release
their feature on their own GitHub org, then get listed by adding their
org/repo to the registry file consumed by
marketplace:index --registry(a reviewed pull request — the Homebrew-tap model). The indexer validates contracts at build time; authors never push data into the marketplace. - CLI and web share the same index.
feature:searchandfeature:inforead the sameindex.jsonthe marketplace web app serves. SetSPLENT_INDEX_URLto consume a published index; without it, commands use the locally built copy in.splent_cache/marketplace/index.json.
What the index contains
Per feature: the full contract (provides / requires / extensible / docker),
the derived archetype, presentation metadata (description, category,
tags), distribution state (latest Git tag, PyPI presence), reverse
dependencies (used_by) and the source repo. Per SPL: the parsed UVL
structure — mandatory/optional features, alternative groups, and
constraints. Plus computed collisions: features that provide the same
route/service/model and therefore can only coexist behind an alternative
group.
Commands
| Command | Purpose |
|---|---|
marketplace:index |
Build index.json from GitHub orgs, a registry file, or the workspace (--local). |
feature:search |
Search the index (query + filters by category/archetype/tag/provides/requires). |
feature:info |
Full contract card of a feature without cloning it. |
check:contracts |
Verify contracts and SPL UVL constraints tell the same dependency story. |