# Wyllet > Wyllet is an open-source wallet connector for React dApps built on wagmi and viem. A connect button, account panel, tokens, activity, toasts and Sign-In With Ethereum, themed to match your app, with zero direct runtime dependencies (React, wagmi, viem and TanStack Query are peer dependencies). Wyllet is published on npm as `wyllet` (current version 1.1.0, MIT). Install: `pnpm add wyllet wagmi viem @tanstack/react-query`. Source: https://github.com/wyllet/wyllet Key facts: - Peer dependencies only: react >=18, react-dom >=18, wagmi ^3, viem ^2.15, @tanstack/react-query >=5. Optional: @walletconnect/ethereum-provider for QR and mobile wallets. - Main exports: WylletProvider, WylletButton, WylletEmbed, getDefaultConfig, useWyllet, useWylletButton, useWylletToast, useWylletActivity, useWylletAuth, ConnectGate, customChain, popularChains, withDefaultTokens, obsidianTheme, porcelainTheme, auroraTheme, terminalTheme. - Every page below is available as Markdown by adding `.md` to its URL, or by requesting it with `Accept: text/markdown`. **Rules for AI coding assistants** Follow these when generating a Wyllet integration. Full guide: https://wyllet.dev/docs/ai-assistants.md - Install `wyllet wagmi viem @tanstack/react-query`. Add `@walletconnect/ethereum-provider` only when `walletConnectProjectId` is set. - Build the wagmi config with `getDefaultConfig({ appName, chains, walletConnectProjectId })` from `wyllet`. The first chain is the default. Use `customChain()` for chains not in `viem/chains`. - Put providers in a `'use client'` component, nested `WagmiProvider` > `QueryClientProvider` > `WylletProvider`. All Wyllet components and hooks render inside `WylletProvider`. - Do not import any CSS: Wyllet injects its styles. - Render `` for the connect button. For a custom trigger use `useWylletButton()`, whose `open(el)` takes an element; `useWyllet().openConnect({ anchor })` takes an options object. - The `⌘K` shortcut is opt-in: `shortcut="mod+k"`. The popover presentation needs an anchor element. - In Next.js set `appUrl` and `ssr: true` in `getDefaultConfig`, and create the `QueryClient` inside `useState`. - `burnerWallet()` is for local development only. Never use it in production. - Only use props, hooks and options documented on this site. **Minimal integration** ```tsx 'use client' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { useState, type ReactNode } from 'react' import { base, mainnet } from 'viem/chains' import { WagmiProvider } from 'wagmi' import { getDefaultConfig, WylletButton, WylletProvider } from 'wyllet' const config = getDefaultConfig({ appName: 'My dApp', walletConnectProjectId: process.env.NEXT_PUBLIC_WC_PROJECT_ID, chains: [mainnet, base], ssr: true, }) export function Providers({ children }: { children: ReactNode }) { const [queryClient] = useState(() => new QueryClient()) return ( {children} ) } // Anywhere inside : ``` ## Getting started - [Introduction](https://wyllet.dev/docs/introduction.md): What Wyllet is, what it includes, and how it fits into a wagmi + viem dApp. - [Installation](https://wyllet.dev/docs/installation.md): Install Wyllet and its peer dependencies, and enable WalletConnect. - [Quick start](https://wyllet.dev/docs/quick-start.md): Add a working connect button to a React dApp in a few minutes. - [Next.js](https://wyllet.dev/docs/nextjs.md): Use Wyllet with the Next.js App Router, server components and SSR. - [Build with AI assistants](https://wyllet.dev/docs/ai-assistants.md): Give Cursor, Claude Code, Copilot or ChatGPT the Wyllet docs and the rules for a correct integration. ## Core concepts - [Configuration](https://wyllet.dev/docs/configuration.md): Create a wagmi config with getDefaultConfig: app info, chains, transports and wallets. - [WylletProvider](https://wyllet.dev/docs/provider.md): Every WylletProvider prop: theme, appearance, tokens, auth, messages and callbacks. - [WylletButton](https://wyllet.dev/docs/wyllet-button.md): The Island button, its display options, and building your own trigger with useWylletButton. - [Presentations](https://wyllet.dev/docs/presentations.md): Open the panel as a drawer, an anchored popover, a modal or a mobile bottom sheet. ## Customization - [Theming](https://wyllet.dev/docs/theming.md): Theme presets, design tokens as CSS variables, light and dark mode, and custom themes. - [Class names](https://wyllet.dev/docs/class-names.md): Attach your own classes (including Tailwind) to individual Wyllet elements. - [Translations](https://wyllet.dev/docs/i18n.md): Rename any string or translate the entire interface. ## Wallets - [Wallets](https://wyllet.dev/docs/wallets.md): Built-in wallets, EIP-6963 detection, custom wallets and connectors. - [All wallets](https://wyllet.dev/docs/all-wallets.md): The searchable WalletConnect directory with official logos and per-wallet app links. - [WalletConnect](https://wyllet.dev/docs/walletconnect.md): Project IDs, domain allowlists, QR codes and how mobile app links work. ## Chains and tokens - [Chains](https://wyllet.dev/docs/chains.md): popularChains, customChain() and arranging the Networks tab with chainOrder. - [Tokens](https://wyllet.dev/docs/tokens.md): Token lists, withDefaultTokens, pinning, sorting and user token import. ## Features - [Account panel](https://wyllet.dev/docs/account-panel.md): Account summary, identity card, tokens, activity, networks and receive. - [Activity and transactions](https://wyllet.dev/docs/activity.md): Track transactions and log custom events in the activity timeline. - [Toasts](https://wyllet.dev/docs/toasts.md): Themed, promise-aware notifications with useWylletToast. - [Sign-In With Ethereum](https://wyllet.dev/docs/siwe.md): Add a SIWE verification step to the connect flow with an auth adapter. - [ConnectGate](https://wyllet.dev/docs/connect-gate.md): Render content only when users are connected, on a supported network and signed in. ## Reference - [Hooks](https://wyllet.dev/docs/hooks.md): API reference for every Wyllet hook: useWyllet, useWylletButton, useWylletToast, useWylletActivity, useWylletAuth and more. - [Components](https://wyllet.dev/docs/components.md): API reference for every Wyllet component: WylletButton, ConnectGate, Avatar, ChainIcon, TokenIcon, QRCode and more. - [Utilities and types](https://wyllet.dev/docs/utilities.md): Helper functions and the TypeScript types Wyllet exports. ## Guides - [Security](https://wyllet.dev/docs/security.md): Zero direct runtime dependencies, provenance, CSP and what Wyllet does and does not do. - [Migrate from RainbowKit](https://wyllet.dev/docs/migrate-from-rainbowkit.md): Map RainbowKit concepts to Wyllet and switch a dApp over step by step. - [FAQ](https://wyllet.dev/docs/faq.md): Answers to common questions about Wyllet: pricing, wallets, chains, Next.js, styling, security and data collection. ## Blog - [Introducing Wyllet 1.0](https://wyllet.dev/blog/introducing-wyllet.md): An open-source wallet connector for React dApps, built on wagmi and viem, with its own look and no direct runtime dependencies. - [How we shipped a wallet connector with zero direct runtime dependencies](https://wyllet.dev/blog/zero-runtime-dependencies.md): Why we removed every third-party runtime package, wrote our own QR encoder, and publish with npm provenance. - [Pretty QR codes that still scan](https://wyllet.dev/blog/qr-codes-that-scan.md): Our first round-dot QR design decoded in 1 of 40 automated scans. How we measured it, what we shipped, and the test that keeps it honest. - [Why "WalletConnect" kept opening the wrong wallet](https://wyllet.dev/blog/all-wallets-on-mobile.md): Bare wc: links open the phone's default wallet. The All wallets directory fixes it with each wallet's own app link. ## Comparison - [How Wyllet compares](https://wyllet.dev/compare.md): How Wyllet compares with RainbowKit, ConnectKit, Reown AppKit, Dynamic, Privy, thirdweb and Web3-Onboard: license, wagmi version, dependencies and features. ## Optional - [Full documentation in one file](https://wyllet.dev/llms-full.txt) - [Interactive playground](https://wyllet.dev/playground): every option, with generated code - [Changelog](https://wyllet.dev/changelog)