spl:publish
Publish the local UVL model of an SPL through the marketplace, and record the DOI it reports.
Table of contents
- Usage
- Options
- You do not need a UVLHub key
- What happens on the other side
- Where the model is read from
- What it writes locally
- Publishing does not move any product
- Example
- When it refuses
- See also
Usage
splent spl:publish <spl_name> [--registry URL] [--dry-run]
Requires detached mode. The model belongs to the workspace, not to a product.
Options
| Option | Description |
|---|---|
--registry URL |
Marketplace to publish to. Defaults to SPLENT_MARKETPLACE_URL, then https://marketplace.splent.io. |
--dry-run |
Show what would be done without touching the network or metadata.toml. |
You do not need a UVLHub key
developer --(splent CLI, bearer token)--> MARKETPLACE --(one key)--> UVLHub
You authenticate to the marketplace with the token
splent login stored, send the .uvl, and get
back the DOI the marketplace recorded. The marketplace holds one UVLHub
key for everybody. You never hold one and never need to know UVLHub is
on the other side.
This command used to talk to UVLHub directly and asked every developer for
their own UVLHUB_API_KEY with the write_dataset scope. That is gone.
If you have that variable set from an older workspace, nothing reads it
any more.
Downloading is unaffected and still needs no account at all.
spl:fetch reads a published model straight from UVLHub
by DOI, and UVLHUB_URL still points those reads at another instance.
What happens on the other side
Everything that used to happen locally now happens on the server, on its key. The command finds the local model, sends it, and reports what came back.
| The marketplace sees | What it does |
|---|---|
| A line it has never seen | Creates a new dataset and mints a DOI |
| A line it knows | Publishes a new version of the DOI it already holds |
| Bytes it has already published | Answers with that DOI instead of minting a second one, reported as idempotent |
It also verifies the published file byte for byte against what was sent,
and reports the outcome as match, mismatch, pending, unknown or
imported. The command prints that verdict in plain words on a Checked
line.
Where the model is read from
Best first, and the first hit wins.
- The working copy,
splent_spl_<name>/<spl>.uvl. This is what you edit, so this is what gets published. - The cache,
.splent_cache/spls/<spl>@<version or DOI>/<spl>.uvl. Republishing something you only ever consumed is unusual but not wrong, and it is what lets a machine that never authored the model push a fix.
When neither exists the command lists every path it looked in and stops.
What it writes locally
Only the working copy’s metadata.toml, and only under [spl.uvl].
doiandfilealways,filebeing the name the server reports, which is not always the local one.concept_doiandversionwhen the marketplace reports them. Empty values are skipped rather than written blank, so a server that says nothing about the concept DOI never erases one already recorded.
The edit is text level, so comments and formatting survive. It is backed
by a .bak copy, written atomically, then re-parsed to confirm the values
landed. On any failure the original file is restored, so metadata.toml
is never left half written.
The cache is never written to. A DOI recorded there would be lost the moment the cache is cleared.
If there is no working copy, nothing local records the DOI, and the
command says so. Products that derive from the line need it in their own
pyproject.toml under [tool.splent.spl_model].
Publishing does not move any product
A new DOI is minted, and every product carries on deriving from the version it pins. The command finishes by naming them.
Products pinning this model, none of them updated here:
innosoft_app v2
diversolab_app v2
Move one forward with: splent spl:pin cms_spl
That is the difference between a DOI that was minted and a DOI that is in
use. See spl:pin and
spl:outdated.
Example
splent spl:publish cms_spl
Publishing cms_spl to https://marketplace.splent.io
DOI 10.5281/zenodo.21610307
Concept DOI 10.5281/zenodo.21610306
Version v3
File cms_spl.uvl
Checked the published file matches the model that was sent
Recorded /workspace/splent_spl_cms/metadata.toml
'cms_spl' published (DOI 10.5281/zenodo.21610307).
Use --dry-run first to see the model it picked, the registry it resolved
and whether you are logged in. It touches neither the network nor
metadata.toml.
When it refuses
| Situation | What happens |
|---|---|
| No local model | Every candidate path is listed, plus how to create or fetch one |
| Not logged in | Refuses before sending anything and points at splent login |
| Token expired or revoked | Reported, and the stored credential is dropped so the next run says “not logged in”. A token from SPLENT_MARKETPLACE_TOKEN is reported instead, since the CLI does not manage it |
| Publishing switched off on that marketplace | Reported apart from a server error. Nothing is broken and retrying will not help |
| Accepted but no DOI reported | Treated as a failure, because nothing usable came back |
See also
login. Required before publishingspl:fetch. The reverse direction, by DOI, no accountspl:pin. Move a product onto the new modelspl:outdated. Which products fell behind