> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rampnow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported Blockchains

> Browse all blockchains supported by Rampnow, grouped by product

<Note>
  **Real-time data** — This list is generated directly from the live Rampnow configuration API and updates automatically as new blockchains are added or removed.
</Note>

Rampnow supports a wide range of blockchain networks for onramp and offramp flows. Each blockchain listed here has at least one active product route—either **Onramp** (buy), **Offramp** (sell), or **Swap/Bridge(coming soon!)** on real-time configuration from our production routing engine.

## How This Page Works

Use the interactive explorer to find supported blockchains and their token coverage.

<Steps>
  <Step title="Search by blockchain">
    Type the name of a blockchain (e.g. `ethereum`, `bitcoin`, `polygon`, `pulsechain`) to instantly filter the list.
  </Step>

  <Step title="Filter by product">
    Show only blockchains that support **Onramp** (buy assets), **Offramp** (sell assets), or view all networks at once.
  </Step>

  <Step title="Review chain details">
    Each blockchain displays its supported products, total tokens and breakdown of onramp/offramp availability.
  </Step>
</Steps>

<Card title="Skip to Blockchain Explorer" icon="arrow-down" href="#blockchain-explorer">
  Jump directly to the interactive blockchain list to search and filter supported networks.
</Card>

<Info>
  This helps partners and developers understand exactly which networks are covered and how deep the token support is across each one.
</Info>

## What's Included

This list includes all blockchains where Rampnow has active, production-ready routes.

<AccordionGroup>
  <Accordion title="Major L1 Networks" icon="layer-group">
    Leading layer-1 blockchains including Ethereum, Bitcoin, Solana, Avalanche, Tron, BNB Chain and more.
  </Accordion>

  <Accordion title="L2 Networks" icon="bolt">
    Scaling solutions like Arbitrum, Optimism, Base, zkSync, Polygon PoS, Linea and other layer-2 networks.
  </Accordion>

  <Accordion title="Ecosystem Chains" icon="network-wired">
    Specialized networks including Kava, Fantom, Aurora, Cronos, Harmony and ecosystem-specific chains.
  </Accordion>

  <Accordion title="Emerging Blockchains" icon="rocket">
    New and emerging blockchains integrated through Rampnow's routing layer based on partner demand or institutional requirements.
  </Accordion>
</AccordionGroup>

<Warning>
  Chains without active buy/sell routes do not appear until they are fully enabled in production.
</Warning>

## Data Sources & Updates

This page uses live data from Rampnow's routing configuration API, ensuring accuracy and real-time updates.

<div style={{display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem'}}>
  <Card title="Automatic Updates" icon="rotate">
    Newly supported chains appear automatically once activated in production.
  </Card>

  <Card title="Real-Time Status" icon="signal">
    Chains temporarily disabled due to liquidity or infrastructure issues are hidden immediately.
  </Card>

  <Card title="Live Token Counts" icon="hashtag">
    Token counts update instantly when assets are added or removed from any blockchain.
  </Card>

  <Card title="Zero Maintenance" icon="check">
    No manual updates required—partners always see real-time network coverage.
  </Card>
</div>

<Tip>
  Partners always see the real-time network coverage powering both Rampnow's widget and API.
</Tip>

## Need Support for a New Chain?

Want Rampnow to add a blockchain that's not currently listed? We're always evaluating new networks based on demand and feasibility.

### What to Include in Your Request

<div style={{display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem'}}>
  <Card title="Chain Details" icon="link">
    * Chain name
    * Chain ID
    * RPC endpoints
  </Card>

  <Card title="Token Information" icon="coins">
    * Native token details
    * Token contract addresses (if applicable)
  </Card>
</div>

Our routing and liquidity teams will review feasibility and provide integration timelines.

<div style={{display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem'}}>
  <Card title="Contact Sales" icon="envelope" href="https://rampnow.io/en/list#list-token-form">
    Reach out via our Contact & Support page
  </Card>

  <Card title="Email Us" icon="paper-plane">
    Send details to `admin@rampnow.io`
  </Card>
</div>

<Note>
  Integration timelines vary based on technical complexity, liquidity availability and regulatory requirements for each blockchain.
</Note>

## Supported Blockchains

export const ChainExplorer = () => {
  const [chainsData, setChainsData] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);
  const [searchQuery, setSearchQuery] = useState("");
  const [selectedProduct, setSelectedProduct] = useState("all");
  useEffect(() => {
    async function load() {
      try {
        const res = await fetch("https://api.rampnow.io/api/ramp/v1/ramp_order/quote/config?apiKey=pk_live_zXuMmMzFAbfnMPQnwfEaMkabwPfKsVsg");
        if (!res.ok) throw new Error("Failed to load config");
        const json = await res.json();
        const assetConfigs = json?.data?.assetConfigs || ({});
        const chainMap = new Map();
        Object.entries(assetConfigs).filter(([assetKey, assetConfig]) => typeof assetKey === "string" && assetKey.includes(":") && assetConfig?.orderTypeConfigs).forEach(([assetKey, assetConfig]) => {
          const [symbol, chainRaw] = assetKey.split(":");
          const chain = chainRaw.trim();
          const orderTypeConfig = assetConfig.orderTypeConfigs || ({});
          let hasOnramp = orderTypeConfig?.["buy"]?.status?.toLowerCase() === "active";
          let hasOfframp = orderTypeConfig?.["sell"]?.status?.toLowerCase() === "active";
          if (!hasOnramp && !hasOfframp) return;
          if (!chainMap.has(chain)) {
            chainMap.set(chain, {
              chain,
              products: new Set(),
              totalTokens: 0,
              onrampTokens: 0,
              offrampTokens: 0
            });
          }
          const entry = chainMap.get(chain);
          entry.totalTokens += 1;
          if (hasOnramp) {
            entry.products.add("Onramp");
            entry.onrampTokens += 1;
          }
          if (hasOfframp) {
            entry.products.add("Offramp");
            entry.offrampTokens += 1;
          }
        });
        const chainsArray = Array.from(chainMap.values()).map(c => ({
          chain: c.chain,
          products: Array.from(c.products),
          totalTokens: c.totalTokens,
          onrampTokens: c.onrampTokens,
          offrampTokens: c.offrampTokens
        }));
        setChainsData(chainsArray);
        setLoading(false);
      } catch (e) {
        setError("Unable to load supported blockchains.");
        setLoading(false);
      }
    }
    load();
  }, []);
  const availableProducts = useMemo(() => {
    const set = new Set();
    chainsData.forEach(c => c.products.forEach(p => set.add(p)));
    return ["all", ...Array.from(set)];
  }, [chainsData]);
  const filteredChains = useMemo(() => {
    const query = searchQuery.trim().toLowerCase();
    return chainsData.filter(c => {
      const matchesSearch = !query || c.chain.toLowerCase().includes(query);
      const matchesProduct = selectedProduct === "all" || c.products.includes(selectedProduct);
      return matchesSearch && matchesProduct;
    });
  }, [chainsData, searchQuery, selectedProduct]);
  if (loading) return <div className="flex items-center justify-center p-10"><div className="text-sm text-zinc-950/70 dark:text-white/70">Loading...</div></div>;
  if (error) return <div className="p-4 text-sm text-red-700 bg-red-50 dark:bg-red-900/20 rounded-xl border border-red-200 dark:border-red-800">{error}</div>;
  return <div className="space-y-6 not-prose">
      <div className="text-sm text-zinc-950/70 dark:text-white/70">
        <div className="font-semibold text-zinc-950 dark:text-white mb-1">
          {chainsData.length} blockchains with active onramp and/or offramp support
        </div>
        <p>Search by blockchain name or filter by product to see coverage.</p>
      </div>

      <div className="grid gap-4 md:grid-cols-2">
        <input type="text" placeholder="Search blockchain (e.g. ethereum, bitcoin)..." value={searchQuery} onChange={e => setSearchQuery(e.target.value)} className="w-full px-4 py-2.5 rounded-xl border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-zinc-900 text-sm text-zinc-950 dark:text-white placeholder:text-zinc-950/50 dark:placeholder:text-white/50 focus:outline-none focus:ring-2 focus:ring-zinc-950/20 dark:focus:ring-white/20" />
      </div>

      <div className="space-y-2">
        <div className="text-xs font-medium text-zinc-950/70 dark:text-white/70">Filter by product</div>
        <div className="flex flex-wrap gap-2">
          {availableProducts.map(product => <button key={product} onClick={() => setSelectedProduct(product)} className={selectedProduct === product ? "px-4 py-2 rounded-lg text-xs font-semibold border-2 border-green-500 dark:border-zinc-500 text-zinc-600 dark:text-zinc-500 bg-zinc-100 dark:bg-zinc-800 shadow-sm transition-all duration-200 ease-in-out" : "px-4 py-2 rounded-lg text-xs font-medium border-2 border-zinc-900 dark:border-white text-zinc-900 dark:text-white bg-white dark:bg-zinc-900 hover:border-green-500 dark:hover:border-zinc-500 hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-all duration-200 ease-in-out"}>
              {product === "all" ? "All products" : product}
            </button>)}
        </div>
      </div>

      <div className="flex justify-between text-xs text-zinc-950/70 dark:text-white/70">
        <span>Showing {filteredChains.length} of {chainsData.length}</span>
        {(searchQuery || selectedProduct !== "all") && <button onClick={() => {
    setSearchQuery("");
    setSelectedProduct("all");
  }} className="font-medium text-zinc-950 dark:text-white hover:underline">Reset</button>}
      </div>

      <div className="overflow-x-auto">
        <table className="w-full text-sm">
          <thead>
            <tr className="border-b border-zinc-950/10 dark:border-white/10">
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Blockchain</th>
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Products</th>
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Total Tokens</th>
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Onramp</th>
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Offramp</th>
            </tr>
          </thead>
          <tbody>
            {filteredChains.map(c => <tr key={c.chain} className="border-b border-zinc-950/5 dark:border-white/5 hover:bg-zinc-950/5 dark:hover:bg-white/5 transition-colors">
                <td className="py-3 px-4 font-semibold text-zinc-950 dark:text-white">{c.chain}</td>
                <td className="py-3 px-4">
                  <div className="flex flex-wrap gap-1">
                    {c.products.map(p => <span key={p} className="inline-block px-2 py-0.5 rounded-md text-xs border border-zinc-950/10 dark:border-white/10 text-zinc-950/80 dark:text-white/80">
                        {p}
                      </span>)}
                  </div>
                </td>
                <td className="py-3 px-4 text-zinc-950/70 dark:text-white/70">{c.totalTokens}</td>
                <td className="py-3 px-4 text-zinc-950/70 dark:text-white/70">{c.onrampTokens}</td>
                <td className="py-3 px-4 text-zinc-950/70 dark:text-white/70">{c.offrampTokens}</td>
              </tr>)}
          </tbody>
        </table>
      </div>
    </div>;
};

<div id="blockchain-explorer">
  <ChainExplorer />
</div>
