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.