Skip to content

Latest commit

 

History

18 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wagmi-swift

wagmi-swift

Native Swift port of wagmi for iOS and macOS. Built on viem-swift.

Ported to Swift by Backseats

Documentation: backseats.com/wagmi-swift

Requirements

  • iOS 17+ / macOS 14+
  • Swift 6.1+

Installation

Add to your Package.swift:

dependencies: [
    .package(url: "https://github.com/backseats/wagmi-swift.git", from: "0.1.0"),
]

Then add Wagmi to your target:

.target(name: "MyApp", dependencies: [
    .product(name: "Wagmi", package: "wagmi-swift"),
]),

Quick Start

Set Up WagmiConfig

import SwiftUI
import Wagmi

@main
struct MyApp: App {
    let config = WagmiConfig(chains: [.mainnet, .base, .arbitrum])

    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(config)
        }
    }
}

Use in a View

struct ContentView: View {
    @Environment(WagmiConfig.self) var config

    var body: some View {
        if config.isConnected {
            Text("Connected: \(config.currentAddress?.checksummed ?? "")")
            Text("Chain: \(config.currentChain?.name ?? "Unknown")")
        } else {
            Button("Connect") {
                Task { try await config.connect() }
            }
        }
    }
}

Use Hooks

struct BalanceView: View {
    @Environment(WagmiConfig.self) var config
    @State private var balance = UseBalance()

    var body: some View {
        VStack {
            if balance.isLoading {
                ProgressView()
            } else if let data = balance.data {
                Text("\(data) wei")
            }
        }
        .task {
            await balance.fetch(config: config, address: config.currentAddress!)
        }
    }
}

Use viem-swift Directly

Since Wagmi re-exports ViemSwift, you get full access to low-level Ethereum primitives:

import Wagmi // also gives you ViemSwift types

// ABI encoding
let calldata = try ABIEncoder.encodeFunctionData(
    signature: "transfer(address,uint256)",
    values: [.address(recipient), .uint(amount)]
)

// Keccak-256 hashing
let hash = Keccak256.hash(data: someData)

// Public client for read-only RPC calls
let client = try PublicClient(chain: .mainnet)
let blockNumber = try await client.getBlockNumber()

Architecture

wagmi-swift depends on viem-swift, mirroring the TypeScript ecosystem:

  • viem-swift — Low-level Ethereum client (ABI, RLP, keccak, signing, JSON-RPC, chains)
  • wagmi-swift — High-level config, wallet connectors, SwiftUI hooks

API Index

Every item below links to the source definition in this repo.

Config and connection hooks

Read hooks

Write, signing, and verification hooks

Watch hooks

Batch call hooks (EIP-5792)

Connectors

Supporting types and storage

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages