Skip to main content

CEP 15 - Hosting repodata.json and packages separately by adding a base_url property

Title Hosting repodata.json and packages separately by adding a base_url property
Status Accepted
Author(s) Daniel Holth <dholth@anaconda.com>
Created Aug 24, 2023
Updated Jan 22, 2024
Discussion https://github.com/conda-incubator/ceps/pull/61
Implementation

Abstract​

Conda packages need to be stored in the same directory as repodata.json.

This can be inconvenient especially when using alternative repodata.json for the same set of packages. For example, a user might be interested in installing packages based on an older snapshot of the index data that points to packages from the original index. Or a user might want to subset repodata.json based on policy.

Specification​

A minimal repodata.json looks like this.

{"info": {"subdir": "linux-64"},
"packages": {},
"packages.conda": {"some-package-filename.conda":{...}},
"removed": [],
"repodata_version": 1}

Add base_url to the info object. Increment repodata_version.

{"info": {"subdir": "...", "base_url":"https://repo.anaconda.com/repo/main/linux-64/"},
"packages": {},
"packages.conda": {"some-package-filename.conda":{...}},
"removed": [],
"repodata_version": 2}

Prepend base_url to the package filename when composing a download URL for a package. For the example above the resulting download URL would be https://repo.anaconda.com/repo/main/linux-64/some-package.conda.

base_url can be an absolute or a relative URL.

In the absence of base_url, packages are loaded relative to the repodata.json. Index data without the new base_url will continue to have "repodata_version": 1, but index data including base_url will have "repodata_version": 2.

All CEPs are explicitly CC0 1.0 Universal.