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

Required: packageName, version, name, hardwareRequirements. 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. create-mentra-miniapp adds it for you; you can also print the schema with mentra-miniapp schema print.

Permissions

Each entry is { "type": "...", "description": "..." }. The optional description is shown to the user in the OS permission 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 simply 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 Mentra Miniapp Store and launcher on incompatible devices).
  • OPTIONAL: incompatible glasses still run the miniapp, in a degraded state.

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.