Installation
Usage
- JavaScript
- React
Call
addPhantomRedirectSolanaExtension once during app initialization, passing the current URL so
the extension can detect and complete any in-progress Phantom redirect:Parameters
How it works
Phantom’s redirect protocol works as follows:- Your app calls a standard wallet operation (connect, sign, send, disconnect) on the Phantom redirect provider
- The SDK builds an encrypted deep link and redirects the user to the Phantom mobile app
- The user approves the request inside Phantom
- Phantom redirects back to your app. For connect and sign operations, the redirect URL includes an encrypted response. For disconnect, Phantom redirects back with no query parameters.
- On the next page load,
addPhantomRedirectSolanaExtensiondetects the redirect, decrypts the response (if present), and completes the operation
Why the clone tab exists
On mobile browsers, Phantom does not return the user to the tab that started the operation. It opens the redirect URL in a new tab, a clone of your app. That clone tab is the one carrying Phantom’s encrypted response, so it is the one that has to complete the operation, while the promise the user is waiting on lives in the original tab. The SDK bridges the two:- The clone tab decrypts Phantom’s response and broadcasts the result to the original tab over the
BroadcastChannelAPI, which resolves the pending promise there. - The clone tab then recognizes that it is a clone. Each tab has its own JavaScript context, so only the tab that started the operation has the origin marker set. A tab without it can only be a clone.
- Since the original tab already has the result, the clone has nothing left to do, and the SDK emits
phantomRedirectCloseTab, which invokes youronCloseTab. Closing the clone returns the user to the original tab with the operation already resolved.
disableAutoRedirectCompletion is true, since the extension only listens for the close request
while it owns redirect completion.
Supported operations
Once registered, the Phantom redirect provider supports all standard Solana wallet operations:connect— request wallet connectiondisconnect— end the wallet sessionsignMessage— sign an arbitrary messagesignTransaction— sign a transactionsignAllTransactions— sign multiple transactionssignAndSendTransaction— sign and submit a transaction
Connect and verify on mobile
On mobile,connectAndVerifyWithWalletProvider triggers two sequential deep links — one to connect
and another to sign for verification. iOS will not honor the second deep link because it is no longer
tied to a user gesture. Android may handle this differently, but this restriction applies to all
mobile platforms to ensure a stable experience and prevent production-only errors.
Instead, use connectWithWalletProvider and verifyWalletAccount as two separate user actions:
connectAndVerifyWithWalletProvider and fall back to
the two-step flow:
Setting a redirect URL
Phantom redirects back to your app after the user approves or rejects a request. Make sure your app handles the redirect URL on the page that callsaddPhantomRedirectSolanaExtension, so the extension
can complete the pending operation automatically.
Limitations
- Requires the user to have the Phantom mobile app installed
- The redirect flow causes a full page navigation — ensure your app state is restored on return
- Each operation generates a new ephemeral encryption key pair; sessions do not persist across devices
- Only supported on Solana
connectAndVerifyWithWalletProvideris not supported on mobile — see Connect and verify on mobile above
Related functions
- addSolanaExtension - Register standard Solana wallet providers
- Connecting and Verifying a Wallet - Connect and verify wallet accounts
- signing-sending-transactions - Sign and send transactions with any Solana wallet