@mentra/miniapp-cli provides the mentra-miniapp command. It’s installed as a
dev dependency in every scaffolded project, so your package.json scripts call
it directly ("dev": "mentra-miniapp dev").
The CLI is Bun-only: it ships as TypeScript and runs under Bun. Use
bun
(or bunx), not npx/Node.dev
miniapp.json, builds both layers, serves them over your LAN, and
prints a QR (and a miniapp://dev?... URL). It also runs a dev sidecar
WebSocket on the next port up for live reload and console-log forwarding back to
your terminal (non-fatal if it can’t start). It watches for Wi-Fi/LAN-IP changes
every 10 seconds and reprints the QR.
The starting port comes from "port" in miniapp.json (default 3000); if it or
its sidecar neighbor is busy, the CLI scans upward for a free adjacent pair.
On the phone: Mentra App → Settings → Developer settings → Mini App
Development → Scan Mini App QR Code. Phone and laptop must share Wi-Fi. Ctrl+C
stops everything.
release
build/<pkg>-<version>.zip when every source file is older
than the zip, otherwise rebuilds (auto-detecting your package manager from the
lockfile). It serves the bundle, manifest, and icon over HTTP on 0.0.0.0 and
prints a miniapp://release?... QR, then stays up so multiple devices can
install. Each install logs a line. Installed miniapps run offline and persist
across restarts; no laptop needed after install.
pack
release calls this internally). It
builds with NODE_ENV=production, verifies dist/, validates the manifest,
copies miniapp.json + icon.png into dist/, and zips to
build/<pkg>-<version>.zip. This ZIP is what you submit to the Mentra Miniapp Store.
pack requires the zip binary on PATH (preinstalled on macOS and most Linux;
on Windows use WSL). build/ self-ignores from git.manifest
miniapp.json: edit permissions and hardware
requirements, show the current manifest, or finish. It saves after each confirmed
change, so Ctrl+C never loses a saved edit.
permission and hardware
Object-verb edits that share the wizard’s validation:
TYPE: MICROPHONE, CAMERA, CALENDAR, LOCATION,
BACKGROUND_LOCATION, READ_NOTIFICATIONS, POST_NOTIFICATIONS. Hardware
TYPE: CAMERA, DISPLAY, MICROPHONE, SPEAKER, IMU, BUTTON, LIGHT,
WIFI; LEVEL: REQUIRED, OPTIONAL. See the manifest
for what each means.
schema
miniapp.json JSON Schema to stdout: useful for CI
validation or IDE config. The same schema ships at
node_modules/@mentra/miniapp-cli/schema/miniapp.schema.json, which the $schema
line in a scaffolded miniapp.json references for editor autocomplete.
