This repository is a monorepo of low-level packages that bring WalletConnect to Unity.
WalletConenct AppKit offers a feature-rich and user-friendly solution for integrating Web3 with Unity-based apps. Use the Modal or Core packages from the WalletConnectUnity repository only when AppKit does not meet specific needs, such as integrations with non-EVM chains. Below is a feature matrix comparing WalletConnect Modal and AppKit.
| WalletConnect Modal | AppKit (Web3Modal) | |
|---|---|---|
| WalletConnect | ✅ | ✅ |
| Network Switching | ❌ | ✅ |
| EVM Interaction API | ❌ | ✅ |
| Coinbase Wallet | ❌ | ✅ (WebGL only) |
| Browser Extension Wallets | ❌ | ✅ (WebGL only) |
| Fiat Onramp | ❌ | ✅ (WebGL only) |
| ENS Resolution | ❌ | ✅ |
| Email & Social Login | ❌ | 🔜 |
| UI Framework | uGUI | UI Toolkit in native, HTML in WebGL |
| Supported Networks | Blockchain-agnostic | Only EVM |
| Package | Description | OpenUPM |
|---|---|---|
| Core | High-level, Unity-friendly extension of WalletConnectSharp - Automatic active session management - Option to resume session from storage - Deep linking support - IL2CPP support - Lightweight IJsonRpcConnection implementation- QR Code generation utility - API to load wallets data and visual assets |
|
| Modal | Simplest and most minimal way to connect your players with WalletConnect | |
| UI | This is a technical package that provides UI for WalletConnect Modal. It is not intended to be used directly, but rather as a dependency of WalletConnect Modal. | |
| Nethereum | This Unity package provides a simple way to integrate WalletConnect with Nethereum library. |
Older versions of WalletConnectUnity are available under legacy/* branches
- Unity 2021.3 or above
- IL2CPP managed code stripping level: Minimal (or lower)
- Android
- iOS
- macOS
- Windows
- WebGL (experimental)
Install via OpenUPM CLI
To install packages via OpenUPM, you need to have Node.js and openupm-cli installed. Once you have them installed, you can run the following commands:
- WalletConnect Modal:
openupm add com.walletconnect.modal
- WalletConnectUnity Core:
openupm add com.walletconnect.core
Install via Package Manager with OpenUPM
- Open
Advanced Project Settingsfrom the gear ⚙ menu located at the top right of the Package Manager’s toolbar - Add a new scoped registry with the following details:
- Name:
OpenUPM - URL:
https://package.openupm.com - Scope(s):
com.walletconnect
- Name:
- Press plus ➕ and then
Savebuttons - In the Package Manager windows open the add ➕ menu from the toolbar
- Select
Add package by name... - Enter the name of the package you want to install:
- WalletConnectUnity Modal:
com.walletconnect.modal - WalletConnectUnity Core:
com.walletconnect.core
- WalletConnectUnity Modal:
- Press
Addbutton
Install via Package Manager with Git URL
- Open the add ➕ menu in the Package Manager’s toolbar
- Select
Add package from git URL... - Enter the package URL. Note that when installing via a git URL, the package manager won't install git dependencies automatically. Follow the error messages from the console and add all necessary packages manually
- WalletConnectUnity Modal:
https://github.com/WalletConnect/WalletConnectUnity.git?path=Packages/com.walletconnect.modal - WalletConnectUnity UI:
https://github.com/WalletConnect/WalletConnectUnity.git?path=Packages/com.walletconnect.ui - WalletConnectUnity Core:
https://github.com/WalletConnect/WalletConnectUnity.git?path=Packages/com.walletconnect.core
- WalletConnectUnity Modal:
- Press
Addbutton
It's possible to lock the version of the package by adding #{version} at the end of the git URL, where #{version} is the git tag of the version you want to use.
For example, to install version 1.0.0 of WalletConnectUnity Modal, use the following URL:
https://github.com/WalletConnect/WalletConnectUnity.git?path=Packages/com.walletconnect.modal#modal/1.0.0
- Set up in project id and metadata
WalletConnectProjectConfigScriptableAsset (created automatically located atAssets/WalletConnectUnity/Resources/WalletConnectProjectConfig.asset, do NOT move it outside ofResourcesdirectory). - Initialize
WalletConnectand connect wallet:
// Initialize singleton
await WalletConnect.Instance.InitializeAsync();
// Or handle instancing manually
var walletConnectUnity = new WalletConnect();
await walletConnectUnity.InitializeAsync();
// Try resume last session
var sessionResumed = await WalletConnect.Instance.TryResumeSessionAsync();
if (!sessionResumed)
{
var connectedData = await WalletConnect.Instance.ConnectAsync(connectOptions);
// Create QR code texture
var texture = WalletConnectUnity.Core.Utils.QRCode.EncodeTexture(connectedData.Uri);
// ... Display QR code texture
// Wait for wallet approval
await connectedData.Approval;
} - Id - The id of your project. This will be used inside the relay server.
- Client Metadata
- Name - The name of your app. This will be used inside the authentication request.
- Description - The description of your app. This will be used inside the authentication request.
- Url - The url of your app. This will be used inside the authentication request.
- Icons - The icons of your app. This will be used inside the authentication request.
- Very Url - The verification URL of your app. Currently used but not enforced
Due to WebGL's single-threaded nature, certain asynchronous operations like Task.Run, Task.ContinueWith, Task.Delay, and ConfigureAwait(false) are not natively supported.
To enable these operations in WebGL builds, an additional third-party package, WebGLThreadingPatcher, is required. This package modifies the Unity WebGL build to delegate work to the SynchronizationContext, allowing these operations to be executed on the same thread without blocking the main application. Please note that all tasks are still executed on a single thread, and any blocking calls will freeze the entire application.
The WebGLThreadingPatcher package can be added via git URL:
https://github.com/VolodymyrBS/WebGLThreadingPatcher.git