Join an Overte or Basis server from the taskbar.
Who is online, and where do you go? A tray icon that lists the servers on an OMI Lobby, so you can join an Overte domain or a Basis server from the taskbar. It is the desktop companion to service-omi-lobby.
The tray reads the lobby's list from GET /api/v1/lobby/servers at start, every 10 minutes after that (the lobby polls its servers at the same rate), and when you pick Refresh now. The menu shows:
- How many servers are up and how many players are online. The icon changes when anyone is online.
- Overte: each domain that is up, as name and players (
Hytrion (0/12)). Picking one openshifi://<address>, so Interface starts in that domain. Untilhifi://links are set up, it copies the address instead and says so. - Basis: each Basis server that is up. Basis has no link that opens a server, so picking one copies its address (
server1.basisvr.org:4296) to the clipboard to paste into Basis. - Set up Overte links...: registers
hifi://for your account (HKCU\Software\Classes\hifi, no administrator prompt) with the entries Overte's installer writes, which it does only in production builds. It uses the Overte install it finds under Program Files or your Programs folder, and asks you to pickinterface.exewhen it finds none. Once links work, the same entry lets you pick another Interface. - Open the lobby page and Quit.
When a refresh fails, the menu keeps the last list and the status line says why. A second start leaves the first icon in charge.
Unzip omi-lobby-tray-x64.zip anywhere and run omi-lobby-tray.exe. Pick a server from the tray menu.
In order: --lobby <URL> on the command line, then {"lobby": "<URL>"} in a lobby-tray.json beside the program, then the staging lobby at https://omi-lobby.stonecat-ratio.ts.net. The URL is the lobby's base address; the tray adds /api/v1/lobby/servers.
The lobby's API must be reachable from your machine. The staging lobby serves it publicly. The Fly deploy of the lobby keeps its API private, so the tray cannot read that one until it gets a public list route.
omi-lobby-tray --list prints the servers the menu would show, one per line (platform, label, join link or address), and exits.
cmake -S . -B build
cmake --build build --config Release
ctest --test-dir build -C ReleaseCMake fetches SDL3 (release-3.4.8, the tray library XR Pilot uses) and links it statically, so the program is one file plus resources/. -DOMI_LOBBY_TRAY_APP=OFF builds only the list logic and its tests, with no SDL. The tray fetches with the operating system's own HTTP library; other systems, used for development only, run curl.
CI builds the program, runs the tests and keeps omi-lobby-tray-x64.zip as an artifact of every run; a v* tag attaches it to the release.
The tray is extracted from interactor-xr-pilot's OXRSys tray: the same SDL3 tray and its JSON reader (src/Json.*). The OpenXR runtime parts stay in XR Pilot.
Apache-2.0 OR MIT (LICENSE-APACHE, LICENSE-MIT). The icons in resources/ are new and use the same licence. The rings are copied from the logo of the Open Metaverse Interoperability Group.
