Skip to content

Output formats

Most opentf-ctl commands output structured data. By default, the output is formatted as a table. The --output flag allows you to change the output format. The supported formats are:

wide                                   # show additional information
custom-columns=                        # show specified information
json                                   # show information in JSON format
yaml                                   # show information in YAML format


The --output=wide or -o wide format shows more information than the default format. Please refer to the command’s description for more details on the additional information.

Custom columns

The --output=custom-columns=... or -o custom-columns=... format allows you to specify the columns to display. It is supported by most commands. The columns are specified as a comma-separated list of {column name}:{key path} definitions.

The column name can be any string not containing a colon. The key path starts with an optional dot and is a dot-separated list of keys to access the value to display. For example, will display the name key of the metadata object, my name.

  name: my name
    foo: bar
    baz: qux
  runs-on: [agent1, agent2]

If the key path denotes an object or a list, its JSON representation will be returned. For example, using the example above, .metadata.labels gives {"foo": "bar", "baz": "qux"} and .spec.runs-on gives ["agent1", "agent2"].

You can use * to group values: .metadata.labels.* gives ["bar", "qux"].

You can use *~ to group keys: .metadata.labels.*~ gives ["foo", "baz"].

Please note that *~ can only be used at the end of the key path.

The command’s description lists commonly available keys, but any key can be used. If you do not find the information you are looking for, you can use the -o json or -o yaml format to discover the information’s structure.

If the key path is invalid, the value will be <none>.


Those key paths are JSON paths. If you are familiar with jq, you probably recognized the syntax. The root node is implicit here, and you can only use the dot notation. Functions and filters are irrelevant in the context and are hence unavailable.


The --output={json,yaml} or -o {json,yaml} format shows the information in JSON or YAML format. Depending on the command, the output is either an object or a list of objects. It can be fed to jq or yq for further processing.