Skip to guide content

RoboBuddy Documentation

Windows Support Matrix

Native-Windows SO-101 support matrix

Retrieval date: 2026-07-26
Target: native 64-bit Windows, x86-64, CPython 3.12 ABI
Current bundle terminal status: NATIVE_WINDOWS_BLOCKED

The status is narrow: the source implementation and offline cross-platform checks are complete, but the required Windows host, browsers, Android device, and robot were not available in the packaging environment. Nothing here establishes technical impossibility.

The machine-readable authority is bridge/windows_support_matrix.json; dependency enforcement remains centralized in bridge/pyproject.toml.

Selected runtime

Component Selected boundary Native-Windows evidence and decision
CPython 3.12.10, official 64-bit installer Exact setup baseline. Python 3.12.10 is the final 3.12 bugfix release with official Windows binary installers. Detect with py -3.12-64 -c "import platform,struct,sys; print(platform.python_version(), 8*struct.calcsize('P'), sys.platform)"; expected 3.12.10 64 win32.
LeRobot 0.6.1 at commit 8a74e0ac6d01706d67fddfed682a09d694d9c8c0 Install lerobot[core_scripts,feetech] from the immutable commit. The Placo extra is deliberately excluded. The adapter import is probed without enumerating/opening serial ports. Real Windows SO-101 I/O remains a qualification item.
Feetech feetech-servo-sdk==1.0.0, pyserial==3.5 pyserial officially supports Windows. Feetech 1.0.0 is source-only; this means no prebuilt wheel, not impossibility. Native COM-port operation must be reproduced.
Phone protocol teleop==0.1.5 Pure-Python wheel, source attestation commit 3a5249176dcd911a82b6fcba7faeef7094f08fc7; compatibility probe retained.
Cartesian IK native_dls_v1, numpy==2.2.6 NumPy publishes cp312-win_amd64; wheel SHA-256 is recorded in the JSON matrix. The selected solver parses the pinned URDF, excludes the gripper, uses bounded DLS, and never silently falls back.
Placo 0.9.15 reference boundary only The compatible wheel workflow has no Windows target. The adapter remains opt-in as lerobot_placo_reference; it is not installed for Windows and is not a fallback.
HTTPS/QR server uvicorn[standard]==0.51.0, qrcode[pil]==8.2, Pillow==12.3.0 Pure-Python/Windows-wheel path selected; exact installed versions are checked by the runtime probe.
Local certificate tool mkcert 1.4.4 Explicit external prerequisite. No executable is silently downloaded. The optional Chocolatey install requires an explicit switch and is followed by an exact version check.
Xbox browser current stable Chrome and Edge Capability-qualified rather than hard-pinned. Both must expose Gamepad API and report the chosen controller with mapping === "standard"; neutral/deadman/source-loss behavior is tested separately in each.
Android browser current stable Chrome on an ARCore-supported physical device Requires trusted HTTPS, a secure context, WebXR support, an ARCore-supported device, and Google Play Services for AR. Emulator qualification is not accepted.

Kinematics decision

The required Windows backend is native_dls_v1:

  • semantic order is exactly shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll;
  • the gripper never enters FK or IK;
  • public joint units are degrees; internal solver units are radians;
  • poses use x, y, z, w quaternions;
  • the bundled URDF digest must be 5ea6695846d5f04416116e75894b8b10627ed4ec559b907ccc9cb47f7a753860 and target frame must be gripper_frame_link;
  • position is the hard numerical contract; orientation is ignored at zero weight or treated as weighted best effort;
  • configured ceilings are 48 iterations and 20 ms, with classified fail-closed outcomes;
  • the configured 1.5 mm position residual is software numerical tolerance, not physical positioning accuracy.

A standard-library URDF-chain oracle and immutable reference corpus independently check production FK. IK results are independently forward-transformed before acceptance tests.

Browser/device qualification boundary

Gamepad API availability does not prove the physical Xbox mapping. Qualification must be repeated in current Chrome and Edge with explicit controller selection, neutral-state qualification, RT deadman, Fine override, pair selection only while idle, X measured hold, B STOP, poll-gap retirement, and explicit re-arm after STOP.

The Android path must first load https://<private-ip>:8443/ without a certificate warning. Only then may QR pairing be attempted. Verify window.isSecureContext, navigator.xr, one authorized WebSocket, release-to-hold, tracking/background/focus/pointer/transport retirement, reconnect state reset, unreachable-target rejection, and global STOP.

Primary sources

  • Python 3.12.10: https://www.python.org/downloads/release/python-31210/
  • Immutable LeRobot dependency catalog: https://github.com/huggingface/lerobot/blob/8a74e0ac6d01706d67fddfed682a09d694d9c8c0/pyproject.toml
  • Current LeRobot catalog (comparison only): https://github.com/huggingface/lerobot/blob/main/pyproject.toml
  • NumPy 2.2.6 artifacts: https://pypi.org/project/numpy/2.2.6/
  • Feetech SDK 1.0.0: https://pypi.org/project/feetech-servo-sdk/1.0.0/
  • pyserial 3.5: https://pypi.org/project/pyserial/3.5/
  • teleop 0.1.5: https://pypi.org/project/teleop/0.1.5/
  • Placo 0.9.15 wheel workflow: https://github.com/Rhoban/placo/blob/v0.9.15/.github/workflows/wheels.yml
  • Gamepad API: https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API
  • WebXR/ARCore requirements: https://developers.google.com/ar/develop/webxr/requirements
  • mkcert 1.4.4: https://github.com/FiloSottile/mkcert/tree/v1.4.4