@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: In the Mentra App, open Settings → Miniapp Developer Settings
→ Scan Miniapp 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. In a future release, this ZIP will be uploaded
through the Mentra Developer Console for distribution in the Mentra Miniapp
Store. That distribution workflow is not available in MentraOS 3.0.
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.
