FrameDrop

Documentation

Add a FrameDrop button that opens a manifest URL. FrameDrop reads that JSON, downloads the build, and installs it to the paired headset. Visitors need a headset they have paired once. If FrameDrop is not on the PC, the same button takes them to FrameDropVR.com.

1. Add a manifest

Host this JSON. The Install with FrameDrop link takes a manifest URL in https://framedropvr.com/install?manifest=.

{
  "schema": "framedrop.install/v1",
  "name": "My Game",
  "files": [
    {
      "url": "https://cdn.example.com/mygame-arm64.apk",
      "sha256": "optional-but-better"
    }
  ]
}

name is what shows up in Steam. sha256 is optional. A Linux zip uses the same shape with a .zip URL; FrameDrop unpacks it before upload.

2. Host the build

Point the manifest url at your file. For Android on Frame, ship arm64-v8a or a universal APK that includes it. For native Linux, zip the ARM64 client (wrapper folder is fine). GitHub Releases or any static host works.

3. Put this on the page

Use this button. Set the href to your manifest URL with https://framedropvr.com/install?manifest=. It is self-contained — no FrameDrop CSS required. That page opens FrameDrop when it is installed, and the FrameDrop site when it is not.

If you build the href in JavaScript, encode the inner URL:

document.getElementById("install").href =
  "https://framedropvr.com/install?manifest=" +
  encodeURIComponent("https://cdn.example.com/mygame.framedrop.json");

A direct file URL also works if you skip the JSON:

https://framedropvr.com/install?url=https://cdn.example.com/mygame-arm64.apk

Rules

HTTPS only on the public internet. HTTP is allowed from localhost for local testing. The file URL must end in a filename, not a directory. No file://, no LAN IPs, no credentials in the URL. FrameDrop still uses framedrop:// after that page opens; Windows learns it the first time FrameDrop runs.

What the user sees

The browser opens FrameDrop and FrameDrop fetches your manifest, names the title, and installs to the paired headset. If FrameDrop is not installed, the same click lands on FrameDropVR.com so they can get the app. Keep a normal download next to the button.