Glassly Miniapp SDK betaThe SDK is in beta, so its APIs may change before general availability.Developing on Mentra Live? We recommend using the Glassly Bluetooth SDK.The developer tools are available in the Glassly App under Settings → Miniapp Developer Settings.Share feedback with an in-app bug report, on Discord, or by email at [email protected].
Every miniapp has a miniapp.json at its root. It declares who the miniapp is, where its two layers are built to, what permissions it needs, and what hardware it requires. The CLI validates it on every dev, pack, and release: bad values fail on your laptop, not on the phone.
miniapp.json

Fields

packageName, version, name, and hardwareRequirements are required. Everything else is optional. The $schema line points editors at the JSON Schema shipped with the CLI, so you get autocomplete and validation as you type. @glassly/create-miniapp adds it for you; you can also print the schema with glassly-miniapp schema print.

Always On miniapps

Set "alwaysOn": true for a miniapp intended to keep running, such as an assistant or notification listener. The host starts it at launch; dismissing its app switcher card or closing its UI leaves the background running. The wearer can stop it from the switcher’s Always On controls, and their per-miniapp Always On choice overrides the manifest default. Always On does not grant system privileges or prevent explicit stops. Use alwaysOn, not the earlier persistent or alwaysRun fields. type: "dashboard" makes a miniapp eligible to hold the dashboard role, which the wearer gives to one installed miniapp at a time. It grants no privileges by itself. A dashboard that needs to list or start miniapps or edit platform settings declares MANAGE_MINIAPPS and PLATFORM_SETTINGS like any other miniapp.

Permissions

Each entry is { "type": "...", "required"?: boolean, "description"?: "..." }. The optional description is shown to the user in the OS permission prompt. Every permission is asked when the miniapp launches, the required ones first. The miniapp doesn’t open until the user grants those. "required": false makes one optional: it’s asked after the required ones, the user can skip it, and the miniapp opens either way. An optional permission stops being asked at launch once the user has answered its OS prompt.
Declaring a permission is not the same as the user granting it. session.permissions.has(type) reports what you declared in the manifest, not the live OS grant. If the user denied the OS prompt, your subscriptions receive nothing. See Permissions.

Hardware requirements

Each entry is { "type": "...", "level": "...", "description"?: "..." }.
  • REQUIRED: glasses without this hardware can’t install the miniapp (it’s hidden in the Glassly Miniapp Store and launcher on incompatible devices).
  • OPTIONAL: incompatible glasses still run the miniapp, in a degraded state.
MICROPHONE means that the miniapp needs audio input. Glassly satisfies this requirement with the connected glasses microphone when one is available and falls back to the phone microphone otherwise. A miniapp that requires audio is therefore compatible with glasses such as the Vuzix Z100 that do not have an onboard microphone.

Actions

Each entry is { "id": "...", "description": "...", "visibility"?: "...", "parameters"?: {...}, "outputSchema"?: {...} }. visibility is "public" by default, meaning any installed miniapp can invoke the action; "system" restricts it to system miniapps such as Glassly AI, which also hides it from session.actions.list() for everyone else.
See Interop & Actions for the full field rules and how to handle a call.

Editing the manifest

You can edit miniapp.json by hand, or use the CLI’s guided commands:
See the CLI reference for all of them.