Repository navigation
ARC-Client — v0.93.2 Patch Notes
Covers changes since v0.93.1 · Released June 2026
This verison covers a few edge-case bugs.
🎛️ OSC Bridge
- Less aggressive OSC liveness checks — raised the consecutive-failure threshold from 2 to 4 before tearing down a connection. A single dropped UDP packet or a brief adapter wakeup (common on Windows) no longer kills a healthy session mid-flight.
🧩 Addons
OSCQuery
- Default bind address changed to
0.0.0.0— the OSCQuery HTTP service now listens on all interfaces by default so remote tools and VRChat can discover it regardless of which network adapter is active. The previous127.0.0.1default was too restrictive for LAN discovery. - Smart port reuse on startup — OSC and OSCQuery HTTP ports are re-validated via a new
_isPortAvailablehelper when the service initializes. If a previously-assigned port was released or claimed by another process, a fresh free port is assigned instead of failing withEADDRINUSE. Logs now distinguish reusing from previously assigned port no longer available, reassigning so the cause is obvious. - Virtual/tunnel adapter filtering — local IP selection now ignores
vEthernet, Docker, Loopback, Pseudo,isatap,6to4, Teredo,tun/tap, and VPN adapters when picking the IP advertised by OSCQuery. On machines with WSL/Hyper-V, Docker, or VPN interfaces the previously-first IP was often unreachable from VRChat or remote tools. Falls back to any non-loopback IPv4 if every adapter matches the filter.
XSOverlay
- Notification log now persists to the database —
recorded_atwas migrated fromINTEGERtoTEXTwith a SQLite default timestamp, so the UI notification log is accessible to all connected users instead of vanishing when the app closes. - Renderer reads DB rows through
useXSOverlay— the composable maps persisted rows (text timestamps) instead of relying on the in-memory buffer, andformatTime()now handles both SQL datetime strings and legacy numeric timestamps for backward compatibility.
🐛 Bug Fixes
- Settings UI: OSC port change didn't stick —
useOscStatus.tswas writinglocalOscPort(a nonexistent key) instead oflegacyOscPortused byconfigManager.ts. The user's port choice silently reverted to the default on every reload; the correct field is now used so the saved value persists.