> ## Documentation Index
> Fetch the complete documentation index at: https://agent.minimax.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# miniapp.json fields

> Every field of the Mini App declaration. Unknown fields are rejected.

<div className="code-docs">
  <h2 id="fields">
    Top-level fields
  </h2>

  | Field | Type | Description |
  | - | - | - |
  | `schemaVersion` | `1` | Always 1 |
  | `artifacts.client` | `string[]` | Required. Page payload roots, non-empty and unique, under `miniapp/` |
  | `artifacts.node` | `string[]` | Required. Node payload roots; may overlap `client` |
  | `runtime.kind` | `"process"` | Always `process` |
  | `runtime.entry` | `string` | Node entry, `.js` / `.mjs` / `.cjs`, inside the Node payload |
  | `runtime.lifecycle` | `"on-demand"` | May be omitted. Only on-demand is supported; the legacy `background` value is treated as `on-demand` |
  | `surface.path` | `string` | Page entry route starting with `/`, without origin, query, fragment, or backslashes |
  | `surface.window` | `object` | Optional. Properties for the pop-out window; see [below](/docs/miniapp/reference/manifest#window) |
  | `mcpEndpoints` | `{ server, path }[]` | Managed MCP. `server` must be an MCP server declared in `plugin.json`; use an empty array if you have none |
  | `hostConnectorAccess.providers` | `string[]` | Allowed Connector providers: lowercase letters, digits, `_`, `-`, no duplicates |
  | `agentAccess` | `["session.run"]` | Optional. Allows running Agent turns; absent or empty means denied |
  | `agentConcurrency` | `integer` | Optional, 1–32, default 4. How many Agent turns run at once; no effect without `agentAccess` |

  <h2 id="window">
    surface.window
  </h2>

  Properties applied when the page pops out: a whitelisted subset of Electron window options. Every field is optional.

  | Field | Default | Description |
  | - | - | - |
  | `width` / `height` | The page's size in the file panel before it popped out | Integers, 200–10000 |
  | `minWidth` / `minHeight` | 480 / 360 | When both are given, can't exceed `width` / `height` |
  | `resizable` | `true` | When `false`, the size can't change at runtime either |
  | `frame` | `true` | When `false`, provide your own drag region |
  | `transparent` | `false` | When `true`, `frame: false` must also be declared |
  | `alwaysOnTop` | `false` | Upper bound for turning on always-on-top at runtime |
  | `skipTaskbar` | `false` | Keeps the window out of the taskbar |
  | `clickThrough` | `false` | Mouse events pass through to windows below while the page still gets move events; also the upper bound at runtime |

  You can't declare the window's relationship to the main window (it is always an independent top-level window whose visibility doesn't follow the main window: hiding, minimizing, or closing the main window to the tray leaves it as is), its title (always `displayName`), its screen position, or open and close behavior (it appears only through the file panel's pop-out action and returns to the file panel when closed).
</div>
