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 Settings
from 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
Save
buttons - 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
Add
button
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. It's important to install the packages in the order they are listed below. Otherwise, the installation may fail.
- WalletConnectUnity Core:
https://github.com/WalletConnect/WalletConnectUnity.git?path=Packages/com.walletconnect.core
- WalletConnectUnity UI:
https://github.com/WalletConnect/WalletConnectUnity.git?path=Packages/com.walletconnect.ui
- WalletConnectUnity Modal:
https://github.com/WalletConnect/WalletConnectUnity.git?path=Packages/com.walletconnect.modal
- WalletConnectUnity Core:
- Press
Add
button
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
WalletConnectProjectConfig
ScriptableAsset (created automatically located atAssets/WalletConnectUnity/Resources/WalletConnectProjectConfig.asset
, do NOT move it outside ofResources
directory). - Initialize
WalletConnect
and 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