ChannelsCreate, use and manage channels on prefix.dev

You can upload your conda packages to prefix.dev channels and make them available for your users. You can have multiple channels, for information about the pricing of channels, see the pricing page.

Creating a channel

  • Make sure you have an account and are logged in.
  • Go here to create a channel.
  • Fill in the form and select Create Channel. You can always change the description, visibility and logo later, but the channel name has to be unique across the platform.
  • After the channel is created, you can start uploading packages to it and share it with your users.

Create Channel UI

Uploading to a channel

There are multiple ways to upload packages to a channel.

Note: You should never delete a package from a channel that people are depending on. But if you uploaded something that was not allowed you can use the API to delete the file.

Publish using trusted publishers

You can set up trusted publishers for your channel to allow automated uploads from CI/CD pipelines. This is safer than using API keys because there is no secret stored in the CI/CD system, and you have control over where the packages can come from.

  1. Go to your channel's settings page: https://prefix.dev/channels/CHANNEL_NAME/settings
  2. Select the "Trusted publishers" section
  3. Fill in the form based on the CI/CD system you are using.
    • Make sure you already know the name of your CI workflow file.
  4. Select "Submit"

Trusted publishers UI

Then in your CI/CD pipeline, you can use pixi upload or rattler-build upload without any additional authentication steps, and the upload will be automatically authenticated and added to your channel.

For more information:

  • rattler-build with trusted publishers: docs

Uploading packages via Pixi or Rattler-build

Get a API key from your account settings and then run:

pixi upload --channel <channel-name> <package-file> --api-key pfx_xxxxxxxxxxxxxxxxxxxxxxxxxxxx
# or for rattler-build
rattler-build upload prefix --channel <channel-name> <package-file> --api-key pfx_xxxxxxxxxxxxxxxxxxxxxxxxxxxx

You can skip the --api-key flag if you have already authenticated with Pixi, see Pixi authentication for more info.

pixi auth login prefix.dev --token pfx_xxxxxxxxxxxxxxxxxxxxxxxxxxxx
# or for rattler-build
rattler-build auth login https://prefix.dev --bearer pfx_xxxxxxxxxxxxxxxxxxxxxxxxx

You can upload multiple files at the same time with:

pixi upload prefix --channel <channel-name> package-name-*.conda
# or for rattler-build
rattler-build upload prefix --channel <channel-name> package-name-*.conda

Upload page

  1. Login into the website
  2. Navigate to the channels page and then a channel that is owned by you.
  3. Select the "Add Package" button in the right top corner to go to the upload page, (https://prefix.dev/channels/CHANNEL_NAME/upload).
  4. Drag and drop from your file system into the drop area or select the drop area to open a file browser.
    • Currently only files smaller than 100Mb are allowed.
    • The system will automatically validate the file to ensure it's in the correct format for a conda package. If the file doesn't meet these specifications, the upload will not proceed. Contact us when you want to go bigger!
  5. If the upload is successful, the package variant will be added to your channel and will be available for access.

Install from a channel

Prefix.dev channels can be used with their URL, e.g. https://prefix.dev/mychannel.

All major conda package managers support installing from custom channels, such as Pixi, conda and mamba.

For example, with Pixi you can add a channel and install packages from it with:

# Initialize a new Pixi workspace with the channel
pixi init --channel https://prefix.dev/mychannel
# Add the channel to the workspace configuration
pixi workspace channel add https://prefix.dev/mychannel
# Install a package globally from the channel
pixi global install --channel https://prefix.dev/mychannel mypkg
# Search for a package in the channel
pixi search --channel https://prefix.dev/mychannel mypkg

Public vs. private channels

Public channels are accessible without credentials. To access a private channel, you have to be a member. When accessing private channels, it is also necessary to authenticate with the package manager.

We are using a standard API Key authentication method at prefix (with a "bearer" token). To authenticate Pixi or other conda package managers, please create an API Key as described under API.

To authenticate with Pixi, run:

pixi auth login prefix.dev --token pfx_thisisialongtoken123

This will store the authentication token in your Pixi configuration.

Note: For other package managers like (micro)mamba, use: (micro)mamba auth login https://prefix.dev --bearer pfx_token

Channel members

A channel can have two types of members: owners and "regular" members.

  • Owners have administrative rights, can upload new packages and add more members.
  • Members can only download from a channel (this is only useful for private channels).

Add members

You can add members through the API, or through the frontend:

  1. Select the Members tab in a channel page.
  2. Select the Add member button in the right top corner of the channel member page.
  3. Search for a member, if they're not signed in yet, you can't add the member.
  4. Select a role for the new member.
  5. Select the Add Member button.

Channel structure and subdirectories

Packages are organized by platform subdirectories (subdirs). Each subdir represents a specific platform:

Common subdirectories:

  • linux-64 - 64-bit Linux (Intel/AMD)
  • linux-aarch64 - 64-bit Linux (ARM)
  • osx-64 - macOS Intel
  • osx-arm64 - macOS Apple Silicon
  • win-64 - 64-bit Windows
  • noarch - Platform-independent packages (pure Python, meta packages, etc.)

Every channel has a noarch subdir, even if empty. Package managers use this to test if a channel exists.

Channel URL structure

https://prefix.dev/mychannel
├── noarch
   ├── shards
   ├── <shards_base_url><sha256>.msgpack.zst
   └── ...
   ├── repodata_shards.msgpack.zst
   └── repodata.json
├── linux-64
   ├── shards
   ├── <shards_base_url><sha256>.msgpack.zst
   └── ...
   ├── repodata_shards.msgpack.zst
   ├── repodata.json
   ├── mypkg-1.1-h1234.tar.bz2
   ├── mypkg-1.2-h4434.tar.bz2
   └── mypkg-1.3-h2334.tar.bz2
└── osx-arm64
    ├── shards
   ├── <shards_base_url><sha256>.msgpack.zst
   └── ...
    ├── repodata_shards.msgpack.zst
    ├── repodata.json
    └── mypkg-1.1-h5678.conda

Each subdir contains:

  • repodata.json - Index of all packages in that subdir, e.g. conda-forge/noarch
  • repodata_shards.msgpack.zst - Index of all package names in that subdir, e.g. conda-forge/noarch
  • shards/ - The folder containing the repodata_shards files for all the packages in the subdir.
  • Package files (.tar.bz2 or .conda format)

More information on the sharded repodata can be found in the CEP

Package URL format: https://prefix.dev/<channel>/<subdir>/<filename>

Previous Chapter

GraphQL API

Next Chapter

Documentation