Skip to main content
Pixi can use S3 object storage as a conda channel, enabling private package hosting and distribution.

Basic Configuration

Add an S3 bucket as a channel in your pixi.toml:
pixi.toml

Repository Structure

Your S3 bucket must follow the standard conda repository structure:

Authentication Methods

Pixi supports two mutually exclusive authentication methods:
  1. AWS Credentials - Standard AWS configuration files and environment variables
  2. Pixi Configuration - Custom S3-compatible storage with Pixi’s auth system
These methods are mutually exclusive. Specifying s3-options deactivates AWS credential fetching.

Using AWS Configuration

Use standard AWS credentials without any special Pixi configuration.

Environment Variables

Set AWS credentials in your environment:

AWS Configuration File

Use AWS profiles for more complex setups:
aws.config
1

Configure AWS

2

Login via SSO

Follow the browser prompts to authenticate.
3

Use Pixi

GitHub Actions with OIDC

Use temporary credentials via OpenID Connect:
ci.yml

Using Pixi’s Configuration

For S3-compatible storage providers or custom setups.

Workspace Configuration

Configure S3 options per bucket in pixi.toml:
pixi.toml
You must configure s3-options for each bucket you use: [workspace.s3-options.<bucket-name>]

Authentication

Store credentials using Pixi’s auth system:

Global Configuration

Alternatively, configure S3 options globally:
config.toml
See Pixi configuration documentation for the config file location.

GitHub Actions with Pixi Auth

ci.yml

Public S3 Buckets

Public buckets can be accessed via standard HTTPS URLs without authentication:
pixi.toml

AWS Bucket Policy

Configure your bucket for public access:

S3-Compatible Storage Providers

Pixi works with various S3-compatible storage services.

MinIO

pixi.toml

Cloudflare R2

pixi.toml
Cloudflare R2 supports public buckets via r2.dev subdomains or custom domains. See Cloudflare R2 docs.

Wasabi

pixi.toml

Backblaze B2

pixi.toml

Google Cloud Storage

pixi.toml
Pixi also supports gcs:// URLs for Google Cloud Storage.

Hetzner Object Storage

pixi.toml

Uploading Packages to S3

Using Pixi

Upload packages directly with Pixi:
Use pixi upload s3 --help for all available options.

Using rattler-build

If you’re building packages with rattler-build:
See rattler-build’s documentation for details.

Re-indexing After Upload

S3 buckets require manual reindexing after uploading new packages, unlike managed package servers.
1

Install rattler-index

Or use via pixi exec:
2

Re-index the channel

This updates the repodata.json files to include newly uploaded packages.

Configuration Options

S3 Options Reference

Path Style URLs

  • Path-style: https://s3.amazonaws.com/bucket/key
  • Virtual-hosted-style: https://bucket.s3.amazonaws.com/key
Set force-path-style = true for providers that require path-style URLs (MinIO, Backblaze B2).

Best Practices

Use IAM Roles

In AWS environments, use IAM roles instead of long-lived access keys for better security.

Separate Channels

Organize packages into separate channels (e.g., dev, staging, prod) within the same bucket.

Automate Indexing

Integrate reindexing into your CI/CD pipeline after package uploads.

Enable Versioning

Enable S3 bucket versioning to protect against accidental deletions.

Monitor Costs

Monitor S3 costs, especially for public buckets with high traffic.

Troubleshooting

Access Denied Errors

Ensure your credentials have the required permissions:
  • s3:GetObject - Download packages
  • s3:ListBucket - List package contents
  • s3:PutObject - Upload packages (if needed)

Invalid Endpoint

Verify the endpoint URL matches your provider’s documentation and includes the protocol (https://).

Repository Structure Issues

Confirm your bucket follows the conda channel structure with repodata.json in each platform subdirectory.