Connect Reown AppKit to Supabase Authentication In Minutes

The ultimate SDK bridging Web3 wallets and Supabase auth. MetaMask, Coinbase Wallet, Rainbow, and 200+ more wallets work instantly with your existing Supabase setup. Zero backend code required.

2 Frameworks
100% TypeScript
0 Config

How SupaWeb3 Works

Three simple steps to add Web3 authentication to your Supabase app

1

User Connects Wallet

Reown AppKit handles wallet connection with support for MetaMask, Coinbase Wallet, WalletConnect, and 200+ other wallets. Works on desktop and mobile.

2

SIWE Authentication

User signs a secure SIWE (Sign-In with Ethereum) message. This proves wallet ownership without revealing private keys - fully EIP-4361 compliant.

3

Supabase Session Created

SupaWeb3 automatically creates a JWT token and establishes a full Supabase user session. Use all Supabase features like RLS, realtime, and storage.

Why Choose SupaWeb3?

The most complete Reown AppKit + Supabase integration. Trusted by developers building the next generation of Web3 applications.

Zero Backend

No custom auth endpoints needed. Works entirely with Supabase's existing auth system.

🔐

SIWE Standard

Sign-In with Ethereum (EIP-4361) compliance for enterprise-grade security.

🔗

200+ Wallets

MetaMask, Coinbase, Rainbow, and 200+ more via Reown's battle-tested AppKit.

📱

Framework Ready

Native composables for Vue/Nuxt and hooks for React/Next.js.

🛡️

Type Safe

Complete TypeScript definitions with full IntelliSense support.

🚀

Enterprise Ready

SIWE compliance, session persistence, error boundaries, and automatic reconnection.

Built for Modern Web3 Development

First-class support for the technologies you already use

🔗 Wallet Integration

  • Reown AppKit (formerly WalletConnect)
  • MetaMask, Coinbase Wallet, Rainbow
  • 200+ wallets supported
  • Mobile & Desktop compatible

🗄️ Backend Integration

  • Supabase Authentication
  • Row Level Security (RLS)
  • Realtime subscriptions
  • Storage & Edge Functions

Framework Support

  • Nuxt3 with auto-imports
  • Next.js with React hooks
  • TypeScript definitions
  • Server-side rendering ready

🔐 Security Standards

  • SIWE (EIP-4361) compliance
  • JWT token generation
  • Secure session management
  • CSRF protection built-in

Our Sponsors

Thanks to our amazing sponsors who help make SupaWeb3 possible

Become a Sponsor

🏆 Gold Sponsors 🏆

The Night Project

The Night Project

Primary sponsor and maintainer of SupaWeb3

🥈 Silver Sponsors 🥈

The Night Project

The Night Project

Supporting open source Web3 tools

Your logo here

🥉 Bronze Sponsors 🥉

The Night Project

The Night Project

Community builder

Your logo

Your logo

Your logo

See It In Action

Simple, elegant API that just works

1 Install & Configure

npm install @supaweb3/nuxt
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@supaweb3/nuxt'],

  runtimeConfig: {
    public: {
      supaWeb3: {
        reown: {
          projectId: 'your-reown-project-id',
          metadata: { name: 'Your App' }
        },
        supabase: {
          url: 'your-supabase-url',
          anonKey: 'your-anon-key'
        }
      }
    }
  }
})

2 Use in Components

<template>
  <div>
    <button v-if="!isConnected" @click="connect">
      Connect Wallet
    </button>

    <div v-else>
      <p>Address: {{ address }}</p>
      <button v-if="!isAuthenticated" @click="authenticate">
        Sign In
      </button>
      <button v-else @click="disconnect">
        Disconnect
      </button>
    </div>
  </div>
</template>

<script setup>
const {
  isConnected,
  isAuthenticated,
  connect,
  authenticate,
  disconnect
} = useSupaWeb3()

const { address } = useWallet()
</script>

1 Setup Provider

npm install @supaweb3/nextjs
// app/layout.tsx
import { SupaWeb3Provider } from '@supaweb3/nextjs'

const config = {
  reown: {
    projectId: process.env.NEXT_PUBLIC_REOWN_PROJECT_ID!,
    metadata: { name: 'Your App' }
  },
  supabase: {
    url: process.env.NEXT_PUBLIC_SUPABASE_URL!,
    anonKey: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
  }
}

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <SupaWeb3Provider config={config}>
          {children}
        </SupaWeb3Provider>
      </body>
    </html>
  )
}

2 Use Hooks

'use client'

import { useSupaWeb3, useWallet } from '@supaweb3/nextjs'

export default function WalletConnect() {
  const {
    isConnected,
    isAuthenticated,
    connect,
    authenticate,
    disconnect
  } = useSupaWeb3()

  const { address } = useWallet()

  if (!isConnected) {
    return <button onClick={connect}>Connect Wallet</button>
  }

  return (
    <div>
      <p>Address: {address}</p>
      {!isAuthenticated ? (
        <button onClick={authenticate}>Sign In</button>
      ) : (
        <button onClick={disconnect}>Disconnect</button>
      )}
    </div>
  )
}

Ready to Build?

Join developers already using SupaWeb3 to power their Web3 applications