# subxt

The [`subxt`](https://github.com/paritytech/subxt) library enables you to submit transactions to a Substrate node through remote procedure calls. Before you use the `subxt` library, you can use the standalone `subxt` command-line interface to download the metadata for the Substrate node you want to use as the target for submitting transactions. The `subxt-cli` tool enables you to perform two key tasks that are critical to using the `subxt` library:

* You can use the `subxt-cli` tool to download the metadata from any target Substrate node.
* You can use the `subxt-cli` tool to generate the runtime API code from the metadata from any target Substrate node.

You can use the `subxt` library and `subxt-cli` tool for any node that uses metadata v14 and later. For examples of how to use the `subxt` library, see the [examples](https://github.com/paritytech/subxt/tree/master/examples) folder.

### Installation

To install `subxt-cli`:

1. Open a terminal shell, if necessary.
2. Verify that you have the Rust compiler and toolchain, if necessary.
3. Download the required packages with the following command: `cargo install subxt-cli`

### Basic command usage

The basic syntax for running `subxt` commands is:

`subxt <SUBCOMMAND>`

To use the commands exposed by `subxt`, you must either be running a node locally or specify the chain you're targeting. If the metadata is already provided, it is possible to use the `codegen` subcommand without running a node.

#### Flags

You can use the following optional flags with the `subxt` command.

| Flag          | Description                   |
| ------------- | ----------------------------- |
| -h, --help    | Displays usage information.   |
| -V, --version | Displays version information. |

#### Subcommands

You can use the following subcommands with the `subxt` command-line interface.

| Command    | Description                                                            |
| ---------- | ---------------------------------------------------------------------- |
| `codegen`  | Generates runtime API client code from metadata.                       |
| `metadata` | Downloads metadata from a Substrate node for use with `subxt` codegen. |

#### Output

Depending on how you specify the subcommand, the output from `subxt` displays some or all of the following information:

| This field | Contains                                    |
| ---------- | ------------------------------------------- |
| Metadata   | A file with the metadata of a target chain. |
| API        | A file with the API of the target chain.    |

#### Examples

To display version information for the `subxt` program, run the following command:

`subxt --version`

To display usage information for the `subxt metadata` command, run the following command:

`subxt metadata --help`

### codegen

Use the `subxt codegen` command to generate an interface for some target Substrate node.

This could be useful for debugging or modifying a node's API to meet certain hardware constraints.

**Basic usage**

`subxt codegen [OPTIONS]`

**Flags**

You can use the following optional flags with the `subxt codegen` command.

| Flag            | Description                 |
| --------------- | --------------------------- |
| `-h, --help`    | Displays usage information. |
| `-V, --version` | Prints version information. |

**Options**

You can use the following command-line options with the `subxt codegen` command.

| Option              | Description                                                                |
| ------------------- | -------------------------------------------------------------------------- |
| `-f, --file <file>` | Specifies the path to the encoded metadata file.                           |
| `--url <url>`       | Specifies the URL of the Substrate node to query for metadata for codegen. |

**Examples**

To format the generated API and print it to the terminal, run the following command:

`subxt codegen | rustfmt`

To save the generated API in a file, run the following command:

`subxt codegen | rustfmt --edition=2018 > api.rs`

### metadata

Use the `subxt metadata` command to get the metadata of the target Substrate node.

**Basic usage**

`subxt metadata [OPTIONS]`

**Flags**

You can use the following optional flags with the `subxt metadata` command.

| Flag            | Description                 |
| --------------- | --------------------------- |
| `-h, --help`    | Displays usage information. |
| `-V, --version` | Prints version information. |

**Options**

You can use the following command-line options with the `subxt metadata` command.

| Option                  | Description                                                                                                                |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `-f, --format <format>` | Specifies the format of the metadata to display. Valid formats are `json`, `hex` or `bytes`. The default format is `json`. |
| `--url <url>`           | Specifies the URL of the Substrate node to query for metadata. The default URL is `http://localhost:9933`.                 |

**Examples**

To save the metadata from the local node encoded in bytes to a file, run the following command:

`subxt metadata -f bytes > metadata.scale`

To save the metadata from the Rococo network to a JSON file, run the following command:

`subxt metadata --url https://rococo-rpc.polkadot.io:443 > <contract_name>.json`

To query type `125` from the array of types in the metadata and output in JSON, run the following command:

`subxt metadata --format json | jq '.[1].V14.types.types | .[125]'`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.infrablockchain.net/infrablockchain-docs/infrablockchain/learn/substrate/learn/command-line-tools/subxt.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
