minikit docs v0.1.0-alpha.3

web/miniapp.json

The app's identity and permissions. It ships inside the bundle; the simulator reads it from a dev server or an imported zip; minikit package derives the host's catalog entry from it.

{
  "$schema": "../.minikit/schemas/miniapp.schema.json",
  "schemaVersion": 2,
  "id": "expense-tracker",
  "name": "Expense Tracker",
  "version": "1.0.0",
  "entryPoint": "index.html",
  "offline": true,
  "authType": "none",
  "permissions": ["auth", "storage", "files"],
  "legacyCapabilities": [],
  "metadata": {"originalHost": "api.example.aramco.com.sa"}
}
Field Rule
schemaVersion 2 for new apps. 1 is Studio's format and still loads.
id lower-case letters, digits, ., _, -; ≤ 64 characters. It becomes a folder and a port on the host: permanent once shipped.
name non-empty display name
version 1.2.0 style
entryPoint relative .html inside the bundle, default index.html
offline runs without sign-in; when absent, authType: none means offline
authType none, sso or adfs; must agree with offline
permissions framework permissions: auth, storage, files, share. A host's own namespace is accepted with a warning.
legacyCapabilities only for migrated apps that still call window.features: makePhoneCall makeZoomCall sendEmail openMaps openInAppBrowser share sharePDF shareToMetabrain downloadPDF pickFile pickImage getUserData
metadata host hints, not identity (originalHost for API routing)

minikit validate checks the file (codes MK10xx) and compares permissions with what the code calls: an sdk.files.* call without files declared is an error, because the host will refuse it at runtime.

Migrating a Studio manifest

Schema 1 lists legacy capabilities under permissions. Set schemaVersion to 2, move those names to legacyCapabilities, and put the framework permissions under permissions (getUserData → auth; pickFile/pickImage/downloadPDF → files; share* → share; storage for local data).

Served offline by minikit docs from your toolkit checkout. Source: docs/guides/manifest.md.