Skip to content
Visor Developers

Build apps for Meta glasses.

Android, Python, TypeScript and web apps on the Display, with the wearer's consent.

KitchenTimer.kt
visor.display.cards.set("pasta", "Kitchen timer", LayoutIconName.CLOCK) {
    header(LayoutIconName.CLOCK, "Kitchen timer")
    stat("4:00", "Pasta")
    progress(0.6)
    detail {
        field("Started", "19:42")
        field("Ends", "19:52")
        buttons { button("stop", "Stop") { toast = "Stopped" } }
    }
}
The card on the Display's Briefing: Kitchen timer, 4:00, Pasta, and a progress bar.

Four ways in

  • Your Android appVDK library
  • Your computeradb, JSON-RPC
  • Programs and AI agentsWebSocket, MCP
  • A web app on the DisplayThe Display's browser
Visoron the phone
Bluetooth, Wi-Fi Direct
Glassesand Neural Band
Your Android app, your computer, programs and AI agents, and web apps on the Display all reach Visor on the phone, which reaches the glasses over Bluetooth and Wi-Fi Direct.

In your language

val visor = Visor.connect(context)

val ask = registerForActivityResult(RequestScopes()) { held -> /* the scopes the app holds now */ }
ask.launch(setOf(Scope.CAMERA, Scope.BAND))

visor.band.gestures.collect { gesture ->
    if (gesture.derived == GestureAction.DOUBLE_TAP) visor.camera.takePhoto()
}

com.macedonga.visor:kit. Getting started

AI-assisted development

Paste into your agent
Set up this project for the Visor Development Kit (VDK), which lets software use Meta glasses through Visor.
1. If `visor --version` fails, install the visor command. It needs Java 17 or later. On macOS or Linux: `curl -fsSL https://visor.macedonga.com/install.sh | sh`. On Windows: `irm https://visor.macedonga.com/install.ps1 | iex`.
2. Add the VDK's docs as an MCP server, `visor docs-mcp`. In Claude Code: `claude mcp add vdk-docs -- visor docs-mcp`.
3. Save the VDK's rules for agents with `visor agents > AGENTS.md`, and follow them.
4. Read https://visor.macedonga.com/llms.txt, then add the VDK to this project as the getting started guide says.
Check every method name in the docs before you use it.

What your code can use

Test without the glasses

127.0.0.1:7333/display
The Display simulator from visor fake: the Briefing with the two cards, and controls for the touchpad, the band and the view.
Terminal
$ visor fake
FakeVisor on ws://127.0.0.1:7333/rpc and http://127.0.0.1:7333/mcp; visor --fake on port 7334. Type help.
The Display simulator: http://127.0.0.1:7333/display
visor simulate band.gestures
Gestures without a band: type them, and your app gets them.
visor trace
Every call and event between your app and Visor, live.
FakeVisor
Visor inside your app's unit tests, with the same Display.

Install

The visor command needs Java 17 or later, which Android Studio brings.

How the glasses work, down to the bytes.