Skip to main content
The SDK automatically persists sessions. Here’s how to handle the connection state and show the right UI.
import { PhantomProvider, usePhantom, useModal, useAccounts, useDisconnect, darkTheme } from "@phantom/react-sdk";
import { AddressType } from "@phantom/browser-sdk";

function App() {
  return (
    <PhantomProvider
      config={{
        providers: ["google", "apple", "injected"],
        appId: "your-app-id",
        addressTypes: [AddressType.solana],
        authOptions: {
          redirectUrl: "https://yourapp.com/auth/callback",
        },
      }}
      theme={darkTheme}
      appName="Your App"
    >
      <AppContent />
    </PhantomProvider>
  );
}

function AppContent() {
  const { isConnected } = usePhantom();
  const { open } = useModal();
  const addresses = useAccounts();
  const { disconnect } = useDisconnect();

  // User is logged in
  if (isConnected && addresses) {
    return (
      <div>
        <p>Welcome back!</p>
        <p>Wallet: {addresses[0]?.address}</p>
        <button onClick={() => disconnect()}>Sign out</button>
      </div>
    );
  }

  // User needs to log in
  return (
    <div>
      <h1>Welcome</h1>
      <button onClick={open}>Sign in</button>
    </div>
  );
}