feat: multi-wallet
Description
This update brings full multi-wallet support to AppKit 🔥
AppKit Client Updates
- Wallet connection flow has been redesigned.
- Connecting, switching, and disconnecting is now handled through
connections,accountChanged, anddisconnectevents ONLY!
- Connecting, switching, and disconnecting is now handled through
- Added
syncConnections():- Syncs all active connections for each adapter.
- Helps to reconnect all previously connected wallets during page refresh
-
accountChanged()now accepts aconnectorobject, this will be used to remember last switched connector - WalletConnect event handling has been cleaned up
Controller Changes
- Removed
allAccountsfromAccountController. Now usingaccountsfromConnectionController
Adapter Updates
Each adapter now manages its own connections state and emits updates to the AppKit Client. This improves connection handling across multiple chains.
Adapters with changes:
- WagmiAdapter
- EthersAdapter
- Ethers5Adapter
- SolanaAdapter
- BitcoinAdapter
UI Changes
- Removed
ProfileandSwitchAddressviews. - Added new
ProfileWalletsview:- If you're already connected to wc or auth wallet, it shows a disabled state in connect view.
- If you try to connect the same extension wallet again from connect view, it asks you to switch accounts.
AppKit Lab
- New "Connections" section in AppKit Lab.
- Lets you view and manage current and recent wallet connections which uses hooks.
Type of change
- [ ] Chore (non-breaking change that addresses non-functional tasks, maintenance, or code quality improvements)
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
Associated Issues
For Linear issues: Closes APKT-3017
Showcase (Optional)
https://github.com/user-attachments/assets/a08d12bb-7b73-4315-b2ef-4f386cdf9caa
Checklist
- [ ] Code in this PR is covered by automated tests (Unit tests, E2E tests)
- [ ] My changes generate no new warnings
- [ ] I have reviewed my own code
- [ ] I have filled out all required sections
- [ ] I have tested my changes on the preview link
- [ ] Approver of this PR confirms that the changes are tested on the preview link
⚠️ No Changeset found
Latest commit: 845d7f4246dbbd7e06355bf8cfe74caaae2297af
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
Click here to learn what changesets are, and how to add one.
Click here if you're a maintainer who wants to add a changeset to this PR
The latest updates on your projects. Learn more about Vercel for Git ↗︎
| Name | Status | Preview | Comments | Updated (UTC) |
|---|---|---|---|---|
| appkit-basic-html | ✅ Ready (Inspect) | Visit Preview | 💬 Add feedback | Jun 18, 2025 4:45pm |
| appkit-demo | ✅ Ready (Inspect) | Visit Preview | 💬 Add feedback | Jun 18, 2025 4:45pm |
| appkit-laboratory | ✅ Ready (Inspect) | Visit Preview | 💬 Add feedback | Jun 18, 2025 4:45pm |
10 Skipped Deployments
| Name | Status | Preview | Comments | Updated (UTC) |
|---|---|---|---|---|
| appkit-basic-example | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| appkit-basic-sign-client-example | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| appkit-basic-up-example | ⬜️ Ignored (Inspect) | Visit Preview | Jun 18, 2025 4:45pm | |
| appkit-ethers5-bera | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| appkit-nansen-demo | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| appkit-vue-solana | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| appkit-wagmi-cdn-example | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| ethereum-provider-wagmi-example | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| next-wagmi-solana-bitcoin-example | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm | ||
| vue-wagmi-example | ⬜️ Ignored (Inspect) | Jun 18, 2025 4:45pm |
| Warnings | |
|---|---|
| :warning: | Changes were made to one or more package.json(s), but not to pnpm-lock.yaml |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/package.json (line 37): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/package.json (line 37): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/wallet-features.spec.ts (line 13): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/wallet-features.spec.ts (line 14): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/adapters/bitcoin/src/connectors/OKXConnector.ts (line 181): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 9): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 9): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 13): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 15): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 17): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 21): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 23): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 25): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 27): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 29): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 31): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 33): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 35): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 37): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 39): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 41): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 105): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 106): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 107): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 109): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit-utils/src/PresetsUtil.ts (line 111): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 45): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 47): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 49): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 51): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 53): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 55): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 57): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 59): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 61): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 63): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 65): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 67): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 69): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 71): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 73): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 75): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 77): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 79): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 81): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 83): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 85): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 87): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 89): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 91): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 93): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 95): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 97): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 97): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 101): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 103): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 105): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 105): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 105): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 109): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 111): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 115): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 115): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 117): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 118): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 119): |
| :warning: |
🔑 Potential UUID detected in packages/appkit-utils/src/PresetsUtil.ts (line 120): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/estimate-gas.test.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/appkit/tests/client/listeners.test.ts (line 97): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/TypeUtil.ts (line 178): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/TypeUtil.ts (line 178): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/TypeUtil.ts (line 189): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/ConstantsUtil.ts (line 52): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/ConstantsUtil.ts (line 54): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/ConstantsUtil.ts (line 56): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/ConstantsUtil.ts (line 58): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/ConstantsUtil.ts (line 60): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/ConstantsUtil.ts (line 62): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/common/src/utils/ConstantsUtil.ts (line 64): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/controllers/src/utils/ConstantsUtil.ts (line 33): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/controllers/src/utils/ConstantsUtil.ts (line 67): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/controllers/src/utils/ConstantsUtil.ts (line 217): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/controllers/src/utils/ConstantsUtil.ts (line 218): |
| :warning: |
🔑 Potential UUID detected in packages/controllers/src/utils/ConstantsUtil.ts (line 93): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/controllers/tests/controllers/ModalController.test.ts (line 17): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/controllers/tests/controllers/ModalController.test.ts (line 17): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/multi-wallet-multichain.spec.ts (line 56): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/multi-wallet.spec.ts (line 55): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-wallet-receive-view.test.ts (line 42): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/multi-wallet-siwx.spec.ts (line 57): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/shared/validators/ModalValidator.ts (line 328): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/adapters/solana/src/client.ts (line 178): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/adapters/solana/src/tests/client.test.ts (line 140): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/adapters/solana/src/tests/client.test.ts (line 140): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/adapters/solana/src/tests/client.test.ts (line 140): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/adapters/solana/src/tests/client.test.ts (line 140): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-swap-preview-view.test.ts (line 49): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/partials/w3m-account-wallet-features-widget.test.ts (line 22): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/multi-wallet-multichain.spec.ts (line 56): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/multi-wallet-siwx.spec.ts (line 57): |
| :warning: |
🔑 Potential UUID detected in packages/adapters/ethers/src/tests/client.test.ts (line 918): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-connecting-external-view.test.ts (line 32): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-connecting-external-view.test.ts (line 37): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 46): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 52): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 52): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 78): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 84): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 90): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 78): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 97): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 84): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 84): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 494): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 84): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 84): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-profile-wallets-view.test.ts (line 76): |
| :warning: |
🔑 Potential High‑entropy string detected in apps/laboratory/tests/multi-wallet.spec.ts (line 55): |
| :warning: |
🔑 Potential UUID detected in packages/adapters/wagmi/src/tests/client.test.ts (line 402): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-connecting-external-view.test.ts (line 32): |
| :warning: |
🔑 Potential High‑entropy string detected in packages/scaffold-ui/test/views/w3m-connecting-external-view.test.ts (line 37): |
| :warning: | Testing spec changed |
Generated by :no_entry_sign: dangerJS against 845d7f4246dbbd7e06355bf8cfe74caaae2297af
Coverage Report
| Status | Category | Percentage | Covered / Total |
|---|---|---|---|
| 🔵 | Lines | 77.51% | 30356 / 39163 |
| 🔵 | Statements | 77.51% | 30356 / 39163 |
| 🔵 | Functions | 68.34% | 2500 / 3658 |
| 🔵 | Branches | 84.17% | 6232 / 7404 |
File Coverage
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
| Diff | Package | Supply Chain Security |
Vulnerability | Quality | Maintenance | License |
|---|
You introduced this big feature that changes everything when I was updating from 1.7.3 to 1.7.15 - suppose to be patches only. Did I miss something?