Uniswap v4 Community SDK

A community-built TypeScript SDK for Uniswap v4 with first-class React bindings and an experimental Trading SDK.

The Uniswap v4 Community SDK is a TypeScript monorepo for interacting with Uniswap v4, plus an experimental Trading SDK for the Uniswap Trading API. It ships pool queries, swap execution, liquidity management, and Permit2 approvals out of the box, with first-class React bindings.

This SDK is community-built and maintained by Zaha Studio, with contributions from BootNode and support from the Uniswap Foundation. It is not an official Uniswap Labs product.

Packages

PackageDescription
@zahastudio/uniswap-sdkCore SDK, framework-agnostic. Works with any viem client.
@zahastudio/uniswap-sdk-reactReact hooks and provider built on wagmi + TanStack Query.
@zahastudio/trading-sdkExperimental Trading SDK for quote, approval, and swap flows via the Uniswap Trading API.
@zahastudio/trading-sdk-reactExperimental React provider and hooks for the Trading SDK.

Features

  • Pool queries. Fetch real-time pool state (slot0, liquidity) via multicall.
  • Swap execution. Quote, build calldata, and execute swaps through Universal Router.
  • Liquidity management. Mint, increase, decrease positions and collect fees.
  • Permit2. Batch token approvals with typed signature generation.
  • Built-in caching. LRU cache with a pluggable adapter interface.
  • React hooks. Step-by-step hooks for swaps, positions, approvals, and transactions.

Quick start

Installation

pnpm install @zahastudio/uniswap-sdk viem

Core SDK usage

import { createPublicClient, http } from "viem";
import { mainnet } from "viem/chains";
import { UniswapSDK } from "@zahastudio/uniswap-sdk";

const client = createPublicClient({ chain: mainnet, transport: http() });
const sdk = UniswapSDK.create(client, mainnet.id);

React hooks

pnpm install @zahastudio/uniswap-sdk-react @zahastudio/uniswap-sdk viem wagmi @tanstack/react-query
import { UniswapSDKProvider, useSwap } from "@zahastudio/uniswap-sdk-react";

function App() {
  return (
    <WagmiProvider config={config}>
      <QueryClientProvider client={queryClient}>
        <UniswapSDKProvider>
          <SwapPage />
        </UniswapSDKProvider>
      </QueryClientProvider>
    </WagmiProvider>
  );
}
HookPurpose
useUniswapSDK()Access cached SDK instances by chain
useSwap()Full swap workflow (quote, approve, permit2, execute)
useCreatePosition()Full position creation workflow
usePosition()Fetch position data by token ID
usePoolState()Fetch current pool state by pool key
usePositionIncreaseLiquidity()Add liquidity to an existing position
usePositionRemoveLiquidity()Remove liquidity from a position
usePositionCollectFees()Collect accrued fees
useToken()Fetch token metadata and balance
usePermit2()Permit2 signature workflow (includes approval)
useTokenApproval()ERC-20 approval workflow
useTransaction()Transaction lifecycle management

Resources