A user opens a decentralized finance application in their browser, scans a QR code with Rabby Wallet, approves the connection, and completes a transaction. The next day, the same application shows “wallet disconnected” even though the browser extension remains installed and the session should persist. Clicking reconnect produces either a stalled QR code scanner or a “connection timeout” error. The wallet itself appears functional—other connected dapps work fine, and direct transactions through the extension are unaffected. The problem is specific to WalletConnect v2 session reliability, and the cause could originate from the application, the network, the relay service, or Rabby’s session management logic.
WalletConnect v2 is the bridge protocol that allows dapps to request signatures and transaction approvals from a wallet without embedding wallet code directly into the website. It is stateful, asymmetric, and depends on a relay service to route messages between parties. When that connection breaks, the failure manifests differently depending on where the break occurs and how each side handles the disconnection. Debugging requires understanding the protocol’s lifecycle, recognizing which symptoms point to which causes, and following a systematic troubleshooting path. The most effective solutions are not always the most obvious ones.
Understanding WalletConnect v2 session state and relay mechanics
WalletConnect v2 uses a relay server to forward encrypted messages between a dapp and a wallet. When a user scans a connection URI, Rabby extracts pairing information, establishes a session with the relay, and stores the session metadata locally. That metadata includes a topic identifier, shared encryption keys, and metadata about the connected application. If either the dapp or wallet loses that information, or if the relay cannot deliver messages, the session becomes unusable.
The critical distinction is between a pairing and a session. A pairing is the relationship created when a wallet scans a QR code; it is durable and can be reused. A session is the active connection for a specific dapp and account; it can expire, be revoked, or fail if either side forgets the encryption keys. When a user sees “wallet disconnected,” the session has been lost, but the pairing may still exist. A dapp may attempt to re-establish the session, but if Rabby’s local session record has been cleared, the relay messages will fail to decrypt.
The relay service itself is a point of failure. The default WalletConnect relay (relay.walletconnect.com) is operated by WalletConnect Foundation and has reasonable uptime, but network path failures, regional blocking, or temporary outages can prevent message delivery. Some institutions and users also run private relays or custom configurations. If a dapp is hard-coded to use a specific relay and that relay is unavailable, the session will hang regardless of wallet functionality.
Distinguishing between dapp state loss, network interruption, and wallet-side issues
The first practical test is to open the dapp in a new incognito or private browsing window. The dapp’s local state—including cached session information—lives in browser storage. If the new window still shows a connected wallet immediately, the problem is not in the dapp’s stored session. If the new window requires reconnection and reconnection succeeds, the issue was a dapp-side cache or session recovery failure.
Next, verify that Rabby itself can connect to new dapps. Visit a popular platform such as Uniswap, Curve, or OpenSea, initiate a fresh connection, and confirm that the pairing and session succeed. If a brand new connection fails, the issue is broader: either Rabby’s relay communication is broken, the relay itself is down, or the extension’s WalletConnect module has a bug. If new connections work but only specific dapps remain disconnected, the problem is usually that the dapp has lost its session record or is using incorrect session parameters.
Network interruption can also be the culprit. If the user’s internet connection drops, reconnects with a different IP, or loses DNS resolution, the relay connection will break. Some applications attempt automatic reconnection; others require manual action. A user on a mobile hotspot that switches between networks, or a user whose home internet flickers during sleep mode, may experience frequent disconnections that feel random but actually follow the network state.
Session metadata and local storage: what Rabby keeps and why
When Rabby stores a WalletConnect session, it saves several pieces of information in browser local storage: the session topic, controller and responder keys, the session expiration timestamp, the relay URL, and metadata about the connected dapp. If any of this data becomes corrupted, mismatched, or cleared, the session cannot be restored.
Clearing browser cache and cookies is a common user action that can inadvertently delete WalletConnect session data. Some users clear cache as part of routine privacy hygiene; others use browser extensions that automatically clear storage on shutdown. If Rabby’s session data is deleted while the dapp retains its copy, the two will be out of sync. The dapp will try to send messages to Rabby using encryption keys that no longer exist locally, and Rabby will be unable to decrypt them.
The solution is not to disable cache clearing but to recognize that it requires reconnection. Once cache is cleared, the user must scan the connection QR code again or use a manual reconnection URL. Rabby should ideally persist critical session information in a storage location that survives browser cache clearing (such as Extension storage rather than LocalStorage), but this varies by implementation.
Checking Rabby’s stored sessions is possible through the browser’s Developer Tools. Open the extension’s background page or popup, access the Storage tab in Developer Tools, and examine the data stored under the extension’s storage key. Users can see what sessions are recorded and whether any appear corrupted or orphaned. Manually deleting a problematic session record from storage and re-establishing the connection can resolve some failures.
Timeout behavior, relay selection, and connection recovery
When a WalletConnect message is sent, it must be delivered within a reasonable timeout window. The default timeout in many implementations is around 30 seconds. If the relay is slow, the network path is congested, or the other party is offline, the message will time out. The dapp will then report a generic “connection failed” error, and the user is left uncertain whether to try again or reconnect entirely.
Some dapps implement exponential backoff, which delays successive retry attempts to avoid overwhelming the relay. Others retry immediately and repeatedly, which can make the situation worse by consuming relay resources. Users observing repeated timeout errors should wait a few minutes before attempting reconnection, rather than clicking “connect” dozens of times in succession.
Relay selection also matters. The WalletConnect ecosystem allows multiple relay providers. If a dapp is configured to use a relay that is geographically distant, experiencing high load, or blocking traffic from certain regions, the session will appear slow or broken. Some dapps allow users to select or configure a custom relay URL. If timeouts are chronic, manually specifying a different relay or checking whether the relay’s status page shows service incidents can help.
Recovery behavior is another variable. When a session times out, does Rabby automatically attempt to reconnect, or does it wait for the user to click a button? Some wallets implement background reconnection logic that silently re-establishes sessions when possible. Rabby’s behavior depends on the version and whether background activity is enabled. If sessions are frequently timing out and not recovering automatically, checking the extension’s settings for any reconnection or persistence options may reveal a disabled feature.
Hardware wallet pairing and multi-device complexity
If Rabby is connected to a hardware wallet such as Ledger or Trezor, and WalletConnect disconnection occurs, the failure chain can include an additional layer. The hardware device must be unlocked, the Rabby extension must be able to communicate with the device driver (which requires proper browser permissions and device connection), and then the WalletConnect relay must deliver the request to the dapp.
If the hardware device times out, enters sleep mode, or loses USB connectivity, Rabby will fail to sign transactions even if the WalletConnect session is active. The user may incorrectly attribute the failure to WalletConnect when the actual issue is hardware communication. Testing hardware wallet connectivity with a direct transaction through Rabby (not through a dapp) can isolate whether the hardware or WalletConnect is the limiting factor.
Multi-device setups also introduce complexity. If a user has Rabby installed on multiple browsers or computers, or if they are using both Rabby desktop and a mobile wallet app (such as Trust Wallet or MetaMask Mobile), a WalletConnect session established on one device may not persist if the user switches devices. The dapp may still believe the session is active on the original device while the user tries to connect from a different device, producing apparent disconnection or session conflicts.
Diagnosing extension-specific bugs and version mismatches
Rabby is actively maintained and receives regular updates. Older versions may have bugs or incompatibilities with newer relay implementations or dapp-side changes. If disconnection issues are persistent and reproducible, checking whether a newer version is available is a basic troubleshooting step. Users can visit the Rabby extension store page to verify the installed version and look for pending updates.
Version mismatches between Rabby and connected dapps can also cause unexpected behavior. If Rabby implements WalletConnect v2 in one way and a dapp implements it slightly differently, the two may disagree about session validity, encryption key format, or message structure. This is rare, but it can happen at the boundary between major updates or when a dapp deploys a non-standard implementation.
Extension isolation and content security policy (CSP) violations are another possible cause. If Rabby cannot inject its connection handler into the dapp’s page due to a CSP violation or extension permission issue, the connection will fail at the JavaScript level before even reaching the relay. This typically produces a different error message (something like “unable to communicate with wallet extension”) rather than a relay timeout, but the symptom set can overlap.
Testing a fresh Rabby profile can help isolate whether the issue is account-specific or extension-wide. Create a new browser profile (or use incognito mode), download the Rabby Wallet extension again, set up a test account, and attempt to connect to the dapp. If the fresh profile connects successfully, the issue is in the original profile’s data or settings. If the fresh profile also fails, the problem is more fundamental and likely involves the dapp, relay, or network.
Network inspection and relay debugging tools
Advanced users can inspect WalletConnect traffic using the browser’s Network tab in Developer Tools. Filter for requests to relay.walletconnect.com or whatever relay is configured, and examine the HTTP response codes and latency. A 200-level response with fast latency suggests the relay is responding. A 5xx response indicates a relay-side error. High latency (over 10 seconds) suggests network congestion or distance.
WalletConnect’s debugging documentation provides detailed information about session lifecycle and expected message flows. Users familiar with JSON can also inspect the relay messages to see what payloads are being sent and whether they are being received. This level of debugging is beyond most users’ comfort level, but it can provide definitive answers about whether the relay is delivering messages or dropping them.
Network monitoring tools such as Charles, Fiddler, or Burp Suite can also provide deeper insight for users who are comfortable with proxy-based traffic inspection. These tools show decrypted payloads, request timing, and connection state information that the browser’s native tools may not display.
Practical recovery strategies and prevention
When a session is stuck, the most reliable recovery is a complete disconnect and reconnect. On the dapp side, this usually means revoking the wallet connection in the application’s account settings or using a “disconnect wallet” button. On Rabby’s side, the user can remove the dapp from the list of connected applications in the extension’s settings. After both sides are cleared, scanning the QR code again will establish a fresh session.
Preventing frequent disconnections requires a combination of good practices. Keep Rabby updated to the latest version. Avoid manually clearing browser storage without reconnecting afterward. Ensure that hardware wallet devices are reliably connected and unlocked before initiating transactions. Use a stable network connection, and if on mobile, avoid switching between WiFi and cellular during active sessions.
For institutional users or those managing multiple accounts and connections, Rabby’s support for Safe, Cobo, Argus, Fireblocks, and other institutional solutions can provide a more robust setup with better session persistence and error recovery. These integrations often include additional authentication and session validation layers that reduce the likelihood of silent disconnections.
Documentation and communication are also preventive measures. When a user encounters a persistent disconnection issue with a specific dapp, reporting it to both the dapp team and Rabby’s support channel helps developers identify whether the problem is an edge case or a systemic issue. Including version numbers, relay information, and reproduction steps makes the report actionable.
Frequently asked questions
Why does my WalletConnect session keep disconnecting even though the extension is still installed?
WalletConnect sessions can break if the relay service is unavailable, if local session data is corrupted or cleared, if the dapp loses its session record, or if the network connection is interrupted. Test by opening the dapp in an incognito window and attempting a fresh connection. If the new connection succeeds, the issue is likely the dapp’s cached state. If it also fails, the problem involves the relay or Rabby’s communication. Clearing cache, updating Rabby, or manually re-establishing the connection usually resolves the issue.
Can clearing my browser cache delete WalletConnect sessions stored in Rabby?
Yes, if Rabby stores session data in the browser’s LocalStorage instead of the extension’s isolated storage, clearing cache will also clear those sessions. After clearing cache, you will need to reconnect by scanning the QR code again. Some extensions are designed to preserve sessions across cache clearing; verify which storage location Rabby uses for your version.
What does a “connection timeout” error in WalletConnect mean, and how should I respond?
A timeout means that a message was not delivered within the expected timeframe, usually 30 seconds. This can indicate a slow or overloaded relay, network congestion, or the wallet being offline. Wait a few minutes before attempting to reconnect, as immediate repeated retries can make the situation worse. If timeouts are chronic, verify that the relay is accessible, check your network connection, and confirm that your hardware wallet (if applicable) is still connected.