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.
MICROPHONE means that the miniapp needs audio input. MentraOS 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.Editing the manifest
You can editminiapp.json by hand, or use the CLI’s guided commands:

