Manifests And Plugin Entry Points#

conda-ship supports conda-workspaces manifests and Pixi manifests.

conda-ship is not an environment manager. It consumes a solved conda environment and turns it into runtimes.

Manifest Priority#

conda-ship looks for conda.toml, then pixi.toml, then a supported pyproject.toml in the build root. The embedded pyproject.toml form requires a nonempty [tool.conda.workspace] or [tool.pixi.workspace] table.

A nonempty [tool.conda.workspace] takes precedence when both are present. Otherwise, a nonempty [tool.pixi.workspace] selects Pixi input, even if [tool.conda] contains other settings. Conda-workspaces input uses conda.lock, and Pixi input uses pixi.lock. See Configuration Reference for the supported pairs.

The lockfile remains the source of concrete package records. If the selected lockfile is missing, create it with the tool that owns the manifest, then run cs inspect or cs build --dry-run again.

Source Environment Selection#

The solved environment used for the runtime is selected explicitly by [tool.conda-ship].source-environment:

[tool.conda-ship]
runtime-name = "demo"
delegate-executable = "conda"
artifact-layout = "online"
source-environment = "ship"
exclude-packages = ["conda-libmamba-solver"]
docs-url = "https://example.com/demo/"

If source-environment is omitted, conda-ship fails. That keeps release builds from accidentally packaging a default, development, or test environment.

conda-ship derives a runtime lock that contains only the selected source environment, renamed to default for the generated runtime. The derived lock is stamped into staged runtimes and copied into the staged artifact directory. It is build output, not another source project lockfile.

Conda Workspace Shape#

A conda-workspaces project defines packages and channels using the conda-workspaces schema and configures the runtime build in [tool.conda-ship]:

[workspace]
name = "demo"
channels = ["conda-forge"]
platforms = ["linux-64", "osx-arm64", "win-64"]

[feature.ship.dependencies]
python = ">=3.12"
conda = ">=25.1"
conda-rattler-solver = "*"
conda-spawn = ">=0.1.0"

[environments]
ship = { features = ["ship"], no-default-feature = true }

[tool.conda-ship]
runtime-name = "demo"
delegate-executable = "conda"
artifact-layout = "online"
source-environment = "ship"
exclude-packages = ["conda-libmamba-solver"]

[tool.conda-ship] is for conda-ship build behavior: which source environment to turn into a runtime, which packages to prune after the solve, artifact naming policy, bundle policy, and runtime documentation links.

Package and channel settings belong in the conda workspace sections when that manifest is available. conda-ship reads the selected lockfile environment and stamps the resolved package names and channel URLs into runtime metadata.

For conda-workspaces projects that keep conda config in pyproject.toml, use [tool.conda.*] table names, such as [tool.conda.workspace] and [tool.conda.feature.ship.dependencies]. For Pixi projects, use Pixi’s [tool.pixi.*] table names, such as [tool.pixi.workspace] and [tool.pixi.feature.ship.dependencies]. [tool.conda-ship] remains a separate tool table because it configures conda-ship. A pyproject.toml containing only that table is not a supported source manifest.

CLI Entry Points#

cs is the primary builder command. The Python adapter also provides conda ship when installed in a conda environment. It runs the same cs builder and forwards the arguments.

By default, the adapter uses the cs executable next to the current Python interpreter. It does not search PATH. Set CONDA_SHIP_EXECUTABLE to select a different executable for tests or custom packaging. An invalid override causes an error. See conda ship Reference for packaging requirements and project metadata version support.

Builder And Runtime Template#

The downstream project manifest lives in the downstream repository. The conda-ship builder and generic runtime template come from the conda-ship release or package installation.

cs build copies the selected template, stamps the copy with the runtime name, delegate, install scheme, install name, runtime lock, metadata, and optional embedded bundle. That stamped copy is the runtime. conda-ship then writes the staged artifacts to the downstream project’s output directory. Packaged builds use the runtime template installed next to cs, unless --template points at an explicit template asset. Source checkouts use the same rule and do not compile a runtime template implicitly.