File MN-002-03 · Case 03Local time · UTC−3 · Status: Active
Matheus Nugas
Case 03 · LabStatus: Active · Clearance: Public summary

Cloudbind

I'm building a Chrome extension that plays every Xbox Cloud Gaming title with keyboard and mouse, with free remapping, presets that switch per game and no account, server or driver.

Role
Design and build
Period
2026 to now
Team
Solo
Stack
Chrome Extensions (MV3) · Gamepad API · Pointer Lock API · WebRTC · JavaScript · Playwright

01Brief

Cloudbind is the follow-up to Joy2Cloud. Joy2Cloud taught me that the cleanest way into a cloud game is the Gamepad API: show the page a virtual Xbox controller and every title reads it. Joy2Cloud feeds that controller from Switch 2 Joy-Con. Cloudbind feeds it from the keyboard and mouse.

The problem is simple. Xbox Cloud Gaming streams console games, and console games expect a controller. If you play in a browser on a laptop, or you just aim better with a mouse, most titles leave you stuck. The options that existed each left a gap: the most installed keyboard and mouse extension charges to keep using it and to change the layout, and userscripts like the excellent open source Better xCloud need a userscript manager first and target the classic interface, which Microsoft replaced with play.xbox.com in 2026.

So Cloudbind gives the game a virtual Xbox controller and drives it from your keyboard and mouse. It works out of the box with an FPS layout, and remapping is free: any key, mouse button or wheel notch to any button or stick direction, several inputs per button, bound by pressing the key. Bindings follow key positions, so WASD stays put on AZERTY or ABNT2 keyboards. Presets are unlimited, switch by themselves per game, and travel as short share codes you can paste on Discord or Reddit.

Two features go past input. xCloud picks a streaming region for you and hides the choice, so Cloudbind lets you pick it. And an overlay shows ping, FPS, resolution, bitrate, packet loss and the server in use, and it stays visible in fullscreen.

None of the tools before it did all of this. Cloudbind puts it together in one free install, one click, no account. Going by each project’s public description as of October 2026:

  • Compared with the most installed extension: remapping is free instead of paid, there’s no e-mail for a trial, and Cloudbind adds things that one doesn’t advertise: mouse wheel and side buttons, keys on the right stick, aiming sensitivity with a response curve and anti-deadzone, server choice and a connection overlay. It also runs on the new play.xbox.com, which I couldn’t verify for it.
  • Compared with Better xCloud: no userscript manager to install first, and it’s built for the new play.xbox.com instead of the classic interface. Better xCloud already does server choice and an overlay well.
  • Neither of them advertises: presets that switch by themselves for each game, or share codes to trade layouts.

It’s at version 0.5.0 and still in development. The repository is private for now, and the Chrome Web Store listing comes after play-testing across genres. The core, playing with keyboard and mouse and remapping it, stays free. Cloudbind is a fan project and is not affiliated with Microsoft or Xbox.

02Constraints

  • Games

    Console games expect a controller. Only a handful of xCloud titles accept keyboard and mouse natively.

  • Platform

    No official API. In 2026 Microsoft moved xCloud to play.xbox.com and redirects there, so the extension can only rely on what the page itself exposes, and that can change without notice.

  • Browser

    Chrome injects a script file only once per frame, fullscreen hides anything outside the top layer, and synced storage caps each item at 8 KB.

  • Privacy

    The only permission is storage, and there is no server. Nothing typed or clicked leaves the browser.

  • Team

    Just me.

03Architecture

Input

Keyboard + mousePointer LockActive presetStick mathVirtual Xbox padGame · Gamepad API

Settings

Control tab + popupchrome.storage.syncBridge · isolated worldPage scripts

Stream

xCloud login · region listChosen regionStream sessionWebRTC getStatsOverlay · top layer
Fig. 03 · Pipelines at a glance. Highlighted nodes are the buffers.

04Decisions

D-01

Reuse the virtual controller from Joy2Cloud

Why

A page script replaces navigator.getGamepads() with a standard Xbox controller and drives it from the keyboard and mouse. To the game it is just a controller, so it works in every title, including the ones with no keyboard support at all.

Trade-off

The mouse ends up as an analog stick, so aim is an approximation that depends on tuning, and the pad has to behave like real hardware (a timestamp that advances every frame, a rumble actuator, announced again after the game loads) or some games ignore it.

D-02

Treat the mouse as a speed, not a position

Why

Raw input through Pointer Lock turns into stick tilt through smoothing, a response curve and an anti-deadzone, and the stick recentres within about 35 ms of the mouse stopping. The math is pure and frame-rate independent, checked at 60 and 144 Hz with a 125 Hz mouse.

Trade-off

Good defaults depend on the game and the person. Sensitivity, aiming sensitivity and the curve are all exposed, and the default still needs play-testing across genres on real xCloud.

D-03

Choose the server by editing what xCloud already sends

Why

xCloud's login response lists every streaming region and marks one as the default. Cloudbind marks the one you picked instead, so the whole session goes there, with no extra requests and no proxy.

Trade-off

It depends on an undocumented response. If it changes, the feature stops working, so with no choice saved Cloudbind leaves the response exactly as Xbox sent it.

D-04

Record a real session before building quality features

Why

A developer recorder captured how xCloud sets up a stream on the new interface. It showed that resolution is now a native setting, the server accepts only H.264 and bitrate is decided server side, so region choice was the gap worth filling.

Trade-off

A recorder sits next to tokens and account data. It's off by default, strips tokens, cookies, gamertag, ids and ICE credentials inside the page before anything is stored, and the redaction has its own tests.

05Outcome

1

Browser permission requested (storage)

~35 ms

For the stick to recentre after the mouse stops

49

Automated browser tests with the extension installed

21

Unit tests on stick math, presets and share codes

06What I'd change

My first build only matched www.xbox.com, the address I knew from Joy2Cloud. xCloud had already moved to play.xbox.com, so the extension silently never loaded. I was carrying assumptions over instead of checking the live service. The recorder came later and answered the quality questions in one session. Next time I'd record the real thing first and write features second.