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
WalletConnectProjectConfig
ScriptableAsset (created automatically located at Assets/WalletConnectUnity/Resources/WalletConnectProjectConfig.asset
, do NOT move it outside of Resources
directory).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;
}
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