Frame Control 0.3.1: features by OS

Which features are built for each OS, and which were tested against a real Steam Frame (SteamOS 0.3.0, build 20260922.6101926). Status as of 26 September 2026, for PR #2 (0.3.1). Every build now bundles its own Python 3.12, adb and CA certificates, so nothing else needs installing (only ssh on Linux, plus the system adb on arm64 Linux).

Builds and test machines

macOS

Built
Apple Silicon (arm64): .dmg, .zip. No Intel build.
Signing
Ad-hoc signed, not notarised
Tested on
Apple Silicon Mac, macOS 26, using a local 0.3.1 build with the bundled Python and adb. All 15 calls it made to the Frame at startup returned OK.

Windows

Built
x64: NSIS installer .exe and .zip
Signing
Unsigned. SmartScreen shows a warning.
Tested on
Windows 11 x64 VM. Real-Frame results below are from 0.3.0. The 0.3.1 installer from CI installs cleanly (31 s) and reinstalls over itself (38 s). The server starts on the bundled Python, and HTTPS to Steam and F-Droid works. The Frame went offline before its 0.3.1 run on the headset.

Linux

Built
x86_64 and arm64: AppImage and .deb
Signing
n/a
Tested on
x86_64 Ubuntu 26.04 with no adb and no clipboard tools, using the 0.3.1 AppImage under Xvfb with the bundled Python and adb. The arm64 builds and the .deb packages weren't run; the arm64 package was only checked to contain an ARM Python.

Features

Tested: worked against the real Frame on that OS Partial: only part of the feature was tested (see note) Automated: covered by CI tests on that OS, not tried on a real Frame Built: in the build, not tested Not built
FeaturemacOSWindowsLinux
Connection
Set Up Connection
Finds the Frame, writes the frame SSH alias, copies your key using the Frame's password. macOS runs connect.sh in Terminal; Windows and Linux run frame_connect.py.
Partial
Existing alias used, script not re-run
Tested Tested
Shared SSH connection
A single SSH connection is reused, so each request takes about 0.3 s. Windows OpenSSH can't do this, so there each request opens its own connection (about 0.5 to 1 s).
Tested Not built
OpenSSH limitation
Tested
Headset view
Capture headset view
The left eye or both eyes as the lenses show them, saved as PNG
TestedTestedTested
Capture desktop panel
gamescope's flat layer
TestedTestedTested
Live view
720p H.264 at about 30 fps, decoded with WebCodecs
TestedTestedTested
Headset screenshots
Browse the screenshots you took with Steam's shortcut, and save them to ~/Pictures/SteamFrame
Tested Partial
Listed (5 found); saving not tried
Partial
Listed with thumbnails; saving not tried
Status
Battery and charging
Percentage, watts, time to full or empty, charger type, temperature
TestedTestedTested
System status
Storage, memory, temperature, Wi-Fi, uptime, running services
TestedTestedTested
Volume and mute
Tested Partial
Read only
Partial
Read only
Games
Owned games with Frame ratings
Verified, Playable, Unsupported or Unknown
TestedTestedTested
Install a game on the Frame
Uses the headset's Steam client, with live progress
TestedBuiltBuilt
Store search, Buy, Store on Frame
TestedBuiltBuilt
Library shelf and Play button
BuiltBuiltBuilt
Android apps
Installed Android apps list
TestedTestedTested
F-Droid catalogue search
About 4,500 apps with Frame ratings, bundled with the app
TestedTestedTested
Install, launch, stop, test, remove an app
Each app runs as its own Lepton instance, using the bundled adb. APK files are read by a built-in parser (no aapt2) that matched aapt2 on 9 F-Droid APKs.
Tested
Diary: read, install, launch, test, remove
Built Partial
Launch and stop
Report an APK
Reports are saved on your computer; the shared database is maintainer-only
AutomatedAutomatedAutomated
Android display settings
Resolution, UI scale, text size
Tested
Density and text size set, then reset
Built Partial
Read over the bundled adb
Transfer
Send files to ~/Downloads
Test files had non-English characters in their names (é, ✓). macOS and Linux copy with rsync; Windows uses scp.
TestedTestedTested
Drop an APK to install it
TestedBuiltBuilt
Send text or clipboard to the Frame
Needs the headset desktop open. The app reads your clipboard through Electron, so no extra tools are needed.
Tested
Reading the clipboard retested in 0.3.1
Partial
Reached the Frame; desktop was closed
Partial
Clipboard read with no xclip; Frame desktop was closed
Flatpak install and remove
BuiltBuiltBuilt
One-click tools
SSH or SFTP in a terminal
macOS: Terminal. Windows: cmd. Linux: GNOME Terminal, Konsole, xterm and others.
BuiltBuiltBuilt
Steam Link
BuiltBuiltBuilt
Remote desktop
macOS: Windows App. Windows: Remote Desktop. Linux: Remmina or FreeRDP.
BuiltBuiltBuilt
Sleep, restart, shut down
Opens a terminal because SteamOS asks for the sudo password
BuiltBuiltBuilt
App
Local server test suite
Runs in GitHub Actions on every push (Python 3.12 on macOS and Windows, Python 3.13 on Ubuntu), including the APK reader tests
AutomatedAutomatedAutomated
Mac or PC wording
The UI says Finder or File Explorer, and Mac or PC, to match your system
TestedTestedTested

Notes