Connect and sign
With MetaMask SDK, you can combine connecting to MetaMask and signing data in two ways:
- 
Using Wagmi (two-step approach) - You'll need to connect to the wallet first, then sign in a separate step. 
- 
Using Vanilla JavaScript (one-step approach) - Use the SDK's connectAndSignmethod to connect and sign in a single user interaction.
Use Wagmi (two-step)
Wagmi doesn't provide a one-step "connect and sign" method, so you'll:
- Connect to the user's wallet.
- Sign your message after connecting.
The following is an example of connecting and signing using React, Wagmi, and MetaMask SDK:
import { useAccount, useConnect, useDisconnect } from "wagmi"
import { useSignMessage } from "wagmi"
function ConnectAndSignWagmi() {
  const { address, isConnected } = useAccount()
  const { connect, connectors } = useConnect()
  const { disconnect } = useDisconnect()
  const { signMessage } = useSignMessage({
    message: "Hello from Wagmi!",
    onSuccess(data) {
      console.log("Signature:", data)
    },
  })
  if (!isConnected) {
    return (
      <div>
        {connectors.map((connector) => (
          <button key={connector.uid} onClick={() => connect({ connector })}>
            Connect with {connector.name}
          </button>
        ))}
      </div>
    )
  }
  return (
    <div>
      <p>Connected: {address}</p>
      <button onClick={() => signMessage()}>Sign Message</button>
      <button onClick={() => disconnect()}>Disconnect</button>
    </div>
  )
}
export default ConnectAndSignWagmi
Use Vanilla JavaScript (one-step)
If you're not using Wagmi, you can access MetaMask SDK's connectAndSign method,
which requests wallet access and signs the message in a single prompt.
For example:
import { MetaMaskSDK } from "@metamask/sdk"
const MMSDK = new MetaMaskSDK()
const provider = MMSDK.getProvider()
async function handleConnectAndSign() {
  try {
    const signature = await MMSDK.connectAndSign({ msg: "Hello in one go!" })
    console.log("Signature:", signature)
  } catch (err) {
    console.error("Error with connectAndSign:", err)
  }
}
document
  .getElementById("connectSignBtn")
  .addEventListener("click", handleConnectAndSign)
The following HTML displays a Connect & Sign button:
<button id="connectSignBtn">Connect & Sign</button>
This one-step flow is unique to MetaMask SDK's connectAndSign method.
It's not part of Wagmi or other wallet libraries.