Modern TypeScript SDK for integrating Uniswap V4 into your dapp.
Early version: API may change rapidly.
- 🚀 Full TypeScript support
- 🔄 Multi-chain support out of the box
- 📦 Zero dependencies (except peer deps)
- 🔍 Comprehensive error handling
- 🧪 Fully tested
- 📚 Well documented
pnpm install uniswap-dev-kit
# or
npm install uniswap-dev-kitimport { UniDevKitV4 } from "uniswap-dev-kit";
// Create instance for Ethereum mainnet
const ethInstance = new UniDevKitV4({
chainId: 1,
rpcUrl: "https://eth.llamarpc.com",
contracts: {
poolManager: "0x...",
positionDescriptor: "0x...",
positionManager: "0x...",
quoter: "0x...",
stateView: "0x...",
universalRouter: "0x...",
permit2: "0x..."
}
});
// Create instance for another chain (e.g., Base)
const baseInstance = new UniDevKitV4({
chainId: 8453,
rpcUrl: "https://mainnet.base.org",
contracts: {
// Base Uniswap V4 contract addresses...
}
});import { parseEther } from "viem";
const quote = await ethInstance.getQuote({
tokens: [
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
],
feeTier: 3000,
amountIn: parseEther("1"),
zeroForOne: true
});
console.log(quote.amountOut);const pool = await ethInstance.getPool({
tokens: [
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
],
feeTier: 3000
});
console.log(pool.liquidity.toString());const position = await ethInstance.getPosition({
tokenId: "123"
});
console.log({
token0: position.token0.symbol,
token1: position.token1.symbol,
liquidity: position.position.liquidity.toString()
});All SDK functions include comprehensive error handling:
try {
const quote = await ethInstance.getQuote({
tokens: [token0, token1],
feeTier: 3000,
amountIn: parseEther("1"),
zeroForOne: true
});
} catch (error) {
// Handle specific error types
if (error.message.includes("insufficient liquidity")) {
// Handle liquidity error
} else if (error.message.includes("invalid pool")) {
// Handle pool error
}
}You can use the SDK with React Query for data fetching:
import { useQuery } from '@tanstack/react-query';
import { UniDevKitV4 } from 'uniswap-dev-kit';
// Create instance once
const sdk = new UniDevKitV4({
chainId: 1,
rpcUrl: "https://eth.llamarpc.com",
contracts: {
// ... contract addresses
}
});
// Simple hook for quotes
function useQuote() {
return useQuery({
queryKey: ['quote'],
queryFn: () => sdk.getQuote({
tokens: [
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
],
feeTier: 3000,
amountIn: parseEther("1"),
zeroForOne: true
})
});
}See full TypeDoc documentation for all methods, types, and advanced usage.
pnpm build— Build the librarypnpm test— Run all testspnpm lint— Lint code with Biomepnpm format— Format code with Biomepnpm docs— Generate API docs with TypeDoc
See CONTRIBUTING.md for guidelines.
- Releases are automated with semantic-release.
- Versioning: semver
- Does it work in Node and browser?
Yes, works in both environments. - Can I use my own ABIs?
Yes, but Uniswap V4 ABIs are included.
MIT
Feedback, issues, and PRs welcome.
API Docs • Open an Issue