---
description: |-
  The `tofu providers mirror` command downloads the providers required
  for the current configuration and copies them into a directory in the local
  filesystem.
---

# Command: providers mirror

The `tofu providers mirror` command downloads the providers required
for the current configuration and copies them into a directory in the local
filesystem.

In normal use, `tofu init` will automatically download needed providers
from provider registries as part of initializing the current working directory.
Sometimes OpenTofu is running in an environment where that isn't possible,
such as on an isolated network without access to an OpenTofu Registry. In
that case,
[explicit installation method configuration](../../../cli/config/config-file.mdx#explicit-installation-method-configuration)
allows you to configure OpenTofu, when running on a particular system, to
consult only a local filesystem directory where you've created a local mirror
of the necessary plugins, and to skip accessing the upstream registry at all.

The `tofu providers mirror` command can automatically populate a directory
that will be used as a local filesystem mirror in the provider installation
configuration.

## Usage

Usage: `tofu providers mirror [options] <target-dir>`

A single target directory is required. OpenTofu will create under that
directory the path structure that is expected for filesystem-based provider
plugin mirrors, populating it with `.zip` files containing the plugins
themselves.

:::note
Use of variables in [module sources](../../../language/modules/sources.mdx#support-for-variable-and-local-evaluation)
requires [assigning values to root module variables](../../../language/values/variables.mdx#assigning-values-to-root-module-variables)
when running `tofu providers mirror`.
:::

This command accepts the following generic options:

* `-var 'NAME=VALUE'` - Sets a value for a single
  [input variable](../../../language/values/variables.mdx) declared in the
  root module of the configuration. Use this option multiple times to set
  more than one variable. Refer to
  [Input Variables on the Command Line](../plan.mdx#input-variables-on-the-command-line) for more information.

* `-var-file=FILENAME` - Sets values for potentially many
  [input variables](../../../language/values/variables.mdx) declared in the
  root module of the configuration, using definitions from a
  ["tfvars" file](../../../language/values/variables.mdx#variable-definitions-tfvars-files).
  Use this option multiple times to include values from more than one file.

* `-json` - Enables the [machine readable JSON UI](../../../internals/machine-readable-ui.mdx) output.

* `-json-into=out.json` - Produces the same output as -json, but redirected to a file. This allows
  for simultaneous capture of both human readable and machine readable logs.

There are several other ways to set values for input variables in the root
module, aside from the `-var` and `-var-file` options. Refer to
[Assigning Values to Root Module Variables](../../../language/values/variables.mdx#assigning-values-to-root-module-variables) for more information.

OpenTofu will also generate various `.json` index files which contain suitable
responses to implement
[the network mirror protocol](../../../internals/provider-network-mirror-protocol.mdx),
if you upload the resulting directory to a static website host. OpenTofu
ignores those index files when using the directory as a filesystem mirror,
because the directory entries themselves are authoritative in that case.

This command supports the following additional options:

* `-platform=OS_ARCH` - Choose which target platform to build a mirror for.
  By default OpenTofu will obtain plugin packages suitable for the platform
  where you run this command. Use this flag multiple times to include packages
  for multiple target systems.

  Target platform names consist of an operating system and a CPU
  architecture. For example, `linux_amd64` selects the Linux operating system
  running on an AMD64 or x86_64 CPU.

You can run `tofu providers mirror` again on an existing mirror directory
to update it with new packages. For example, you can add packages for a new
target platform by re-running the command with the desired new `-platform=...`
option, and it will place the packages for that new platform without removing
packages you previously downloaded, merging the resulting set of packages
together to update the JSON index files.
