Skip to content
⌘K

For game developers

Testing your game in Rare OS

Run your web game the way Rare OS players will: add it by URL, test controller input and the on-screen keyboard, and check Rare Wallet.

The best test is your game running in Rare Launcher, where it gets the same window, controller mapping, keyboard and wallet as on a player's device. This page covers how to get there and what to check.

Where to run it

On a Rare OS device

Rare OS runs Rare Launcher in Game Mode. Add your game by URL (below) and play it with the device's controls and touchscreen.

On a desktop Linux machine

Rare Launcher is also built as a standalone x86_64 AppImage for desktop Linux and SteamOS. It runs the same web game runtime as Rare OS.

  • It uses the system's WebKitGTK when the system has one, and its bundled copy otherwise. Set RARE_BUNDLED_WEBKIT=1 to force the bundled copy.
  • The game window opens at the launcher window's size, and fullscreen when the launcher is fullscreen.
  • Plug in a controller: the launcher reads it natively and maps it the same way as on the device.

In Safari or WebKit

Rare OS renders web games with WebKitGTK. When you don't have a Rare OS machine at hand, Safari (or Playwright's WebKit) is the closest engine on a Mac. Rare checks every listed web game in both Chrome and WebKit.

Add your game by URL

  1. Open the Library

    In Rare Launcher, go to Library and press Web game next to the filters.

  2. Enter the address

    Type your game's https address. A bare host like play.mygame.example gets https:// added.

  3. Name it

    Pick the name shown in the Library. The game appears under the Web filter and opens in its own window.

A game added by URL gets its input profile through the profile's hosts, so if your game already has a profile, it applies to your test build on the same host. Without a profile the game runs in keys mode with the right-stick pointer. See Per-game profiles.

A local build

The runtime opens https addresses and pages on localhost, and the Web game dialog accepts https addresses only. To test a local build, serve it over HTTPS on localhost (for example https://localhost:5173) with a certificate the machine trusts, and add that address.

Each game added this way gets its own storage profile, named after the game. To start from a clean state, remove the game from the Library and add it again under a new name.

Test controller input

Play through your main flows with a controller in the input mode your game will use.

ModeWhat to check
keysEvery action is reachable with the default keys (arrows, Enter, Escape, Space, Tab, Q, E, Shift, Control, M), or with the overrides you plan to ask for. The right-stick pointer reaches every clickable control, and RB clicks it.
gamepadnavigator.getGamepads()[0] reads mapping: "standard" with analog sticks and triggers, and your polling loop picks it up after gamepadconnected.
focusThe d-pad reaches every control in a sensible order, the ring starts on your main button, and A presses it. Controls inside modals are reachable and controls behind them are skipped.

In every mode:

  • Your handlers accept synthetic events (isTrusted is false).
  • Guide returns to the launcher and Resume brings the game back in the state you left it.

Test the on-screen keyboard

  • Focus each text field and press A: Rare's keyboard opens. Type, delete with X, and check the field's value updates in your UI.
  • Press Done or Menu: the keyboard closes and your field gets an Enter key press. Check that it submits.
  • If your game reads typed letters from key events with no field focused, test View in your input mode: it opens the keyboard as a key sender in focus and gamepad modes, or in keys mode with "keyboard": "keys" in the profile.
  • On a device with a touchscreen, tap a field: the keyboard opens too.

See On-screen keyboard for what counts as a text field.

Test Rare Wallet

Rare Wallet in the game window works on Sui mainnet only. There is no testnet mode, so test with real but small amounts, or sign without submitting.

  • Check that your wallet list shows Rare Wallet. From your page, getWallets().get() from @wallet-standard/app should include it with 8 features.
  • Connect from a button and check the connect sheet shows your game's name and origin.
  • Use sui:signTransaction to test a full signing round trip without submitting anything: the review sheet still simulates the transaction and shows its effects.
  • Check the messages you show for a declined request (User rejected the request) and for a watch-only account, which can't sign.
  • To test the network fee flow for new players, see Gas sponsoring.

What Rare checks before listing

Rare runs every web game in the catalog through an automated check, the same way the launcher runs it: the game's profile and Rare's runtime are injected before the page's own scripts, and the page is loaded in Chrome and in WebKit. A game passes when:

  • the play URL loads,
  • Rare Wallet registers as a Wallet Standard wallet, including the older feature names that older dapp-kit pages require,
  • controller input arrives in the game's input mode (keys and pointer events, the virtual gamepad being polled, or the focus ring landing on a control and A pressing it),
  • the page shows no errors that stop it.

The check also notes when a page needs a sign-in or is blocked in some regions. Run through the sections above and your game will pass it.

--
TPS:--