Publishing research software
"Available on request" and "clone the repo" are not distribution.
Publishing puts software where its users already look - the package
index they install from, the registry they search, the journal that
tells them it was reviewed - and each channel has its own rules.
The neighboring skills own the mechanics this skill orchestrates:
rseng-publishing-releasing (versioned releases, changelogs, DOIs),
rseng-project-scaffolding (installable package structure),
rseng-software-peer-review (the JOSS process itself),
rseng-archiving (preservation). This skill is the channel strategy
and the index-specific craft.
Choose the channel mix by audience
- Users who pip/conda/install: a package index is non-negotiable -
it is the difference between a dependency and a science project.
- Researchers who search by domain: a Research Software Directory
instance and domain registries (rseng-software-reuse lists them) -
where discovery happens for people who do not know the package
name.
- Reviewers, citers, funders: a software journal entry (JOSS-class)
plus the archived, DOI'd release (rseng-archiving).
A healthy mature project typically has all three; a young one
starts with the index and adds the rest at first stable release.
State the recommended mix and why, then build it channel by
channel.
Package indexes: the craft per ecosystem
Common core across ecosystems: complete metadata (description,
license, URLs, authors - the index page IS a landing page:
rseng-fair-software's findability applied), semantic versioning
(rseng-publishing-releasing), and automated publication from CI with
provenance rather than laptop uploads
(rseng-ci-cd, rseng-security's trusted-publishing staircase).
- PyPI (Python): modern pyproject.toml packaging per the PyPA
guide (rseng-project-scaffolding's template does this); test on
TestPyPI first; use trusted publishing from CI; wheels plus
sdist; never delete released versions - yank instead.
- conda-forge: the community channel for the scientific stack and
the path when binaries/native deps matter (rseng-hpc-computing
users often live here); publication is a recipe PR to
staged-recipes, then a feedstock you maintain - it is a
community process with reviewers, not an upload.
- CRAN (R): the strictest gate - read the repository policies
before submitting; R CMD check --as-cran must pass cleanly on
multiple platforms, submissions are human-reviewed, and policy
violations get packages archived. rOpenSci's guide (and its
review - rseng-software-peer-review) is the community on-ramp.
- Other ecosystems follow the same shape (npm, crates.io, Julia
General registry): find the community's packaging guide, meet
its gate, automate the release.
Version-support policy belongs to publishing: which language/
dependency versions you support, tested in CI matrices, stated in
metadata (rseng-maintenance-sustainability owns the deprecation
half).
Registries: be found by field, not name
Register at first citable release, and keep entries alive:
- RSD instances harvest most metadata from the repository when
CITATION.cff and codemeta.json exist (rseng-citation-metadata) -
the entry is cheap if the metadata hygiene is there.
- Update triggers: new major release, changed maintainership,
publication of the software paper - a stale registry entry
pointing at a moved repository is worse than none.
- Link everything: registry entry <-> index page <-> repository <->
paper DOI <-> archive - the same both-ways discipline as
rseng-archiving and rseng-open-science-practices.
The publication checklist
Before announcing any channel as live, verify as a user would:
- Fresh-environment install from the index succeeds
(rseng-reproducible-environments provides the clean room).
- Index page renders correctly - description, links, license,
badges.
- Import/run smoke test passes on the installed (not cloned)
artifact.
- Citation instructions resolve (CITATION.cff shipped, DOI live).
- The announcement is drafted (rseng-science-communication) and the
aidecl.yaml reflects AI involvement in the release
(rseng-ai-declaration).
Working with this skill
This skill is source-independent: its authority is the packaging
guides and index policies linked below. It orchestrates the
channel-specific end of the publishing chain.
Learn more (verified):
Related skills
Check whether any of these applies before moving on:
- rseng-ci-cd - trusted publishing from CI
- rseng-citation-metadata - registries harvest CITATION.cff/codemeta
- rseng-project-scaffolding - installable package structure
- rseng-publishing-releasing - release mechanics behind each channel
- rseng-reproducible-environments - fresh-install verification clean room
- rseng-software-peer-review - JOSS submission pathway
1---2name: rseng-software-publishing3description: Covers publishing research software through its distribution channels: packaging for and releasing on package indexes (PyPI, conda-forge, CRAN and ecosystem equivalents), registering in research software registries, submitting to software journals (JOSS-style), and choosing the channel mix for a project's audience. Use when the user wants their software installable by others, asks how to publish on PyPI, CRAN or conda-forge, wants the software listed where researchers search, or when a mature project is only obtainable by cloning its repository. (Cutting versioned releases and DOIs: rseng-publishing-releasing; the JOSS review process: rseng-software-peer-review; preservation: rseng-archiving.)4license: CC-BY-4.05---67# Publishing research software89"Available on request" and "clone the repo" are not distribution.10Publishing puts software where its users already look - the package11index they install from, the registry they search, the journal that12tells them it was reviewed - and each channel has its own rules.13The neighboring skills own the mechanics this skill orchestrates:14rseng-publishing-releasing (versioned releases, changelogs, DOIs),15rseng-project-scaffolding (installable package structure),16rseng-software-peer-review (the JOSS process itself),17rseng-archiving (preservation). This skill is the channel strategy18and the index-specific craft.1920## Choose the channel mix by audience2122- Users who pip/conda/install: a package index is non-negotiable -23 it is the difference between a dependency and a science project.24- Researchers who search by domain: a Research Software Directory25 instance and domain registries (rseng-software-reuse lists them) -26 where discovery happens for people who do not know the package27 name.28- Reviewers, citers, funders: a software journal entry (JOSS-class)29 plus the archived, DOI'd release (rseng-archiving).3031A healthy mature project typically has all three; a young one32starts with the index and adds the rest at first stable release.33State the recommended mix and why, then build it channel by34channel.3536## Package indexes: the craft per ecosystem3738Common core across ecosystems: complete metadata (description,39license, URLs, authors - the index page IS a landing page:40rseng-fair-software's findability applied), semantic versioning41(rseng-publishing-releasing), and automated publication from CI with42provenance rather than laptop uploads43(rseng-ci-cd, rseng-security's trusted-publishing staircase).4445- PyPI (Python): modern pyproject.toml packaging per the PyPA46 guide (rseng-project-scaffolding's template does this); test on47 TestPyPI first; use trusted publishing from CI; wheels plus48 sdist; never delete released versions - yank instead.49- conda-forge: the community channel for the scientific stack and50 the path when binaries/native deps matter (rseng-hpc-computing51 users often live here); publication is a recipe PR to52 staged-recipes, then a feedstock you maintain - it is a53 community process with reviewers, not an upload.54- CRAN (R): the strictest gate - read the repository policies55 before submitting; R CMD check --as-cran must pass cleanly on56 multiple platforms, submissions are human-reviewed, and policy57 violations get packages archived. rOpenSci's guide (and its58 review - rseng-software-peer-review) is the community on-ramp.59- Other ecosystems follow the same shape (npm, crates.io, Julia60 General registry): find the community's packaging guide, meet61 its gate, automate the release.6263Version-support policy belongs to publishing: which language/64dependency versions you support, tested in CI matrices, stated in65metadata (rseng-maintenance-sustainability owns the deprecation66half).6768## Registries: be found by field, not name6970Register at first citable release, and keep entries alive:7172- RSD instances harvest most metadata from the repository when73 CITATION.cff and codemeta.json exist (rseng-citation-metadata) -74 the entry is cheap if the metadata hygiene is there.75- Update triggers: new major release, changed maintainership,76 publication of the software paper - a stale registry entry77 pointing at a moved repository is worse than none.78- Link everything: registry entry <-> index page <-> repository <->79 paper DOI <-> archive - the same both-ways discipline as80 rseng-archiving and rseng-open-science-practices.8182## The publication checklist8384Before announcing any channel as live, verify as a user would:85861. Fresh-environment install from the index succeeds87 (rseng-reproducible-environments provides the clean room).882. Index page renders correctly - description, links, license,89 badges.903. Import/run smoke test passes on the installed (not cloned)91 artifact.924. Citation instructions resolve (CITATION.cff shipped, DOI live).935. The announcement is drafted (rseng-science-communication) and the94 aidecl.yaml reflects AI involvement in the release95 (rseng-ai-declaration).9697## Working with this skill9899This skill is source-independent: its authority is the packaging100guides and index policies linked below. It orchestrates the101channel-specific end of the publishing chain.102103Learn more (verified):104 - https://packaging.python.org - Python Packaging User Guide105 - https://pypi.org - PyPI106 - https://conda-forge.org - conda-forge107 - https://cran.r-project.org/web/packages/policies.html - CRAN108 repository policies109 - https://devguide.ropensci.org - rOpenSci packaging guide110 - https://joss.theoj.org - Journal of Open Source Software111 - https://research-software-directory.org - Research Software112 Directory113114<!-- related-skills:begin -->115116## Related skills117118Check whether any of these applies before moving on:119120- rseng-ci-cd - trusted publishing from CI121- rseng-citation-metadata - registries harvest CITATION.cff/codemeta122- rseng-project-scaffolding - installable package structure123- rseng-publishing-releasing - release mechanics behind each channel124- rseng-reproducible-environments - fresh-install verification clean room125- rseng-software-peer-review - JOSS submission pathway126127<!-- related-skills:end -->