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].
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.
Editing the manifest
You can editminiapp.json by hand, or use the CLI’s guided commands:

