> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-mintlify-6abb8c3a.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Add Network to Your Wallet

> Add Injective networks to your browser wallet in one click. Interactive wallet options for Injective EVM (MetaMask and Trust Wallet) and Injective native (Keplr), covering mainnet and testnet.

Add Injective to your browser wallet with a single click, or use the manual
configuration details below. Injective exposes two interoperable interfaces:

* **Injective EVM** is an Ethereum-compatible JSON-RPC layer. Use it with EVM
  wallets such as MetaMask and Trust Wallet.
* **Injective (native)** is the native Cosmos SDK chain. Use it with Keplr.

<Info>
  Injective EVM and Injective native map to the same network. They use different
  chain IDs but share the same underlying state. See
  [Network Information](/developers/network-information) and
  [EVM Network Information](/developers-evm/network-information) for the full reference.
</Info>

## Injective EVM

Injective EVM works with EVM wallets like MetaMask and Trust Wallet. Pick a
network and choose a wallet option to add or switch to Injective.

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective EVM Mainnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID 1776</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const injected = typeof window !== "undefined" ? window.ethereum : null;
    const list = injected && injected.providers && injected.providers.length ? injected.providers : (injected ? [injected] : []);
    const legacyProvider = list.find((p) => p && p.isMetaMask) || null;
    const getErrorCode = (error) => {
      if (!error) return NaN;
      if (error.data && error.data.originalError && error.data.originalError.code !== undefined) return Number(error.data.originalError.code);
      if (error.data && error.data.code !== undefined) return Number(error.data.code);
      if (error.code !== undefined) return Number(error.code);
      return NaN;
    };
    const providerPromise = typeof window === "undefined"
      ? Promise.resolve(legacyProvider)
      : new Promise((resolve) => {
          let settled = false;
          let timer = null;
          const settle = (provider) => {
            if (settled) return;
            settled = true;
            if (timer) window.clearTimeout(timer);
            window.removeEventListener("eip6963:announceProvider", onAnnounceProvider);
            resolve(provider || null);
          };
          const onAnnounceProvider = (event) => {
            const detail = event && event.detail;
            if (detail && detail.info && detail.info.rdns === "io.metamask" && detail.provider) {
              settle(detail.provider);
            }
          };
          window.addEventListener("eip6963:announceProvider", onAnnounceProvider);
          timer = window.setTimeout(() => settle(legacyProvider), 500);
          window.dispatchEvent(new Event("eip6963:requestProvider"));
        });
    providerPromise.then((provider) => {
      if (!provider) { finish("Wallet not found", false); alert("Please install MetaMask."); return false; }
      return provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x6f0" }]
      }).catch((error) => {
        if (getErrorCode(error) === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x6f0",
              chainName: "Injective",
              rpcUrls: ["https://sentry.evm-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => true);
    })
      .then((connected) => {
        if (!connected) return;
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = getErrorCode(error) === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "7px", padding: "6px 12px", borderRadius: "9px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "145px", transition: "all 160ms ease" }}
    >
      <span aria-hidden="true" style={{ width: "20px", height: "20px", backgroundImage: "url('https://mintcdn.com/injectivelabs-mintlify-6abb8c3a/DU0krLtlJ5bBKhNu/img/wallets/metamask.svg?fit=max&auto=format&n=DU0krLtlJ5bBKhNu&q=85&s=6277f4b4be685a84c742296ff886758e')", backgroundSize: "contain", backgroundRepeat: "no-repeat", backgroundPosition: "center", flexShrink: 0 }} />

      <span data-wallet-label aria-live="polite">Add to MetaMask</span>
    </button>

    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const injected = typeof window !== "undefined" ? window.ethereum : null;
    const list = injected && injected.providers && injected.providers.length ? injected.providers : (injected ? [injected] : []);
    const legacyProvider = typeof window !== "undefined"
      ? ((window.trustwallet && (window.trustwallet.ethereum || window.trustwallet)) || list.find((p) => p && (p.isTrust || p.isTrustWallet)) || null)
      : null;
    const getErrorCode = (error) => {
      if (!error) return NaN;
      if (error.data && error.data.originalError && error.data.originalError.code !== undefined) return Number(error.data.originalError.code);
      if (error.data && error.data.code !== undefined) return Number(error.data.code);
      if (error.code !== undefined) return Number(error.code);
      return NaN;
    };
    const providerPromise = typeof window === "undefined"
      ? Promise.resolve(legacyProvider)
      : new Promise((resolve) => {
          let settled = false;
          let timer = null;
          const settle = (provider) => {
            if (settled) return;
            settled = true;
            if (timer) window.clearTimeout(timer);
            window.removeEventListener("eip6963:announceProvider", onAnnounceProvider);
            resolve(provider || null);
          };
          const onAnnounceProvider = (event) => {
            const detail = event && event.detail;
            if (detail && detail.info && detail.info.rdns === "com.trustwallet.app" && detail.provider) {
              settle(detail.provider);
            }
          };
          window.addEventListener("eip6963:announceProvider", onAnnounceProvider);
          timer = window.setTimeout(() => settle(legacyProvider), 500);
          window.dispatchEvent(new Event("eip6963:requestProvider"));
        });
    providerPromise.then((provider) => {
      if (!provider) { finish("Wallet not found", false); alert("Please install Trust Wallet."); return false; }
      return provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x6f0" }]
      }).catch((error) => {
        if (getErrorCode(error) === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x6f0",
              chainName: "Injective",
              rpcUrls: ["https://sentry.evm-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => true);
    })
      .then((connected) => {
        if (!connected) return;
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = getErrorCode(error) === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "7px", padding: "6px 12px", borderRadius: "9px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "145px", transition: "all 160ms ease" }}
    >
      <span aria-hidden="true" style={{ width: "20px", height: "20px", backgroundImage: "url('https://mintcdn.com/injectivelabs-mintlify-6abb8c3a/DU0krLtlJ5bBKhNu/img/wallets/trust-wallet.svg?fit=max&auto=format&n=DU0krLtlJ5bBKhNu&q=85&s=5153c2ca2f14987c64da89a3acba03d6')", backgroundSize: "contain", backgroundRepeat: "no-repeat", backgroundPosition: "center", flexShrink: 0 }} />

      <span data-wallet-label aria-live="polite">Add to Trust Wallet</span>
    </button>
  </div>
</div>

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective EVM Testnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID 1439</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const injected = typeof window !== "undefined" ? window.ethereum : null;
    const list = injected && injected.providers && injected.providers.length ? injected.providers : (injected ? [injected] : []);
    const legacyProvider = list.find((p) => p && p.isMetaMask) || null;
    const getErrorCode = (error) => {
      if (!error) return NaN;
      if (error.data && error.data.originalError && error.data.originalError.code !== undefined) return Number(error.data.originalError.code);
      if (error.data && error.data.code !== undefined) return Number(error.data.code);
      if (error.code !== undefined) return Number(error.code);
      return NaN;
    };
    const providerPromise = typeof window === "undefined"
      ? Promise.resolve(legacyProvider)
      : new Promise((resolve) => {
          let settled = false;
          let timer = null;
          const settle = (provider) => {
            if (settled) return;
            settled = true;
            if (timer) window.clearTimeout(timer);
            window.removeEventListener("eip6963:announceProvider", onAnnounceProvider);
            resolve(provider || null);
          };
          const onAnnounceProvider = (event) => {
            const detail = event && event.detail;
            if (detail && detail.info && detail.info.rdns === "io.metamask" && detail.provider) {
              settle(detail.provider);
            }
          };
          window.addEventListener("eip6963:announceProvider", onAnnounceProvider);
          timer = window.setTimeout(() => settle(legacyProvider), 500);
          window.dispatchEvent(new Event("eip6963:requestProvider"));
        });
    providerPromise.then((provider) => {
      if (!provider) { finish("Wallet not found", false); alert("Please install MetaMask."); return false; }
      return provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x59f" }]
      }).catch((error) => {
        if (getErrorCode(error) === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x59f",
              chainName: "Injective Testnet",
              rpcUrls: ["https://k8s.testnet.json-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://testnet.blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => true);
    })
      .then((connected) => {
        if (!connected) return;
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = getErrorCode(error) === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "7px", padding: "6px 12px", borderRadius: "9px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "145px", transition: "all 160ms ease" }}
    >
      <span aria-hidden="true" style={{ width: "20px", height: "20px", backgroundImage: "url('https://mintcdn.com/injectivelabs-mintlify-6abb8c3a/DU0krLtlJ5bBKhNu/img/wallets/metamask.svg?fit=max&auto=format&n=DU0krLtlJ5bBKhNu&q=85&s=6277f4b4be685a84c742296ff886758e')", backgroundSize: "contain", backgroundRepeat: "no-repeat", backgroundPosition: "center", flexShrink: 0 }} />

      <span data-wallet-label aria-live="polite">Add to MetaMask</span>
    </button>

    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const injected = typeof window !== "undefined" ? window.ethereum : null;
    const list = injected && injected.providers && injected.providers.length ? injected.providers : (injected ? [injected] : []);
    const legacyProvider = typeof window !== "undefined"
      ? ((window.trustwallet && (window.trustwallet.ethereum || window.trustwallet)) || list.find((p) => p && (p.isTrust || p.isTrustWallet)) || null)
      : null;
    const getErrorCode = (error) => {
      if (!error) return NaN;
      if (error.data && error.data.originalError && error.data.originalError.code !== undefined) return Number(error.data.originalError.code);
      if (error.data && error.data.code !== undefined) return Number(error.data.code);
      if (error.code !== undefined) return Number(error.code);
      return NaN;
    };
    const providerPromise = typeof window === "undefined"
      ? Promise.resolve(legacyProvider)
      : new Promise((resolve) => {
          let settled = false;
          let timer = null;
          const settle = (provider) => {
            if (settled) return;
            settled = true;
            if (timer) window.clearTimeout(timer);
            window.removeEventListener("eip6963:announceProvider", onAnnounceProvider);
            resolve(provider || null);
          };
          const onAnnounceProvider = (event) => {
            const detail = event && event.detail;
            if (detail && detail.info && detail.info.rdns === "com.trustwallet.app" && detail.provider) {
              settle(detail.provider);
            }
          };
          window.addEventListener("eip6963:announceProvider", onAnnounceProvider);
          timer = window.setTimeout(() => settle(legacyProvider), 500);
          window.dispatchEvent(new Event("eip6963:requestProvider"));
        });
    providerPromise.then((provider) => {
      if (!provider) { finish("Wallet not found", false); alert("Please install Trust Wallet."); return false; }
      return provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x59f" }]
      }).catch((error) => {
        if (getErrorCode(error) === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x59f",
              chainName: "Injective Testnet",
              rpcUrls: ["https://k8s.testnet.json-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://testnet.blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => true);
    })
      .then((connected) => {
        if (!connected) return;
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = getErrorCode(error) === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "7px", padding: "6px 12px", borderRadius: "9px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "145px", transition: "all 160ms ease" }}
    >
      <span aria-hidden="true" style={{ width: "20px", height: "20px", backgroundImage: "url('https://mintcdn.com/injectivelabs-mintlify-6abb8c3a/DU0krLtlJ5bBKhNu/img/wallets/trust-wallet.svg?fit=max&auto=format&n=DU0krLtlJ5bBKhNu&q=85&s=5153c2ca2f14987c64da89a3acba03d6')", backgroundSize: "contain", backgroundRepeat: "no-repeat", backgroundPosition: "center", flexShrink: 0 }} />

      <span data-wallet-label aria-live="polite">Add to Trust Wallet</span>
    </button>
  </div>
</div>

<Info>
  The MetaMask and Trust Wallet buttons use the standard `wallet_addEthereumChain`
  request. If the network is already added, the wallet shows a switch prompt instead.
  If nothing happens with an injected wallet, add the network manually with the
  values below.
</Info>

### Manual configuration

<Tabs>
  <Tab title="Injective EVM Mainnet" icon="server">
    | Property | Value |
    | - | - |
    | Network Name | Injective |
    | Chain ID | `1776` |
    | RPC URL | `https://sentry.evm-rpc.injective.network/` |
    | WS Endpoint | `wss://sentry.evm-ws.injective.network` |
    | Currency Symbol | `INJ` |
    | Decimals | `18` |
    | Block Explorer | `https://blockscout.injective.network/` |
  </Tab>

  <Tab title="Injective EVM Testnet" icon="flask-vial">
    | Property | Value |
    | - | - |
    | Network Name | Injective Testnet |
    | Chain ID | `1439` |
    | RPC URL | `https://k8s.testnet.json-rpc.injective.network/` |
    | WS Endpoint | `wss://k8s.testnet.ws.injective.network/` |
    | Currency Symbol | `INJ` |
    | Decimals | `18` |
    | Block Explorer | `https://testnet.blockscout.injective.network/` |
    | Faucet | [`testnet.faucet.injective.network`](https://testnet.faucet.injective.network/) |
  </Tab>
</Tabs>

## Injective (Native)

The native Injective chain works with Keplr. Injective is built into Keplr, so it
is available out of the box. Choose a network below to unlock it in Keplr.

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective Mainnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID injective-1</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const p = typeof window !== "undefined" ? window.keplr : null;
    if (!p) { finish("Wallet not found", false); alert("Please install the Keplr wallet."); return; }
    p.enable("injective-1")
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Keplr enable failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "7px", padding: "6px 12px", borderRadius: "9px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "145px", transition: "all 160ms ease" }}
    >
      <span aria-hidden="true" style={{ width: "20px", height: "20px", borderRadius: "5px", backgroundImage: "url('https://mintcdn.com/injectivelabs-mintlify-6abb8c3a/DU0krLtlJ5bBKhNu/img/wallets/keplr.png?fit=max&auto=format&n=DU0krLtlJ5bBKhNu&q=85&s=0ce25376bf78b46eca9b6c5bb2f00d5a')", backgroundSize: "contain", backgroundRepeat: "no-repeat", backgroundPosition: "center", flexShrink: 0 }} />

      <span data-wallet-label aria-live="polite">Add to Keplr</span>
    </button>
  </div>
</div>

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective Testnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID injective-888</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const p = typeof window !== "undefined" ? window.keplr : null;
    if (!p) { finish("Wallet not found", false); alert("Please install the Keplr wallet."); return; }
    p.enable("injective-888")
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Keplr enable failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "7px", padding: "6px 12px", borderRadius: "9px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "145px", transition: "all 160ms ease" }}
    >
      <span aria-hidden="true" style={{ width: "20px", height: "20px", borderRadius: "5px", backgroundImage: "url('https://mintcdn.com/injectivelabs-mintlify-6abb8c3a/DU0krLtlJ5bBKhNu/img/wallets/keplr.png?fit=max&auto=format&n=DU0krLtlJ5bBKhNu&q=85&s=0ce25376bf78b46eca9b6c5bb2f00d5a')", backgroundSize: "contain", backgroundRepeat: "no-repeat", backgroundPosition: "center", flexShrink: 0 }} />

      <span data-wallet-label aria-live="polite">Add to Keplr</span>
    </button>
  </div>
</div>

<Info>
  Keplr includes Injective by default, so its button simply unlocks the chain in
  the wallet. For a full wallet integration guide, see [Wallets](/defi/wallet/index).
</Info>

### Manual configuration

<Tabs>
  <Tab title="Injective Mainnet" icon="server">
    | Property | Value |
    | - | - |
    | Chain ID | `injective-1` |
    | RPC / Node | `https://sentry.tm.injective.network:443` |
    | Currency Symbol | `INJ` |
    | Decimals | `18` |
    | Explorer | [`injscan.com`](https://injscan.com/) |

    <Info>
      Injective natively uses the chain ID `injective-1`. Its EVM interface uses the
      numeric chain ID `1776`. Both map to the same mainnet.
    </Info>
  </Tab>

  <Tab title="Injective Testnet" icon="flask-vial">
    | Property | Value |
    | - | - |
    | Chain ID | `injective-888` |
    | RPC / Node | `https://testnet.sentry.tm.injective.network:443` |
    | Currency Symbol | `INJ` |
    | Decimals | `18` |
    | Explorer | [`testnet.explorer.injective.network`](https://testnet.explorer.injective.network/) |
    | Faucet | [`testnet.faucet.injective.network`](https://testnet.faucet.injective.network/) |

    <Info>
      Injective natively uses the chain ID `injective-888` on testnet. Its EVM
      interface uses the numeric chain ID `1439`. Both map to the same testnet.
    </Info>
  </Tab>
</Tabs>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.