Farglance for developers
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.
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.
Be honest with yourself about the hardware before you design anything. It is small, it is monocular, and it has six buttons.
#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.keydown events from the Neural Band. Plus a back gesture the system
keeps for itself.Verified against Meta's own developer documentation. Check back — the platform is in developer preview and this list moves.
| Capability | Status |
|---|---|
| Arrow keys + Enter | Yes — the Band's swipes and pinches arrive as standard keydown events |
| Canvas 2D and WebGL | Yes — aim for 60fps and keep an eye on the 128 MB memory budget |
| fetch / REST / WebSocket | Yes — over HTTPS and wss:// |
| Head orientation and motion | Yes — DeviceOrientationEvent. Read it; don't steer with it. It's the head, not the wrist |
| Location | Yes — navigator.geolocation, sourced from the paired phone. Use long timeouts |
| localStorage / sessionStorage | Yes — 5 MB each |
| Microphone | No — not a permission you're failing to request. There's no path to it from the glasses. Voice has to come from a phone |
| Camera | No — same story |
| System text input | No — build an on-screen keyboard the arrows can drive, or design so nobody has to type |
| Notifications | No — nothing can wake the glasses on your behalf |
| Owning the back gesture | No — a middle-finger pinch opens the system's own menu above your page. Give every screen its own visible Back |
| Offline / service workers | Don't rely on it — officially unsupported. Preload into localStorage instead |
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>
localStorage or on your own server.No queue theatre. A person reads it, and you hear back either way.
Free. A person reviews it and you hear back either way. You keep hosting it, so you ship updates whenever you like.