cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

fix/architecture-review-findings
goq / docs / portal-platform-support.md
portal-platform-support.md 3.5K rendered
1# Portal platform and relative-pointer support23Portal's first supported download is macOS arm64. Its relative-pointer path4uses CoreGraphics cursor disassociation and has live Mac-to-Gamescope hardware5evidence. Linux, Windows, and other Portal builds are not release targets yet.67## Build policy89| Client build | Relative pointer | Other negotiated input |10| --- | --- | --- |11| macOS | Enabled through the native CoreGraphics path | Absolute pointer, keyboard/text, and gamepad remain available when granted |12| Non-macOS, default features | Not offered; any unexpected relative-pointer or pointer-feedback response is masked locally | Absolute pointer, keyboard/text, gamepad, and input acknowledgements remain available when granted |13| Non-macOS with `experimental-non-macos-pointer-capture` | Enabled through Tao cursor grab plus browser Pointer Lock | Same independently granted input capabilities |1415The experimental flag makes the non-macOS code available for testing; it does16not make that platform supported and must not appear in a published build.17Compile both policies with:1819```bash20cargo check --locked -p portal --all-targets21cargo check --locked -p portal --all-targets \22 --features experimental-non-macos-pointer-capture23```2425The complete repository gate runs the default test suite and separately26compiles the experimental branch. On Linux CI this proves both non-macOS27configurations compile. Portal's macOS release job continues to build without28feature flags.2930## Non-macOS acceptance checklist3132Complete this checklist independently for each OS/webview combination before33proposing default or release support. Preserve the exact Portal commit,34operating-system version, webview version, and window-system/session type with35the evidence.36371. Build and launch Portal without the experimental feature. Connect to a host38 offering every input capability and confirm diagnostics do not report39 relative pointer or pointer-position feedback. Confirm absolute motion and40 buttons, keyboard/text, and a physical gamepad still work when their grants41 are present.422. Build the exact same commit with43 `experimental-non-macos-pointer-capture`. Confirm the embedded webview44 implements `requestPointerLock`, reports ownership changes, and supplies45 bounded `movementX`/`movementY` deltas.463. Against the UMPC Gamescope session, enter and exit control at least ten47 times. Exercise motion, left/right click, both scroll axes, keyboard, and a48 physical controller in an actual game. Confirm the remote pointer maps to49 the native host surface rather than the encoded size.504. While control is active, test window focus loss/regain, Pointer Lock loss,51 disconnect, reconnect, and application exit. Portal must visibly leave52 control when ownership is lost, restore the local cursor, bound release53 retries, and leave no held host input.545. Repeat under the platform's materially different window systems or55 webviews. Linux requires separate Wayland/WebKitGTK and X11/WebKitGTK56 evidence when both are claimed; Windows requires the shipped WebView257 runtime. Record unavailable APIs as an explicit unsupported result rather58 than bypassing the gate.596. Run `./scripts/verify-demo-build.sh` and retain the exact Portal-to-UMPC60 session evidence required by `AGENTS.md`. A config check, unit test, or61 compile-only result is not hardware acceptance.6263Removing the feature gate requires reviewed evidence for every platform being64enabled and an explicit release-policy change. Do not infer support from Tao65or webview API availability alone.