For builders

Integrate 1337 Wallet

1337 exposes a standard EIP-1193 provider with EIP-6963 discovery, similar to how Rabby documents integration. Use the patterns below in vanilla JS, Wagmi, Ethers, or RainbowKit-style wallet lists.

Provider identity

When discovering wallets via EIP-6963, 1337 announces:

  • name: 1337
  • rdns: io.1337.wallet
  • uuid: 1337-dev-wallet-2026
  • flags: is1337, isMetaMask (drop-in mode)

In MetaMask drop-in mode, 1337 can also appear as io.metamask so existing dapp UIs that filter by MetaMask still connect. Alternative namespace: window.wallet1337 when not replacing MetaMask.

1. Vanilla JavaScript (EIP-6963)

Recommended for multi-wallet environments. Listen for announced providers:

discover-and-connect.ts
let provider: EIP1193Provider | null = null;

window.addEventListener('eip6963:announceProvider', (event: Event) => {
  const detail = (event as CustomEvent).detail;
  if (detail.info.rdns === 'io.1337.wallet') {
    provider = detail.provider;
  }
});

window.dispatchEvent(new Event('eip6963:requestProvider'));

async function connect1337() {
  if (!provider) throw new Error('1337 Wallet not installed');
  const accounts = await provider.request({
    method: 'eth_requestAccounts',
  });
  return accounts[0];
}

2. window.ethereum fallback

If your dapp already uses MetaMask-style injection, 1337 works as a drop-in when the user enables replace mode:

legacy-connect.ts
const eth = window.ethereum;
if (!eth?.is1337 && !eth?.isMetaMask) {
  throw new Error('Install 1337 Wallet for Chrome');
}

const [address] = await eth.request({ method: 'eth_requestAccounts' });
console.log('Connected', address);

3. Wagmi v2

Injected connector with EIP-6963-aware discovery (same pattern as Rabby + Wagmi docs):

wagmi.config.ts
import { createConfig, http } from '@wagmi/core';
import { mainnet, base, arbitrum } from '@wagmi/core/chains';
import { injected } from '@wagmi/connectors';

export const config = createConfig({
  chains: [mainnet, base, arbitrum],
  connectors: [
    injected({
      target() {
        return {
          id: 'io.1337.wallet',
          name: '1337',
          provider(window) {
            return window.ethereum?.is1337 ? window.ethereum : undefined;
          },
        };
      },
    }),
  ],
  transports: {
    [mainnet.id]: http(),
    [base.id]: http(),
    [arbitrum.id]: http(),
  },
});

4. Ethers.js v6

ethers-browser.ts
import { BrowserProvider } from 'ethers';

const eth = window.ethereum;
if (!eth) throw new Error('No wallet found');

const provider = new BrowserProvider(eth);
const signer = await provider.getSigner();
const address = await signer.getAddress();

5. UI labels for wallet pickers

Low-cost integration (Rabby's recommended approach): show both MetaMask and 1337 buttons when window.ethereum exists. They hit the same provider object in drop-in mode, but users recognize the brand they installed.

  • Detect 1337: ethereum.is1337 === true
  • EIP-6963: match detail.info.rdns === '$io.1337.wallet'
  • Not installed: link to Install (Chrome, Brave, Opera, Arc — same store listing)

Supported methods

Connect, switch chain, wallet_watchAsset (ERC-20 add-token), send, personal_sign, and typed data (Permit2, EIP-2612, Pendle orders). wallet_getCapabilities always returns empty per-chain objects so Uniswap / wagmi fall back to eth_sendTransaction. Full table, including what we do not implement and what dapps use instead, is on RPC methods.

For AI agents

Machine-readable summary: 1337 Wallet is a Chrome MV3 extension exposing window.ethereum (optional MetaMask shim) and EIP-6963 provider io.1337.wallet. No WalletConnect server required for extension users. Transaction previews include decoded calldata and Etherscan deep links. Expect users to review details in Normal mode before signing.