Adapters bridge between the AppKit SDK and specific blockchain ecosystems. They live in packages/adapters/.
Location: packages/controllers/src/controllers/AdapterController/ChainAdapterBlueprint.ts
Every adapter extends this abstract class:
abstract class AdapterBlueprint<Connector extends ChainAdapterConnector> {
public namespace: ChainNamespace | undefined
public adapterType: string | undefined
protected availableConnectors: Connector[] = []
protected availableConnections: Connection[] = []
// Must implement:
abstract construct(params: AdapterBlueprint.Params): void
abstract setUniversalProvider(provider: UniversalProvider): Promise<void>
// Core connection methods:
async connect(params): Promise<string>
async disconnect(): Promise<void>
async switchNetwork(caipNetwork): Promise<boolean>
async signMessage(message): Promise<string>
async sendTransaction(args): Promise<string>
async estimateGas(args): Promise<bigint>
async getBalance(): Promise<GetBalanceResult>
// Event system:
addEventListener(event: EventName, callback): void
removeEventListener(event: EventName, callback): void
// Provider management:
setAuthProvider(authProvider: W3mFrameProvider): void
setUniversalProvider(universalProvider: UniversalProvider): Promise<void>
}Adapters emit these events:
disconnect— Wallet disconnectedaccountChanged— Active account changedswitchNetwork— Network switchedconnections— Available connections changedconnectors— Available connectors changedpendingTransactions— Pending transaction state changed
EVM chains via Wagmi/Viem.
import { WagmiAdapter } from '@reown/appkit-adapter-wagmi'
const wagmiAdapter = new WagmiAdapter({
networks: [mainnet, polygon, arbitrum],
projectId: 'your-project-id',
customRpcUrls: { 1: 'https://...' } // Optional
})
// Exposes wagmiConfig for direct Wagmi usage
wagmiAdapter.wagmiConfigSolana blockchain.
import { SolanaAdapter } from '@reown/appkit-adapter-solana'
const solanaAdapter = new SolanaAdapter({
connectionSettings: 'confirmed', // Commitment level
wallets: [...], // Optional wallet list
})Bitcoin and UTXO-based chains.
EVM via ethers.js v6.
EVM via ethers.js v5 (legacy support).
Polkadot ecosystem (private/internal).
TON blockchain.
-
Create
packages/adapters/<name>/mirroring existing adapter structure:packages/adapters/<name>/ ├── src/ │ ├── client.ts # Adapter class extending AdapterBlueprint │ ├── index.ts # Package exports │ ├── connectors/ # Connector implementations │ ├── providers/ # Provider implementations │ └── utils/ # Helper utilities ├── tests/ ├── package.json ├── tsconfig.json └── vitest.config.ts -
Extend
AdapterBlueprint:export class MyAdapter extends AdapterBlueprint<MyConnector> { constructor(params: MyAdapterParams) { super({ namespace: 'mychain' }) } override async connect(params) { /* ... */ } override async disconnect() { /* ... */ } override async switchNetwork(network) { /* ... */ } override async signMessage(message) { /* ... */ } override async sendTransaction(args) { /* ... */ } override async getBalance() { /* ... */ } }
-
Dependencies in
package.json:@reown/appkit— SDK facade@reown/appkit-common— Types/utils@reown/appkit-utils— Integration helpers@reown/appkit-wallet— Wallet models- Ecosystem SDKs as
peerDependencies - Optional wallets as
optionalDependencies
-
Keep business logic in controllers/utilities; adapters translate between host SDK APIs and AppKit abstractions.
-
Add to
pnpm-workspace.yamland test with an example app.