> ## 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.

# Mirrors

Mirroring is the process of copying data from a source and then storing it in a new location, often on a scheduled basis. When the mirror's source updates its contents, the mirror's contents update to match the next time it runs. It is possible to mirror just a subset of the source's contents as well, if the source contains more data than you need or can store. Mirroring ensures your channels are always up to date with the latest packages (Software files and information about the software, such as its name, version, and description, bundled into a file that can be installed and managed by a package manager.) from the source.

> [!WARNING]
>
> Anaconda recommends that channels contain *only one mirror each* to prevent conflicts between package sources.

> [!NOTE]
>
> Mirroring is restricted to users whose [role](https://anaconda.com/docs/psm-on-prem/6.8.0/admin/user_config/permissions.md#permission-levels) provides `write` or `manage` permissions for **Channel Mirrors** and/or **Subchannel Mirrors** categories.

## Creating a mirror

When creating a mirror, the recommended workflow is:

1. Select a channel you want to contain your mirror.

2. Freeze your channel.

3. Open the  **Manage** dropdown and select *Create Mirror*.

4. Complete the **Create mirror** form. Configuration options differ based on the type of mirror you are creating:

   > [tab] Conda
   >
   > ![conda mirror configurations](https://mintcdn.com/anaconda-29683c67/4YgHE0z28xHZ8yr8/images/psm-on-prem/psm_create_conda_mirror_ui_6.8.0.png?fit=max\&auto=format\&n=4YgHE0z28xHZ8yr8\&q=85\&s=df81dcfc09e9677f90f547a69dcacfc6)
   >
   > **1. Mirror Name**
   >
   > Enter a name for your mirror. Anaconda recommends you name your mirror something descriptive for your end users.
   >
   > **2. Mirroring Mode**
   >
   > Choose whether you want your mirror to be active or passive.
   >
   > **Active Mirroring**: Downloads packages from the source channel immediately to your local server.
   >
   > > [!WARNING]
   > >
   > > Some repository channels require a large amount of storage (for example, Anaconda's public repository is 700GB, conda-forge is 3TB, and PyPI is 10TB), and as a rule, the larger the mirror, the longer the wait time for it to complete.
   >
   > **Passive Mirroring**: Creates a metadata file listing all packages on the mirrored server. Packages are downloaded when users request them via `conda install <PKG_NAME>`.
   >
   > > [!NOTE]
   > >
   > > Anaconda recommends establishing your mirrors as passive. Active mirrors take longer to complete than passive mirrors, but regardless of which mirroring mode you choose, the available packages are the same.
   >
   > **3. External Source URL**
   >
   > Enter the URL of the conda channel to mirror.
   >
   > > [!TIP]
   > >
   > > **Anaconda recommends creating mirrors for the following channels:**
   > >
   > > * `https://repo.anaconda.cloud/pkgs/main`
   > > * `https://repo.anaconda.cloud/pkgs/r` ([End of Support](https://anaconda.com/docs/reference/policies-practices/software-version-support.md#end-of-support-eos) as of November 2025)
   > > * `https://repo.anaconda.cloud/pkgs/msys2` ([End of Support](https://anaconda.com/docs/reference/policies-practices/software-version-support.md#end-of-support-eos) as of September 2026)
   > > * `https://repo.anaconda.cloud/repo/main-x`
   >
   > > [!NOTE]
   > >
   > > If your external source channel is another Package Security Manager channel, you *must* use the format `https://<URL>/api/repo/<CHANNEL_NAME>`.
   > >
   > > ***
   > >
   > > If your external source channel is another Package Security Manager channel *that contains CRAN R packages*, you *must* use the format `https://<URL>/api/repo/<CHANNEL_NAME>/cran`.
   > >
   > > ***
   > >
   > > If your external source channel is a *virtual* channel from Package Security Manager (Cloud), you *must* use the format `https://repo.anaconda.cloud/repo/t/<TOKEN>/<ORG_ID>/<CHANNEL_NAME>`.
   > >
   > > ***
   > >
   > > If your external source channel is one of the **Anaconda Channels** or **Community Package Channels** (Anaconda Extended and Anaconda Community Channel are [End of Support](https://anaconda.com/docs/anaconda-platform/admin/channels.md#community-channels) as of September 2026) from Package Security Manager (Cloud), you *must* use the format `https://repo.anaconda.cloud/t/<TOKEN>/repo/<CHANNEL_NAME>`.
   > >
   > > ***
   > >
   > > When creating mirrors that use Package Security Manager (Cloud) channels as the external source, replace `<TOKEN>` with your [organization access token](https://anaconda.com/docs/anaconda-platform/user/tokens.md), and `<ORG_ID>` with your [organization ID](https://anaconda.com/docs/anaconda-platform/admin/organizations#creating-an-organization).
   >
   > **4. Mirror Type**
   >
   > Select **Conda** as the mirror type. This ensures that only conda packages (`.conda`, `.tar.bz2`) will be mirrored from the external source channel. Packages in the source channel that are not conda packages are not mirrored.
   >
   > **5. Mirroring Frequency**
   >
   > Set the frequency you want your mirror to run and update your packages. The default value instructs the mirror to update at midnight on the first day of every month.
   >
   > Custom frequencies use [cron expressions](https://crontab.cronhub.io/) to determine when they run.
   >
   > > [!WARNING]
   > >
   > > Mirroring large repositories can take several hours. Anaconda recommends against setting a frequency greater than *Daily* to avoid collisions between currently running and updating mirrors.
   >
   > **6. Run Now**
   >
   > Select this checkbox to start your mirror when you click **Save & Run**. If the **Run Now** checkbox is not selected, your changes are saved, and the mirror runs the next time its frequency configuration instructs it to do so.
   >
   > **7. Assign Mirror Policy**
   >
   > Toggle between using the policy that is applied to the channel or selecting a policy to apply to the mirror. For more information about policies, see [Policies](https://anaconda.com/docs/psm-on-prem/6.8.0/admin/policies.md).
   >
   > > [!NOTE]
   > >
   > > You cannot apply a policy to a mirror if it is already applied to the channel.
   > >
   > > ***
   > >
   > > Mirror policies override channel policies.
   >
   > **8. View Applied Policy**
   >
   > View details of the policy applied to the mirror.
   >
   > **9. Cancel/Save & Run**
   >
   > Click **Cancel** at any time to quit your mirror form completion and discard any set parameters. Click **Save & Run** to start your mirror.

   > [tab] Std Python
   >
   > ![standard python mirror configurations](https://mintcdn.com/anaconda-29683c67/4YgHE0z28xHZ8yr8/images/psm-on-prem/psm_create_python_mirror_ui_6.8.0.png?fit=max\&auto=format\&n=4YgHE0z28xHZ8yr8\&q=85\&s=5709615baceba2ec69579771d5be8c7a)
   >
   > **1. Mirror Name**
   >
   > Enter a name for your mirror. Anaconda recommends you name your mirror something descriptive for your end users.
   >
   > **2. Mirroring Mode**
   >
   > Choose whether you want your mirror to be active or passive.
   >
   > **Active Mirroring**: Downloads packages from the source channel immediately to your local server.
   >
   > > [!WARNING]
   > >
   > > Some repository channels require a large amount of storage (for example, Anaconda's public repository is 700GB, conda-forge is 3TB, and PyPI is 10TB), and as a rule, the larger the mirror, the longer the wait time for it to complete.
   >
   > **Passive Mirroring**: Creates a metadata file listing all packages on the mirrored server. Packages are downloaded when users request them via `conda install <PKG_NAME>`.
   >
   > > [!NOTE]
   > >
   > > Anaconda recommends establishing your mirrors as passive. Active mirrors take longer to complete than passive mirrors, but regardless of which mirroring mode you choose, the available packages are the same.
   >
   > **3. External Source URL**
   >
   > Enter the URL of the Python package repository (Any storage location from which software or software assets, like packages, can be retrieved and installed on a local computer.) to mirror.
   >
   > **4. Mirror Type**
   >
   > Select **Std Python** as the mirror type. This ensures that only Python packages (`.py`, `.pyc`, `.pyd`, `.whl`, `.egg`, `.tar.gz`, for example) are mirrored from the source repository. Packages in the source channel that are not Python packages are not mirrored.
   >
   > **5. Mirroring Frequency**
   >
   > Set the frequency you want your mirror to run and update your packages. The default value instructs the mirror to update at midnight on the first day of every month.
   >
   > Custom frequencies use [cron expressions](https://crontab.cronhub.io/) to determine when they run.
   >
   > > [!WARNING]
   > >
   > > Mirroring large repositories can take several hours. Anaconda recommends against setting a frequency greater than *Daily* to avoid collisions between currently running and updating mirrors.
   >
   > Danger
   >
   > If you are mirroring the full PyPI repository, set your frequency to run once yearly. Once the PyPI mirror is complete, any attempts to re-run the mirror will cause issues. Consider using selective mirroring for specific packages instead of the full PyPI repository.
   >
   > **6. Run Now**
   >
   > Select this checkbox to start your mirror when you click **Save & Run**. If the **Run Now** checkbox is not selected, your changes are saved, and the mirror runs the next time its frequency configuration instructs it to do so.
   >
   > **7. Mirroring Filters**
   >
   > Because policy filters only work for conda mirrors, Standard Python mirrors must use the **Mirroring Filters** section to specify which packages should be mirrored from the source channel.
   >
   > **8. Exclude**
   >
   > List packages to exclude from the mirror by name here. You can also exclude packages by using wildcards. For example, `p*` excludes all packages that start with the letter `p`.
   >
   > **9. Include**
   >
   > List exceptions to the exclusion list here. For example, if you want to include Python in your mirror, but you have used the exclusion filter `p*` to exclude all packages that start with the letter `p`, you can include Python by adding `python` here.
   >
   > **10. View Channel Filters**
   >
   > View details of the **Mirroring Filters** applied to the channel.
   >
   > **11. Cancel/Save & Run**
   >
   > Click **Cancel** at any time to quit your mirror form completion and discard any set parameters. Click **Save & Run** to start your mirror.

   > [tab] Std R
   >
   > ![standard r mirror configurations](https://mintcdn.com/anaconda-29683c67/4YgHE0z28xHZ8yr8/images/psm-on-prem/psm_create_r_mirror_ui_6.8.0.png?fit=max\&auto=format\&n=4YgHE0z28xHZ8yr8\&q=85\&s=c669abf20b75170edf2e1846ff4bf539)
   >
   > **1. Mirror Name**
   >
   > Enter a name for your mirror. Anaconda recommends you name your mirror something descriptive for your end users.
   >
   > **2. Mirroring Mode**
   >
   > Choose whether you want your mirror to be active or passive.
   >
   > **Active Mirroring**: Downloads packages from the source channel immediately to your local server.
   >
   > > [!WARNING]
   > >
   > > Some repository channels require a large amount of storage (for example, Anaconda's public repository is 700GB, conda-forge is 3TB, and PyPI is 10TB), and as a rule, the larger the mirror, the longer the wait time for it to complete.
   >
   > **Passive Mirroring**: Creates a metadata file listing all packages on the mirrored server. Packages are downloaded when users request them via `conda install <PKG_NAME>`.
   >
   > > [!NOTE]
   > >
   > > Anaconda recommends establishing your mirrors as passive. Active mirrors take longer to complete than passive mirrors, but regardless of which mirroring mode you choose, the available packages are the same.
   >
   > **3. External Source URL**
   >
   > Enter the URL of the R package repository to mirror.
   >
   > **4. Mirror Type**
   >
   > Select "Std R" as the mirror type. This ensures that only R packages (`.R`, `.RData`, `.rda`, `.RDS`, `.Rd`, `.Rproj`, for example) are mirrored from the source repository. Packages in the source channel that are not R packages are not mirrored.
   >
   > **5. Mirroring Frequency**
   >
   > Set the frequency you want your mirror to run and update your packages. The default value instructs the mirror to update at midnight on the first day of every month.
   >
   > Custom frequencies use [cron expressions](https://crontab.cronhub.io/) to determine when mirrors run.
   >
   > > [!WARNING]
   > >
   > > Mirroring large repositories can take several hours. Anaconda recommends against setting a frequency greater than *Daily* to avoid collisions between currently running and updating mirrors.
   >
   > **6. Run Now**
   >
   > Select this checkbox to start your mirror when you click **Save & Run**. If the **Run Now** checkbox is not selected, your changes are saved, and the mirror runs the next time its frequency configuration instructs it to do so.
   >
   > **7. Mirroring Filters**
   >
   > Because policy filters only work for conda mirrors, Standard R mirrors must use the **Mirroring Filters** to specify which packages should be mirrored from the source channel.
   >
   > **8. Exclude**
   >
   > List packages to exclude from the mirror by name here. You can also exclude packages by using wildcards. For example, `p*` excludes all packages that start with the characters `p`.
   >
   > > [!NOTE]
   > >
   > > R packages can also be excluded by License type.
   >
   > **9. Include**
   >
   > List exceptions to the exclusion list here. For example, if you want to include the `plumber` package in your mirror, but you have used the exclusion filter `p*` to exclude all packages that start with the characters `p`, you can include plumber by adding `plumber` here.
   >
   > **10. View Channel Filters**
   >
   > View details of the **Mirroring Filters** applied to the channel.
   >
   > **11. Cancel/Save & Run**
   >
   > Click **Cancel** at any time to quit your mirror form completion and discard any set parameters. Click **Save & Run** to start your mirror.

5. Allow the mirror time to complete.

   > [accordion] How do I know when my mirror is complete?
   >
   > You can view the status of in-progress mirrors from the from the channel's **Mirrors** tab. In-progress mirrors display which step is currently being performed with a brief description of the operation. When a mirror completes, the status updates to **Completed** and the date and time of completion is displayed.
   >
   > ![The channel's Mirror tab spotlighting the status of an in-progress mirror](https://mintcdn.com/anaconda-29683c67/EzP2zCM6A9Fxpzmy/images/psm-on-prem/ap_mirror_status.png?fit=max\&auto=format\&n=EzP2zCM6A9Fxpzmy\&q=85\&s=a4ea18591d4fdc4e4729e465a966c511)

   > [!NOTE]
   >
   > Administrators can view the status of all mirrors from the  **Mirrors** page.

6. Unfreeze your channel.

   > [!NOTE]
   >
   > For more information on freezing and unfreezing a channel, see [Freezing/Unfreezing Channels](https://anaconda.com/docs/psm-on-prem/6.8.0/user/channel.md#freezing-and-unfreezing-channels).

## Managing mirrors

Select  **All Mirrors** from the left-hand navigation to view mirrors globally for all users.

> [!NOTE]
>
> This view is only available to users whose role provides `Manage` permissions for the **mirror** attribute. This value must be assigned in Keycloak.

![](https://mintcdn.com/anaconda-29683c67/EzP2zCM6A9Fxpzmy/images/psm-on-prem/as_all_repository_mirrors_3.png?fit=max\&auto=format\&n=EzP2zCM6A9Fxpzmy\&q=85\&s=390decd9585136ca87d33b8129c04455)

> [!TIP]
>
> Use the search box to locate a mirror by name. Click a column header to sort mirrors by **Type**, **Mode**, **Mirroring Status**, or **Last Updated**.

### Mirror actions

Use the icons in the **Actions** column to manage your mirrors:

![](https://mintcdn.com/anaconda-29683c67/4YgHE0z28xHZ8yr8/images/psm-on-prem/mirror_actions.png?fit=max\&auto=format\&n=4YgHE0z28xHZ8yr8\&q=85\&s=4039e86ef3c6caa24e25bf9986c92be5)

> [!TIP]
>
> Mirror actions can also be performed from a channel’s **Mirrors** tab.

**1. Edit mirror**

Edit a mirror's configurations.

> [!NOTE]
>
> You cannot edit the mode of an established mirror.

**2. Stop running mirror**

Stop an in-progress mirror.

> [!NOTE]
>
> It can take up to 10 minutes for a mirror to fully stop. A mirror in the process of stopping will display **Stopping** as its mirroring status. Once it is complete, it will display **Stopped** as its status. Stopping a mirror does not discard the progress the mirror has made, and some packages may appear in your channel’s **Packages** tab.

**3. Restart Mirror**

Restart a stopped mirror.

> [!NOTE]
>
> Restarted mirrors run from the beginning of the mirroring process, not from where you stopped the run.

**4. See details**

View information about how many packages were filtered from the source, reasons for their exclusion, and whether packages were mirrored passively or actively.

**5. Delete mirror**

Delete a mirror.

**6. Download Dependency Report**

Download a dependency report (if available).

A dependency report is a detailed list of all the software packages required for your specified packages to function correctly. It includes both direct dependencies (packages your specified packages require to run) and indirect dependencies (packages the dependencies require to run). A package dependency report can help you identify exactly which packages are necessary for your channel to be able to create a working environment using conda.

> [!WARNING]
>
> Dependency reports are only available for mirrors that have policies with specific configurations applied:
>
> * You must set package rules to allow packages by their names using [MatchSpec protocol](https://docs.conda.io/projects/conda/en/stable/dev-guide/api/conda/models/match_spec/index.html)—a syntax for specifying package names and versions in conda
> * You must select the **Include dependencies** checkbox.
