Skip to main content
Rewrite, filter, reorder, or add networks before they’re used by the SDK. Set once during initialization with the transformers.networksData callback, applies to all operations (balance fetching, transactions, RPC client creation).
What is an RPC? An RPC (remote procedure call) endpoint is the URL your app uses to read from and write to a blockchain (e.g. send transactions, read balances). The SDK needs at least one RPC URL per network.Why set your own? You might set custom RPC URLs for rate limits, reliability, or to use a provider you already use (e.g. Alchemy, Infura). If you don’t set them, the SDK uses defaults from the Dynamic dashboard.When can I skip this? If you’re fine with the dashboard defaults and don’t need to customize networks, you don’t need to use network transformers. Only use this page when you want to override RPC URLs, restrict which networks are available, control the default network, or add a custom network.

Prerequisites

Before this: create and initialize a Dynamic client (see Creating a Dynamic Client, Initializing the Dynamic Client). You also need @dynamic-labs-sdk/client installed; RPC provider API keys are optional.

Quick Start

The networksData transformer receives the full list of networks from your project settings and returns the list the SDK should use. Return a new array — filter it, reorder it, map over it, or append to it.

The default network

The first network of a chain is the default for wallets with no saved network selection — so ordering controls the fresh-install default. Filtering or reordering the list also changes which network a wallet starts on.

Common Patterns

Override RPC URLs for multiple networks:
Add fallback URLs:
Reorder to set the default, then customize:
Environment-based RPC URLs:

NetworkData shape

Each network in the list has the following fields: When you rewrite a network, spread the original and override only what you need. Extra properties beyond this shape are preserved.

Network IDs

EVM networks use chain IDs: '1' (Ethereum), '137' (Polygon), '8453' (Base), '42161' (Arbitrum), '10' (Optimism), '11155111' (Sepolia) Solana networks use cluster names: 'mainnet-beta', 'devnet', 'testnet' The transformer receives all chains — EVM, Solana, Sui, and others enabled in your project — in one list.

Provider Examples

Alchemy:
Infura:

Error handling

The callback’s output is validated at runtime, but validation never blocks your app:
  • If the callback returns malformed network data, the SDK logs an error and still uses the returned list. Operations relying on the invalid fields may misbehave.
  • If the callback throws, the SDK logs an error and falls back to the untransformed list (restoring the untransformed default network).
Errors are reported through the client’s logger at error level. If you provide a custom logger, forward error calls to see them.

Rules

  • Always return a valid NetworkData[] list
  • Keep the callback pure and synchronous (no async/await, no side effects)
  • Use environment variables for API keys
  • The callback runs on network reads, starting after project settings load

Migrating from networkData

The per-item transformers.networkData callback is deprecated in favor of transformers.networksData. It still works and the two compose — networkData runs on each network first, then networksData receives the resulting list — but networkData can only rewrite individual networks; it can’t filter, reorder, or add networks or control the default. Move your logic into networksData by wrapping it in networksData.map(...).

React

Network transformers are configured at client creation time, so they live in the same module-level file as your createDynamicClient call. No React-specific wiring needed — the transformer runs during initialization before any component renders.
Last modified on July 20, 2026