Before you start
- Use Node.js and a browser application served over HTTPS. The hosted provider does not accept plain
http://localhost; use local HTTPS for development. - Register your application and domains in the Dashboard.
- Configure sponsorship token endpoints before calling intent or asset methods. Authentication itself does not require a funded account.
Install the SDK
Upgrading an existing integration? Follow Migration for the changes between versions.Initialize the client
Createwallet.ts and reuse its client throughout your application. The Solana variant opts into the experimental account alongside EVM; it does not disable EVM or deploy either account.
Replace my-app with the client ID of your registered application. The sponsorship URLs are same-origin backend endpoints; follow Sponsorship setup to implement them.
Authenticate and obtain an account
accountAddress is a typed 0x${string} address. Pass it as accountAddress to methods such as signMessage() and getAssets(); sendIntent() and sendBatchIntent() always use the authenticated account. Authentication creates an account when the verified identity has none in your application’s namespace, or signs in to the existing account.
To restore a current wallet session without opening the dialog, call getSession():
Read Solana account state
Withexperimental_solana, the first passkey login provisions one persistent Solana identity. The provisioning login’s passkey becomes its original authority; later logins reuse the same wallet. Passkey sessions report optional accounts.solana:
A restored session may need a fresh passkey login for Solana spending (
SOLANA_SIGN_IN_REQUIRED). There is no caller-selected root or alternate-key fallback. See Sign up and sign in.
Deploy accounts
EVM
The first real execution on an EVM chain deploys the account if needed. Your app does not submit a separate factory call. Receiving at the counterfactual address does not deploy it; preserve the account’s exact configuration. See Account deployment.Set up a Solana wallet
Solana needs explicit setup before receiving.deploy() creates and verifies the wallet, enrolls service recovery and confirms the other active passkeys. Your app sponsors transaction fees and rent through its sponsorship configuration; refusal never falls back to charging the user.
ready: true. Re-read getSession() before showing it: an address, a balance or a previous readiness result is not enough.
Setup can require several passkey approvals and is not atomic across creation and enrollment. It resumes on the same wallet; EVM remains usable while Solana setup is incomplete. Review availability, then follow funding and execution.