Skip to main content

Command: providers schema

The tofu providers schema command is used to print detailed schemas for the providers used in the current configuration.


Usage: tofu providers schema [options]

The following flags are available:

  • -json - Displays the schemas in a machine-readable, JSON format.

Please note that, at this time, the -json flag is a required option. In future releases, this command will be extended to allow for additional options.

The output includes a format_version key, which has value "1.0". The semantics of this version are:

  • We will increment the minor version, e.g. "1.1", for backward-compatible changes or additions. Ignore any object properties with unrecognized names to remain forward-compatible with future minor versions.
  • We will increment the major version, e.g. "2.0", for changes that are not backward-compatible. Reject any input which reports an unsupported major version.

We will introduce new major versions only within the bounds of the OpenTofu 1.0 Compatibility Promises.

Format Summary

The following sections describe the JSON output format by example, using a pseudo-JSON notation. Important elements are described with comments, which are prefixed with //. To avoid excessive repetition, we've split the complete format into several discrete sub-objects, described under separate headers. References wrapped in angle brackets (like <block-representation>) are placeholders which, in the real output, would be replaced by an instance of the specified sub-object.

The JSON output format consists of the following objects and sub-objects:

Providers Schema Representation

Code Block
"format_version": "1.0",

// "provider_schemas" describes the provider schemas for all
// providers throughout the configuration tree.
"provider_schemas": {
// keys in this map are the provider type, such as "random"
"example_provider_name": {
// "provider" is the schema for the provider configuration
"provider": <schema-representation>,

// "resource_schemas" map the resource type name to the resource's schema
"resource_schemas": {
"example_resource_name": <schema-representation>

// "data_source_schemas" map the data source type name to the
// data source's schema
"data_source_schemas": {
"example_datasource_name": <schema-representation>,
"example_provider_two": {}

Schema Representation

A schema representation pairs a provider or resource schema (in a "block") with that schema's version.

Code Block
// "version" is the schema version, not the provider version
"version": int64,
"block": <block-representation>

Block Representation

A block representation contains "attributes" and "block_types" (which represent nested blocks).

Code Block
// "attributes" describes any attributes that appear directly inside the
// block. Keys in this map are the attribute names.
"attributes": {
"example_attribute_name": {
// "type" is a representation of a type specification
// that the attribute's value must conform to.
"type": "string",

// "description" is an English-language description of
// the purpose and usage of the attribute.
"description": "string",

// "required", if set to true, specifies that an
// omitted or null value is not permitted.
"required": bool,

// "optional", if set to true, specifies that an
// omitted or null value is permitted.
"optional": bool,

// "computed", if set to true, indicates that the
// value comes from the provider rather than the
// configuration.
"computed": bool,

// "sensitive", if set to true, indicates that the
// attribute may contain sensitive information.
"sensitive": bool
// "block_types" describes any nested blocks that appear directly
// inside the block.
// Keys in this map are the names of the block_type.
"block_types": {
"example_block_name": {
// "nesting_mode" describes the nesting mode for the
// child block, and can be one of the following:
// single
// list
// set
// map
"nesting_mode": "list",
"block": <block-representation>,

// "min_items" and "max_items" set lower and upper
// limits on the number of child blocks allowed for
// the list and set modes. These are
// omitted for other modes.
"min_items": 1,
"max_items": 3