Files
saphidandClaude Opus 5.5 6c4d387ef3 Sideload Linux and Windows builds as Steam Devkit Games
Dropping a game's .zip, folder or .exe on Send to Frame now adds it to the
headset's Steam library through Valve's SteamOS Devkit title path, with the
runtime picked from the program's header: Windows PE -> Proton Experimental
(steam_play=1), aarch64 ELF -> SteamLinuxRuntime_4-arm64, x86-64 ELF ->
SteamLinuxRuntime_4 (through FEX). Other architectures are refused.

- frame/devkit-utils: Valve's devkit-utils vendored unmodified (MIT,
  steamos-devkit v0.20260925.1), synced to ~/devkit-utils by stamp, bundled in
  the app and compiled in CI.
- ui/frame_titles.py: inspect (safe unzip, ELF/PE classification, launch
  target ranking), install(path, name=None, exe=None, runtime=None,
  progress=None), list, launch, remove, plus a CLI.
- ui/server.py: /api/titles (inspect/install/discard/launch/remove),
  /api/titles/job progress, and an upload mode 'title'.
- ui/index.html: confirm dialog (name, launch target, runtime), install
  progress, and a Sideloaded titles list with Launch and Remove. The app's
  preload passes a dropped folder's path.
- tests and docs/sideloading.md. Device-side behaviour is inferred from
  Valve's source; the headset was offline, so none of it has been checked on
  a Frame yet.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:38:14 +10:00
..

Valve's devkit-utils (vendored)

Unmodified copy of client/devkit-utils/ from Valve's SteamOS Devkit Client, MIT licensed (see LICENSE; Valve's own notes are in VALVE-README.md).

  • Source: steamos-devkit, commit 6f0711a ("Code drop."), release v0.20260925.1 (ChangeLog entry dated 2026-09-25).

ui/frame_titles.py copies this folder to ~/devkit-utils on the Frame (where Valve's own client puts it) and uses steamos-prepare-upload, steam-client-create-shortcut, steam-devkit-rpc and steamos-delete to register uploaded builds as Steam "Devkit Games". See docs/sideloading.md.

To update: copy the folder from a newer checkout over this one, keep this README, and update the version line above. The stamp Frame Control compares on the headset is a hash of these files, so a changed copy is re-synced on the next use.