https://github.com/paritytech/subxt
Interact with Substrate based nodes in Rust or WebAssembly
https://github.com/paritytech/subxt
Last synced: 16 days ago
JSON representation
Interact with Substrate based nodes in Rust or WebAssembly
- Host: GitHub
- URL: https://github.com/paritytech/subxt
- Owner: paritytech
- License: other
- Created: 2019-08-05T09:55:57.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-12-08T00:34:34.000Z (4 months ago)
- Last Synced: 2025-12-08T18:48:13.779Z (4 months ago)
- Language: Rust
- Homepage:
- Size: 501 MB
- Stars: 473
- Watchers: 21
- Forks: 281
- Open Issues: 85
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
- best-of-crypto - GitHub - 9% open · ⏱️ 05.06.2024): (Smart Contract Platforms)
- awesome-mcp - paritytech/subxt - Subxt is a versatile Rust and WebAssembly library enabling interaction with Substrate-based blockchain nodes through transaction submission, event subscription, storage access, and runtime API calls via static and dynamic interfaces. (MCP Frameworks and libraries / Rust)
README
Subxt is a library for interacting with chains in the [Polkadot](https://github.com/paritytech/polkadot-sdk) network. It can:
- Submit Extrinsics (this is where the name comes from).
- Access information at any block (eg storage values, constants, Runtime APIs, View Functions).
- Subscribe to new blocks (and then do the above at them).
- Do all of the above via a safe, statically typed interface or via a flexible dynamic interface.
- Do most of the above via a built-in light client to interact with chains trustlessly.
- Compile to WASM and run [entirely in the browser](./examples/wasm-example), or be [called via FFI](./examples/ffi-example) in many other languages.
- Be used entirely offline to provide a subset of the available functionality.
## Usage
Take a look at the [single-file examples](./subxt/examples) folder or the [project based examples](./examples) folder for various smaller or
larger `subxt` usage examples, or [read the docs](https://docs.rs/subxt/latest/subxt) to learn more.
## Example
The "hello world" example of Subxt is submitting a transaction. This is what it looks like:
```rust
use subxt::{Error, OnlineClient, PolkadotConfig};
use subxt_signer::sr25519::dev;
// Generate an interface that we can use from the node's metadata.
#[subxt::subxt(runtime_metadata_path = "/path/to/polkadot_rc_metadata.scale")]
mod polkadot {}
#[tokio::main]
async fn main() -> Result<(), Error> {
// Create a new API client, configured to talk to Polkadot nodes.
let api = OnlineClient::::new().await?;
// Almost all actions are performed at an explicit block. Here we use
// the current block at the time of running this.
let at_block = api.at_current_block().await?;
// Build a balance transfer extrinsic.
let dest = dev::bob().public_key().into();
let balance_transfer_tx = polkadot::transactions()
.balances()
.transfer_allow_death(dest, 10_000);
// Submit the balance transfer extrinsic from Alice, and wait for it
// to be successful and in a finalized block. We get back the extrinsic
// events if all is well.
let from = dev::alice();
let events = at_block
.transactions()
.sign_and_submit_then_watch_default(&balance_transfer_tx, &from)
.await?
.wait_for_finalized_success()
.await?;
// (Optional) we can look for a specific event to learn more about
// the submission.
if let Some(event) = events.find_first::() {
println!("Balance transfer success: {event:?}");
}
Ok(())
}
```
## Real world usage
Please add your project to this list via a PR.
- [cargo-contract](https://github.com/paritytech/cargo-contract/) CLI for interacting with Wasm smart contracts.
- [xcm-cli](https://github.com/ascjones/xcm-cli) CLI for submitting XCM messages.
- [phala-pherry](https://github.com/Phala-Network/phala-blockchain/tree/master/standalone/pherry) The relayer between Phala blockchain and the off-chain Secure workers.
- [crunch](https://github.com/turboflakes/crunch) CLI to claim staking rewards in batch every Era or X hours for substrate-based chains.
- [interbtc-clients](https://github.com/interlay/interbtc-clients) Client implementations for the interBTC parachain; notably the Vault / Relayer and Oracle.
- [tidext](https://github.com/tidelabs/tidext) Tidechain client with Stronghold signer.
- [staking-miner-v2](https://github.com/paritytech/staking-miner-v2) Submit NPos election solutions and get rewards.
- [polkadot-introspector](https://github.com/paritytech/polkadot-introspector) Tools for monitoring Polkadot nodes.
- [ink!](https://github.com/paritytech/ink) Smart contract language that uses `subxt` for allowing developers to conduct [End-to-End testing](https://use.ink/basics/contract-testing/end-to-end-e2e-testing) of their contracts.
- [Chainflip](https://github.com/chainflip-io/chainflip-backend) A decentralised exchange for native cross-chain swaps.
- [Hyperbridge](https://github.com/polytope-labs/hyperbridge) A hyperscalable coprocessor for verifiable cross-chain interoperability.
- [pop CLI](https://github.com/r0gue-io/pop-cli) The all-in-one tool for Polkadot development.
## Alternatives
If you're working in TypeScript / JavaScript, [polkadot-api](https://github.com/polkadot-api/polkadot-api) is an excellent and actively developed alternative.
#### License
The entire code within this repository is dual licensed under the _GPL-3.0_ or _Apache-2.0_ licenses. See [the LICENSE](./LICENSE) file for more details.
Please contact us if you have questions about the licensing of our products.