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

# Supported networks

> EVM networks available to OMS wallets, listed with their chain IDs.

export const SupportedNetworks = () => {
  const [networks, setNetworks] = React.useState([]);
  const [status, setStatus] = React.useState('loading');
  const [query, setQuery] = React.useState('');
  const TESTNET_PATTERNS = ['testnet', 'sepolia', 'holesky', 'goerli', 'ropsten', 'rinkeby', 'kovan', 'mumbai', 'amoy', 'fuji', 'chapel', 'moonbase', 'minato', 'alfajores', 'devnet'];
  const isTestnet = name => {
    const n = name.toLowerCase();
    return TESTNET_PATTERNS.some(p => n.includes(p));
  };
  const capitalize = name => name.charAt(0).toUpperCase() + name.slice(1);
  React.useEffect(() => {
    let active = true;
    const controller = new AbortController();
    fetch('https://nodes.sequence.app/status', {
      method: 'GET',
      mode: 'cors',
      credentials: 'omit',
      headers: {
        accept: '*/*',
        'x-access-key': 'AQAAAAAAAEDhMKr7aFdy4PIevg2ywkOvUEE'
      },
      signal: controller.signal
    }).then(res => {
      if (!res.ok) throw new Error('Request failed');
      return res.json();
    }).then(data => {
      if (!active) return;
      const list = (data.networks || []).map(n => ({
        id: n.id,
        network: n.network,
        testnet: isTestnet(n.network)
      })).sort((a, b) => {
        if (a.testnet !== b.testnet) return a.testnet ? 1 : -1;
        return a.network.localeCompare(b.network);
      });
      setNetworks(list);
      setStatus('ready');
    }).catch(err => {
      if (err.name === 'AbortError') return;
      if (!active) return;
      setStatus('error');
    });
    return () => {
      active = false;
      controller.abort();
    };
  }, []);
  const q = query.trim().toLowerCase();
  const filtered = networks.filter(n => {
    if (!q) return true;
    const type = n.testnet ? 'testnet' : 'mainnet';
    return n.network.toLowerCase().includes(q) || String(n.id).includes(q) || type.includes(q);
  });
  const mainnetCount = filtered.filter(n => !n.testnet).length;
  const testnetCount = filtered.length - mainnetCount;
  if (status === 'loading') {
    return <div className="not-prose max-w-2xl flex items-center gap-3 rounded-2xl border border-gray-200 dark:border-white/10 px-6 py-4 text-sm text-gray-500 dark:text-gray-400">
        <svg className="w-4 h-4 animate-spin text-[#670DE5]" fill="none" viewBox="0 0 24 24">
          <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
          <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" />
        </svg>
        Loading supported networks...
      </div>;
  }
  if (status === 'error') {
    return <div className="not-prose max-w-2xl rounded-2xl border border-amber-200 dark:border-amber-500/30 bg-amber-50 dark:bg-amber-500/10 px-6 py-3 text-sm text-amber-800 dark:text-amber-300">
        Unable to load the live network list right now. Please refresh the page or try again shortly.
      </div>;
  }
  const badge = testnet => testnet ? <span className="inline-flex items-center rounded-md px-2 py-0.5 text-xs font-semibold bg-amber-50 dark:bg-amber-400/15 text-amber-700 dark:text-amber-400 border border-amber-200 dark:border-amber-400/30">
        Testnet
      </span> : <span className="inline-flex items-center rounded-md px-2 py-0.5 text-xs font-semibold bg-emerald-50 dark:bg-emerald-500/15 text-emerald-700 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-500/30">
        Mainnet
      </span>;
  const rowStyle = {
    display: 'grid',
    gridTemplateColumns: '1.7fr 1fr 0.8fr',
    alignItems: 'center'
  };
  return <div className="not-prose max-w-2xl space-y-4">
      <div className="flex flex-col sm:flex-row sm:items-center gap-3">
        <input type="text" placeholder="Filter by network, chain ID, or type..." value={query} onChange={e => setQuery(e.target.value)} className="w-full sm:max-w-xs px-4 py-2 rounded-full bg-gray-100 dark:bg-white/10 text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 outline-none border border-transparent focus:border-[#670DE5] transition-colors" />
        <p className="text-sm text-gray-500 dark:text-gray-400">
          {mainnetCount} mainnet · {testnetCount} testnet
        </p>
      </div>

      {filtered.length > 0 ? <div className="rounded-2xl border border-gray-200 dark:border-white/10 overflow-hidden text-sm">
          <div style={rowStyle} className="bg-gray-50 dark:bg-white/5 font-semibold text-gray-700 dark:text-gray-200">
            <div className="pl-6 pr-4 py-3">Network</div>
            <div className="px-4 py-3">Chain ID</div>
            <div className="px-4 py-3">Type</div>
          </div>
          {filtered.map(n => <div key={n.id} style={rowStyle} className="border-t border-gray-100 dark:border-white/5">
              <div className="pl-6 pr-4 py-2.5 text-gray-800 dark:text-gray-100">{capitalize(n.network)}</div>
              <div className="px-4 py-2.5 font-mono text-gray-600 dark:text-gray-300">{n.id}</div>
              <div className="px-4 py-2.5">{badge(n.testnet)}</div>
            </div>)}
        </div> : <p className="text-sm text-gray-500 dark:text-gray-400">No networks match your filter.</p>}
    </div>;
};

OMS wallets support any EVM-compatible network. The chains listed below are available out of the box, each identified by its chain ID. Mainnets are listed first, followed by testnets. The list is fetched live, so it always reflects the networks currently online.

<Note>
  Support for Tron and Solana is coming soon.
</Note>

## Networks

<SupportedNetworks />

<Note>
  Because OMS wallets work with any EVM-compatible chain, a network not listed here may still be supported on request.
</Note>
