Skip to main content

Directory layout

New packages created by init use this layout. The host still reads the earlier liveboard/ format, and updating an old package doesn’t require converting it.

Plugin manifest: plugin.json

.minimax-plugin/plugin.json is the single source of truth for plugin identity, metadata, icon, Skills, MCP, and Apps. Mini App authoring never reinterprets or clears these fields.
.minimax-plugin/plugin.json
  • name is a lowercase machine name of up to 80 characters that starts with a letter and may use digits and . _ - as separators. It is the Mini App’s pluginId.
  • version uses SemVer. description, author, and every exampleQueries entry must be non-empty.
  • icon points to a PNG, JPEG, or WebP inside the package. init provides a default icon.
  • apps, mcpServers, and skills keep their ordinary plugin meaning; use empty arrays for capabilities you don’t have.

Entry declaration: package.json

package.json
The root package.json only needs this extension. The host never reads or runs engineering metadata such as packageManager, lockfiles, build scripts, or dependencies.

Mini App declaration: miniapp.json

miniapp/miniapp.json
See miniapp.json fields for every field. Key points:
  • artifacts.client and artifacts.node are both required. They define what the host hashes, adopts, and publishes; they can be source directories rather than build output, and they may overlap.
  • runtime.entry is the Node entry, ending in .js, .mjs, or .cjs, inside the Node payload. lifecycle is always on-demand: enabling or scanning a plugin never starts the service.
  • surface.path is the page route served by the Node service.
  • hostConnectorAccess and agentAccess are explicit grants; leave them out and you don’t get them. Declare them only when the runtime really needs them.
The example requests only Connector access and Agent execution. Reading user sessions separately requires agentAccess: ["session.read"], calling host tools requires toolAccess: ["call"], and using the microphone requires deviceAccess: ["microphone"]. Combine declarations as needed; users can switch each one off in plugin details.Camera and system notifications are available since v3.1.9, declared with deviceAccess: ["camera"] and deviceAccess: ["notifications"], respectively. When using either capability, set engines.mcode to >=3.1.9 or a higher minimum version. See Device permissions for details.When using newer interfaces, declare a minimum host version in this miniapp/miniapp.json, such as "engines": { "mcode": ">=3.1.5" }. See Versions and capability detection for the limits of version gating and capabilities.has(name).

Payload rules

  • The host doesn’t install dependencies or run builds. Ship something ready to run, and bundle or vendor third-party runtime dependencies into a payload directory. Prefer Node built-ins and browser APIs.
  • node_modules is build state: it is never published and must not sit inside a declared payload.
  • Use portable relative paths: no absolute paths, .., backslashes, or symlinks, and nothing outside the package.
  • Every file in a payload except node_modules goes into the digest. Delete logs, caches, temporary files, and anything else you don’t want published before you publish.