npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@fluidwalletbase/sdk

v1.0.31

Published

Fluid Smart Order Router SDK — scaffold a swap interface powered by FluidSOR on Base in one command

Readme

@fluidwalletbase/sdk

Scaffold a production-ready swap interface powered by the Fluid Smart Order Router — identical UI to the Fluid SOR page, in one command.

npm version License: MIT


Packages

| Package | Description | |---|---| | @fluidwalletbase/sdk | CLI scaffold — creates a full swap app in one command | | @fluidwalletbase/wallet-endpoints | Developer SDK — FluidWalletClient for balance, quotes, send, swap |


Quick start

npx @fluidwalletbase/sdk create my-swap-app

The CLI will interactively ask for:

  1. Fluid API key (fw_sor_...) — get it at fluidnative.com → Developer Console → API Keys
  2. Seed phrase (hidden input — never echoed, never written to disk) — your signing key is derived in-process (BIP-44 m/44'/60'/0'/0/0) and only the private key is saved to .env.local
# [1/5] Fluid API key setup
# ? Paste API key (fw_sor_...): fw_sor_...
#
# [2/5] Derive signing key from seed phrase
# ? Seed phrase (hidden):          ← input invisible
# ✓ Seed phrase received  (12 words — input hidden)
#
# [3/5] Scaffolding my-swap-app…
# [4/5] Installing dependencies…
# [5/5] Deriving signing key and writing .env.local…
# ✓ API key written   fw_sor_48d688•••
# ✓ Signing key derived  0x1ab42c… (seed phrase not stored)
cd my-swap-app
npm run dev
# → http://localhost:5173

What you get (v1.0.31)

The scaffolded app ships the same UI as the Fluid Smart Order Routing page — drop it straight into your dApp.

| Feature | Detail | |---|---| | Network image logos | Base · Ethereum · Solana · Injective — hosted image buttons, not emoji | | 25+ DEX venue logos | Uniswap, Aerodrome, Curve, Odos, 1inch, Balancer, PancakeSwap, SushiSwap, Velodrome, KyberSwap, DODO, Bancor, Trader Joe, GMX, WOOFi, Hashflow, Maverick, Ambient, Clipper, OpenOcean + more | | Live scanning animation | 25-venue sweep carousel with per-venue logo images during routing | | Best price auto-selected | All venues queried simultaneously — best output highlighted with rank badges | | Two-stage swap flow | "Route via FluidSOR" → inspect routes → swipe-to-confirm execution | | Swipe-to-confirm UX | Drag gesture required before signing any on-chain transaction | | Live balance card | Token balances across all 4 networks — refreshes automatically after swap | | Gas awareness | Native gas balance check per network — warns if insufficient for execution | | Multi-network quoting | Base (25 venues) · Ethereum (Uniswap V3) · Solana (Jupiter) · Injective (Helix) | | FluidSOR contract | Calls FluidSOR.sol on Base mainnet — routes the swap to the winning venue | | Split routing | Order splitting across two venues to minimise slippage | | Direct wallet signing | viem + derived private key — no MetaMask popup, no wallet extension needed | | Fluid Intelligence branding | Matching header with Fluid logo + Fluid Intelligence subheading | | Zero config | Works out of the box after npx @fluidwalletbase/sdk create |


How the swap flow works

Developer enters amount
        │
        ▼
[ Route via FluidSOR ]   ← FluidWalletClient.getQuote()
        │                   25 venues scanned simultaneously with live animation
        │
        ▼
  Ranked routes shown with venue logos:
  🖼  Fluid AMM     100.11 USDT  ← BEST
  🖼  Uniswap V3   100.08 USDT
  🖼  Aerodrome    100.05 USDT
        │
        ▼  (user swipes to confirm)
        │
[ Execute Swap via Fluid AMM ]   ← viem signs ERC-20 approve + swap
        │                           FluidSOR contract calls Fluid AMM on-chain
        ▼
  ✓ Swap confirmed — view on Basescan

Environment variables

# .env.local  (auto-written by the CLI — gitignored)

# Required for route fetching
VITE_FLUID_API_KEY=fw_sor_...

# Required for signing swaps (⚠ never commit this)
VITE_FLUID_PRIVATE_KEY=0x...            # derived from seed phrase by CLI

# Pre-filled — FluidSOR is live on Base mainnet
VITE_FLUID_SOR_ADDRESS=0xF24daF8Fe15383fb438d48811E8c4b43749DafAE

Get your API key at fluidnative.com → Developer Console → API Keys.


Project structure

my-swap-app/
├── src/
│   ├── main.tsx        # React root (no wallet provider needed)
│   ├── App.tsx         # Header (Fluid logo + Fluid Intelligence branding) + footer
│   ├── FluidSwap.tsx   # Swap widget — FluidWalletClient + viem signing
│   ├── config.ts       # Network registry (with imgUrl), token registry, env vars
│   └── index.css       # Base styles + routing animations
├── index.html
├── vite.config.ts
├── tsconfig.json
├── .env.local          # Your secrets (gitignored)
└── .gitignore          # Auto-created — protects .env.local

Using @fluidwalletbase/wallet-endpoints in your own project

The scaffolded app uses this package internally. You can also install it standalone:

npm install @fluidwalletbase/wallet-endpoints
import { FluidWalletClient } from "@fluidwalletbase/wallet-endpoints";

const client = new FluidWalletClient(
  "https://fluidnative.com",
  process.env.FLUID_API_KEY   // fw_sor_...
);

// Get USDC balance of your registered wallet
const { balance } = await client.getBalance("base");
// → "250.00"

// Get ranked swap routes from all DEXs
// Base: 25 venues · Solana: Jupiter · Ethereum: Uniswap V3 · Injective: Helix
const quote = await client.getQuote("USDC", "USDT", "100", "base");
const best  = quote.routes[0];
// → { venue: "Fluid AMM", amountOut: "100.11", badge: "Best" }

// Relay a signed USDC send
const result = await client.send({ chain: "base", to: "0x...", amount: "10", signedTx: "0x..." });

// Relay a signed FluidSOR swap
const result = await client.swap({ tokenIn: "USDC", tokenOut: "USDT", amountIn: "100", amountOut: best.amountOut, signedTx: "0x..." });

See wallet-endpoints README for signing examples.


FluidSOR contract

The swap widget calls FluidSOR deployed on Base mainnet: 0xF24daF8Fe15383fb438d48811E8c4b43749DafAE

Source: contracts/FluidSOR.sol

| Function | Venue | |---|---| | swapViaFluid(...) | Fluid Stable AMM (USDC ↔ USDT) | | swapViaUniV3(...) | Uniswap V3 pool | | splitSwapFluidUniV3(...) | Split order across both venues |

FluidSOR selects the correct function based on the route returned by getQuote() — no manual selection needed.


Customising the swap widget

Change default slippage

// src/FluidSwap.tsx
const [slippage, setSlippage] = useState(0.3); // 0.3%

Use a custom RPC

// src/config.ts  (and src/FluidSwap.tsx)
import { http } from "viem";
const publicClient = createPublicClient({ chain: base, transport: http("https://your-rpc.com") });

Resources

| | | |---|---| | Website | fluidnative.com | | Developer Console | fluidnative.com → Developer Console | | GitHub | github.com/fluidbase9/fluid-sor | | npm — SDK | npmjs.com/package/@fluidwalletbase/sdk | | npm — wallet-endpoints | npmjs.com/package/@fluidwalletbase/wallet-endpoints | | Issues | github.com/fluidbase9/fluid-sor/issues |


License

MIT © Fluid Wallet