Farglance for developers

Build for the Display.
We'll carry it.

A Farglance app is a plain web page. No framework, no build step, no SDK to learn. If you can write HTML, you can ship something to a pair of glasses tonight.

Submit an app

There is no fee. No listing charge, no yearly membership, no revenue cut on anything you charge for. If that ever changes, it changes for new apps only and we'll say so here first.

What you're building for

Be honest with yourself about the hardware before you design anything. It is small, it is monocular, and it has six buttons.

600 × 600, fixedOne square, right eye, about 20° of your view. No scrolling, no resizing. Design screens, not pages.
Black is transparentThe waveguide is additive. #000 disappears completely — that's the feature. Anything you want to look solid needs to be around #0a0a0f#1C1E21, and pure white text reads best.
Six inputs. That's all.Four arrow keys and Enter, delivered as plain keydown events from the Neural Band. Plus a back gesture the system keeps for itself.
Always onlineHTTPS only, no offline guarantees, nothing runs in the background. If the network drops, your app should say something useful immediately.

What actually works

Verified against Meta's own developer documentation. Check back — the platform is in developer preview and this list moves.

Capabilities for code running on the glasses.
CapabilityStatus
Arrow keys + EnterYes — the Band's swipes and pinches arrive as standard keydown events
Canvas 2D and WebGLYes — aim for 60fps and keep an eye on the 128 MB memory budget
fetch / REST / WebSocketYes — over HTTPS and wss://
Head orientation and motionYesDeviceOrientationEvent. Read it; don't steer with it. It's the head, not the wrist
LocationYesnavigator.geolocation, sourced from the paired phone. Use long timeouts
localStorage / sessionStorageYes — 5 MB each
MicrophoneNo — not a permission you're failing to request. There's no path to it from the glasses. Voice has to come from a phone
CameraNo — same story
System text inputNo — build an on-screen keyboard the arrows can drive, or design so nobody has to type
NotificationsNo — nothing can wake the glasses on your behalf
Owning the back gestureNo — a middle-finger pinch opens the system's own menu above your page. Give every screen its own visible Back
Offline / service workersDon't rely on it — officially unsupported. Preload into localStorage instead

The whole starter

This is a complete, working Farglance app. Serve it over HTTPS and you're done.

<!DOCTYPE html>
<meta charset="utf-8">
<meta name="viewport" content="width=600, height=600, initial-scale=1, user-scalable=no">
<meta name="mrbd-web-app-capable" content="yes">
<title>Hello</title>
<style>
  body { margin:0; width:600px; height:600px; overflow:hidden;
         background:#000; color:#fff; display:grid; place-items:center;
         font:600 28px/1.3 -apple-system, sans-serif; }
  button { font:700 20px/1 inherit; color:#fff; background:#111A2B;
           border:1px solid #24344f; border-radius:16px; padding:16px 26px; }
  button.on { outline:3px solid #4D9EFF; outline-offset:3px; }
</style>

<div><button class="on">Left</button> <button>Right</button></div>

<script>
  // Six inputs, and this is all of them.
  var btns = [].slice.call(document.querySelectorAll('button')), i = 0;
  addEventListener('keydown', function (e) {
    if (e.key === 'ArrowRight') i = Math.min(i + 1, btns.length - 1);
    else if (e.key === 'ArrowLeft') i = Math.max(i - 1, 0);
    else if (e.key === 'Enter') { btns[i].textContent = 'Pressed'; return; }
    else return;
    btns.forEach(function (b, n) { b.classList.toggle('on', n === i); });
    e.preventDefault();
  });
</script>

House rules

How submission works

No queue theatre. A person reads it, and you hear back either way.

Submit your app

Free. A person reviews it and you hear back either way. You keep hosting it, so you ship updates whenever you like.

See what's on the shelf →