> ## Documentation Index
> Fetch the complete documentation index at: https://anaconda.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Private channels

export const GCell = ({children, className}) => <div className={`grid-table-cell ${className || ""}`} role="cell">
    {children}
  </div>;

export const GTH = ({children, className}) => <div className={`grid-table-th ${className || ""}`} role="columnheader">
    {children}
  </div>;

export const GRow = ({children}) => <div className="grid-table-row" role="row">{children}</div>;

export const GBody = ({children}) => <div className="grid-table-body" role="rowgroup">{children}</div>;

export const GHead = ({children}) => <div className="grid-table-head" role="rowgroup">{children}</div>;

export const GTable = ({children, className, cols}) => <div className={`grid-table not-prose overflow-hidden rounded-2xl ${className || ""}`} style={{
  "--grid-table-cols": cols
}} role="table">
    {children}
  </div>;

export const Comments = ({children}) => {
  return <div class="my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border border-zinc-500/20 bg-zinc-50/50 dark:border-zinc-500/30 dark:bg-zinc-500/10" data-callout-type="comments">
      <div class="w-4">
        <svg width="14" height="14" viewBox="0 0 640 640" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" aria-label="Comments">
            <path d="M320 112C434.9 112 528 205.1 528 320C528 434.9 434.9 528 320 528C205.1 528 112 434.9 112 320C112 205.1 205.1 112 320 112zM320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM280 400C266.7 400 256 410.7 256 424C256 437.3 266.7 448 280 448L360 448C373.3 448 384 437.3 384 424C384 410.7 373.3 400 360 400L352 400L352 312C352 298.7 341.3 288 328 288L280 288C266.7 288 256 298.7 256 312C256 325.3 266.7 336 280 336L304 336L304 400L280 400zM320 256C337.7 256 352 241.7 352 224C352 206.3 337.7 192 320 192C302.3 192 288 206.3 288 224C288 241.7 302.3 256 320 256z" />
        </svg>
      </div>
      <div class="text-sm prose min-w-0 w-full">
        {children}
      </div>
    </div>;
};

Private channels let you distribute conda or wheel packages to specific people without making them publicly available. You create a private channel under an [organization](/docs/anaconda-org/admin-guide/organizations), upload packages to it, and then share access with collaborators using the CLI. Only users you explicitly share the channel with can see or install its packages.

<Note>
  Private channels are distinct from [private packages](/docs/anaconda-org/maintainer-guide/private-packages), a legacy feature of Anaconda.org that restricts access to individual packages using tokens. Instead, private channels restrict access to an entire channel using a collaborator-based sharing model.
</Note>

## Creating a private channel

<Note>
  Private channels live under an [organization](/docs/anaconda-org/admin-guide/organizations) namespace. If you use your username as the namespace in the CLI, an organization is created for you automatically. On Anaconda.org, you must select an existing organization.

  During the beta, only one free private channel is allowed per organization.
</Note>

<Tabs>
  <Tab title="CLI">
    To create a private channel, run:

    ```sh theme={null}
    anaconda channel create <NAMESPACE>/<CHANNEL_NAME> --private
    ```

    <Comments>
      Replace \<NAMESPACE> with the name of your organization or your username.<br />
      Replace \<CHANNEL\_NAME> with a name for your channel.
    </Comments>

    For the full list of options, see the [`anaconda channel create`](/docs/cli-reference/anaconda-client/commands/channel-create) reference.
  </Tab>

  <Tab title="Anaconda.org">
    1. Log in to [Anaconda.org](https://anaconda.org).

    2. From the user menu, select **My Channels**.

    3. Click <Icon icon="plus" iconType="light" /> **Create Channel**.

    4. Under **Visibility**, select **Private**.

    5. Under **Organizations**, select the organization that will own the channel.

    6. Click **Next**.

    7. Enter a channel name and optional description.

           <Note>
             Channel names can contain only lowercase letters, numbers, and dashes.
           </Note>

    8. Click **Complete** to create your channel.
  </Tab>
</Tabs>

## Uploading packages

To upload packages to your private channel, run:

```sh theme={null}
anaconda channel upload <FILES> --channel <NAMESPACE>/<CHANNEL_NAME>
```

<Comments>
  Replace \<FILES> with the path to one or more package files (glob patterns like `*.conda` are supported).<br />
  Replace \<NAMESPACE> with the name of your organization.<br />
  Replace \<CHANNEL\_NAME> with the name of your channel.
</Comments>

<Warning>
  Do not mix conda packages and Python wheel packages in the same channel. Mixing package types in a single channel can cause dependency resolution failures during installation. Create separate channels for conda packages and wheel packages.
</Warning>

For the full list of options, see the [`anaconda channel upload`](/docs/cli-reference/anaconda-client/commands/channel-upload) reference.

## Sharing a channel

Access to a private channel is not automatic. Organization membership alone does not grant channel access. You must explicitly share the channel with each collaborator.

<Note>
  During the beta, channel sharing is available through the CLI only and only two additional collaborators are allowed per private channel.
</Note>

To share a channel with a user, run:

```sh theme={null}
anaconda channel share <USER> --channel <NAMESPACE>/<CHANNEL_NAME>
```

<Comments>
  Replace \<USER> with the user's email address or username.<br />
  Replace \<NAMESPACE> with the name of your organization.<br />
  Replace \<CHANNEL\_NAME> with the name of your channel.
</Comments>

By default, shared users receive **viewer** (read-only) access. To grant write access so a collaborator can upload packages, specify the `--role` option:

```sh theme={null}
anaconda channel share <USER> --channel <NAMESPACE>/<CHANNEL_NAME> --role collaborator
```

<Comments>
  Replace \<USER> with the user's email address or username.<br />
  Replace \<NAMESPACE> with the name of your organization.<br />
  Replace \<CHANNEL\_NAME> with the name of your channel.
</Comments>

Collaborators receive an email notification when you share a channel with them.

### Revoking access

To revoke a user's access to a channel, use the `--unshare` flag:

```sh theme={null}
anaconda channel share <USER> --channel <NAMESPACE>/<CHANNEL_NAME> --unshare
```

<Comments>
  Replace \<USER> with the user's email address or username.<br />
  Replace \<NAMESPACE> with the name of your organization.<br />
  Replace \<CHANNEL\_NAME> with the name of your channel.
</Comments>

### Roles

<GTable cols="20% 80%">
  <GHead>
    <GRow>
      <GTH>Role</GTH>
      <GTH>Description</GTH>
    </GRow>
  </GHead>

  <GBody>
    <GRow>
      <GCell>`viewer`</GCell>
      <GCell>Read-only access. The user can view and install packages from the channel.</GCell>
    </GRow>

    <GRow>
      <GCell>`collaborator`</GCell>
      <GCell>Read and write access. The user can view, install, and upload packages to the channel.</GCell>
    </GRow>
  </GBody>
</GTable>

For the full list of options, see the [`anaconda channel share`](/docs/cli-reference/anaconda-client/commands/channel-share) reference.

## Managing channels

### Listing your channels

You can view your channels from the CLI or on Anaconda.org.

<Note>
  During the beta, the Anaconda.org view is read-only and does not support filtering.
</Note>

<Tabs>
  <Tab title="CLI">
    To see all channels you own or have access to, run:

    ```sh theme={null}
    anaconda channel list
    ```

    This displays both public and private channels across Anaconda.org and Anaconda.com. To view only your Anaconda.org channels, filter by source:

    ```sh theme={null}
    anaconda channel list --source org
    ```

    For the full list of options, see the [`anaconda channel list`](/docs/cli-reference/anaconda-client/commands/channel-list) reference.
  </Tab>

  <Tab title="Anaconda.org">
    1. Log in to [Anaconda.org](https://anaconda.org).
    2. Click the user dropdown menu.
    3. Select *My Channels*.

    The **My Channels** page lists all channels you own, including both public and private channels. Click a channel name to view its overview page.
  </Tab>
</Tabs>

### Viewing channel details

The CLI provides the most complete channel information during the beta. The Anaconda.org overview page shows basic details only.

<Tabs>
  <Tab title="CLI">
    To display information about a specific channel, including its privacy setting, artifact count, and download count, run:

    ```sh theme={null}
    anaconda channel show <NAMESPACE>/<CHANNEL_NAME>
    ```

    <Comments>
      Replace \<NAMESPACE> with the name of your organization.<br />
      Replace \<CHANNEL\_NAME> with the name of your channel.
    </Comments>

    For the full list of options, see the [`anaconda channel show`](/docs/cli-reference/anaconda-client/commands/channel-show) reference.
  </Tab>

  <Tab title="Anaconda.org">
    The channel overview page displays summary information about a channel, including its name, privacy setting, and package contents.

    To view a channel's overview page, click the channel name from the **My Channels** page.

    <Note>
      During the beta, the channel overview page shows the overview tab only. Package details and collaborator access management are not available from the web interface.
    </Note>
  </Tab>
</Tabs>

### Changing channel privacy

To switch a channel between public and private, run:

```sh theme={null}
anaconda channel modify <NAMESPACE>/<CHANNEL_NAME> --privacy <SETTING>
```

<Comments>
  Replace \<NAMESPACE> with the name of your organization.<br />
  Replace \<CHANNEL\_NAME> with the name of your channel.<br />
  Replace \<SETTING> with `public` or `private`.
</Comments>

For the full list of options, see the [`anaconda channel modify`](/docs/cli-reference/anaconda-client/commands/channel-modify) reference.

### Removing a channel

To permanently remove a channel and all of its packages, run:

```sh theme={null}
anaconda channel remove <NAMESPACE>/<CHANNEL_NAME>
```

<Comments>
  Replace \<NAMESPACE> with the name of your organization.<br />
  Replace \<CHANNEL\_NAME> with the name of your channel.
</Comments>

<Warning>
  Removing a channel deletes all packages and artifacts in that channel. This action cannot be undone. Only channel owners can remove a channel or delete a package from a channel.
</Warning>

For the full list of options, see the [`anaconda channel remove`](/docs/cli-reference/anaconda-client/commands/channel-remove) reference.

## Installing packages from a private channel

Before you can install packages from a private channel, you must be logged in to Anaconda and have been granted access to the channel:

```sh theme={null}
anaconda login
```

### Configuring conda for private channels

During the beta, you must add the following to your `.condarc` file to enable authentication for private channels:

```yaml theme={null}
channel_settings:
  - channel: https://repo.anaconda.cloud/*
    auth: anaconda-auth
    auth_domain: anaconda.com
    credential_type: api-key
```

### Installing a package

To install a package from your private channel, run:

```sh theme={null}
conda install --channel https://repo.anaconda.cloud/<NAMESPACE>/<CHANNEL_NAME> <PACKAGE>
```

<Comments>
  Replace \<NAMESPACE> with the name of the organization that owns the channel.<br />
  Replace \<CHANNEL\_NAME> with the name of the channel.<br />
  Replace \<PACKAGE> with the name of the package you want to install.
</Comments>

If your private channel contains a package that also exists on a default channel (such as `main`) and you want to force installation from the private channel, add the `--override-channels` flag:

```sh theme={null}
conda install --channel https://repo.anaconda.cloud/<NAMESPACE>/<CHANNEL_NAME> <PACKAGE> --override-channels
```

<Comments>
  Replace \<NAMESPACE> with the name of the organization that owns the channel.<br />
  Replace \<CHANNEL\_NAME> with the name of the channel.<br />
  Replace \<PACKAGE> with the name of the package you want to install.
</Comments>

The `--override-channels` flag is not necessary when installing custom packages that only exist in a private channel.
