This page is the landing guide for moving the signer (auth + key custody) for your app from Alchemy's Account Kit to Privy, while continuing to use Alchemy's transaction infrastructure and gas sponsorship. Start here to confirm which sub-guide applies to your app, then drop into it for the step-by-step walkthrough.
Pick the detailed guide that matches your app:
- React migration — the default path. React apps using standard auth methods (email, Google, passkeys, etc.).
- JWT auth migration — special case for apps authenticating users with JWT (JSON Web Token).
If your migration path does not make use of React or JWT authentication, please reach out to the team for assistance in the service migration!
You swap the signer layer and keep everything else. Users keep their wallet addresses, assets, and history — the only visible change is the login screen switching from Alchemy to Privy. The drop-in migration SDK re-authenticates each user on first login and transfers their keys from Alchemy's TEE to Privy's TEE, invisibly.
At a high level, the React migration is two steps:
Replace @account-kit/react with @privy-io/react-auth, then wire Privy wallets back to Alchemy's transaction infrastructure with @alchemy/wallet-apis (same Gas Manager policy, same chains).
Drop in @privy-io/alchemy-migration and wrap your app with MigrationProvider. The SDK detects users with Alchemy wallets on login and transfers their keys to Privy via end-to-end encryption.
For the full, runnable walkthrough — including user export/import and cleanup — follow the React migration guide. If you authenticate users with JWT, follow the JWT auth migration guide instead.
Before starting, confirm your setup and have the following ready:
- Confirm your migration path. Review the Edge cases below to self-identify which guide applies:
- Confirm whether you want to use EIP-7702 or ERC-4337 after migration — the default changed between SDK versions. See EIP-7702 vs. ERC-4337 below.
- Confirm your account type. Modular Account v2 (MAv2) is the default; Light Account and MAv1 are also supported on Wallet APIs — reach out to [email protected] to enable these legacy account types.
- Pick the migration guide that matches — React by default, JWT if you authenticate with JSON Web Tokens.
- Alchemy API key — From the Alchemy Dashboard. Use the same app that has your Smart Wallets configuration and Gas Manager policy linked.
- Gas Manager policy ID — From the Gas Manager dashboard. Must be linked to the app above.
- Privy account and app — Create an app in the Privy Dashboard. Enable the same auth methods your Alchemy users originally signed up with.
The sub-guides assume the Wallet APIs defaults: EIP-7702 delegation to Modular Account v2 (MAv2). The three cases below change the migration path and are worth reviewing before you start.
The @account-kit/react package (SDK v4) defaulted to ERC-4337 with a smart contract account (SMA). The new @alchemy/wallet-apis package defaults to EIP-7702 delegation to Modular Account v2 instead.
- EIP-7702 delegation (Wallet APIs default). The signer (EOA) address is the account address. Assets live at the signer address, and the EOA is delegated to MAv2.
- ERC-4337 (SDK v4 default). The signer is the owner of a separate smart contract account. Assets live at the smart contract account address, not at the signer address.
If you want to keep using pure ERC-4337 accounts after migration, you need to request the existing smart contract account type explicitly instead of using the Wallet APIs default. See How to use non-7702 mode for the full flow.
Wallet APIs default to Modular Account v2, but Light Account and MAv1 are also supported. If your current app uses one of those account types, reach out to [email protected] to enable it.
If your users have legacy session keys installed onchain through the v4 @account-kit/wallet-client integration, they're still supported on Wallet APIs. See the Use existing session keys reference for the guide.
For direct help with your Privy signer migration, reach out through either of the following:
- Email: [email protected]
- Slack: privy.io/slack