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

# Manifest

> myrax.plugin.toml reference

Every plugin has a `myrax.plugin.toml` (or `plugin.toml`) at its root. This is
the complete set of fields the panel reads — anything else is ignored.

```toml theme={null}
id = "my-plugin"
name = "My Plugin"
version = "0.1.0"
myrax = ">=0.1.0"

[ui]
mode = "native"
entry = "web/plugin.js"
styles = ["web/plugin.css"]

[runtime]
enabled = true
command = "/usr/bin/env"
args = ["node", "runtime/server.js"]
transport = "tcp"
port = 0

[access]
level = "trusted"
```

## Top level

| Field     | Required | Default | Meaning                                                                         |
| --------- | -------- | ------- | ------------------------------------------------------------------------------- |
| `id`      | yes      | —       | lowercase `a-z 0-9 - _` only; used in URLs, the data dir and `window.myrax[id]` |
| `name`    | no       | `id`    | display name in the panel                                                       |
| `version` | no       | `0.0.0` | shown in the UI and used to cache-bust assets                                   |
| `myrax`   | no       | —       | minimum panel version, e.g. `">=0.1.0"`                                         |

## \[ui]

| Field    | Default                    | Meaning                                                                                                 |
| -------- | -------------------------- | ------------------------------------------------------------------------------------------------------- |
| `mode`   | `native` if `entry` is set | only `native` is supported — the entry is imported as an ES module into the panel                       |
| `entry`  | —                          | path to the JS module exporting `register(myrax)`, relative to the plugin root                          |
| `styles` | `[]`                       | stylesheets to load before the entry; relative paths are served from `/addons/{id}/` with cache busting |

Omit the whole section for a backend-only plugin.

## \[runtime]

Omit the section if the plugin is frontend-only.

| Field       | Default | Meaning                                                                              |
| ----------- | ------- | ------------------------------------------------------------------------------------ |
| `enabled`   | `false` | start a backend process with the plugin                                              |
| `command`   | —       | executable; relative paths resolve against the plugin directory                      |
| `args`      | `[]`    | arguments                                                                            |
| `transport` | `tcp`   | `tcp` or `unix`                                                                      |
| `port`      | `0`     | TCP port; `0` means the panel picks a free one and passes it via `MYRAX_PLUGIN_PORT` |

With `transport = "unix"` the panel passes a socket path in
`MYRAX_PLUGIN_SOCKET` instead of a port. See [Runtime](/plugins/dev/runtime)
for the full contract.

## \[access]

| Field   | Default   | Meaning                                                        |
| ------- | --------- | -------------------------------------------------------------- |
| `level` | `trusted` | the only level today — plugins run with the panel's privileges |

## Parsing notes

* Values are simple TOML: strings, booleans, integers and one-line string
  arrays. Nested tables are not supported.
* `# comments` are allowed on their own line or after a value.
* A missing or invalid `id` fails the install with an explicit error.
