Plugin manifest reference
August 16, 2026 ยท View on GitHub
Every API v3 package contains plugin.toml. The export macro embeds the exact
manifest bytes in the compiled entrypoint, and the host compares that embedded
contract with the packaged file before enabling the plugin.
Plugin identity
schema_version = 3
[plugin]
id = "dev.example.my-plugin"
name = "my_plugin"
version = "1.0.0"
api_min = 3
api_max = 3
runtime = "native"
entrypoint = "my_plugin"
description = "Example plugin"
license = "MIT"
repository = "https://example.com/my-plugin"
idis the stable package identity. Use a reverse-domain identifier.nameis the user-facing CLI name.api_minandapi_maxdeclare the supported host API range.runtimeisnativeorwasm-component.- A native
entrypointis a logical library name; lla adds the platform prefix and suffix. A WebAssembly entrypoint names the package-local.wasmfile. - Entrypoints must be one package-local filename. Absolute paths and traversal components are rejected.
Identifiers accept ASCII letters, digits, ., _, and -.
Capabilities
[capabilities]
decorates_entries = true
formats = ["default", "long"]
machine_output = true
formats names the listing formats supported by the plugin. Set
machine_output when its fields and action results are safe for structured
rendering.
Listing fields
[[fields]]
name = "score"
type = "integer"
sortable = true
filterable = true
Field types are string, integer, float, boolean, path, bytes, and
timestamp. Field names must be unique.
Actions and arguments
[[actions]]
id = "inspect"
description = "Inspect one or more paths"
examples = ["lla plugin run my_plugin inspect -- README.md --depth 2"]
interactive = false
arguments = [
{ name = "paths", type = "path", position = 0, required = true, repeatable = true },
{ name = "depth", type = "integer", option = "--depth", default = 1, min = 0, max = 8 },
{ name = "mode", type = "string", option = "--mode", choices = ["fast", "full"] },
{ name = "hidden", type = "boolean", option = "--hidden", default = false },
]
output = { type = "value" }
Argument types are string, integer, float, boolean, and path.
Arguments may declare:
requiredanddefaultrepeatablechoices- numeric
minandmax - a zero-based positional
position - a long option name in
option
Names, positions, and option names must be unique within an action. Defaults and choices must match the argument type and numeric constraints.
Set interactive = true only when an action reads from the terminal or owns its
human-facing interaction. The host rejects interactive actions without a TTY or
when json, ndjson, or csv output is requested.
Action output types are:
none: the action has no host-rendered result.text: human-readable text.value: a typed null, scalar, list, or object.table: rows with a declared typed column schema.
Permissions
[permissions]
filesystem = ["read:selection"]
network = ["api.example.com"]
clipboard = false
open_url = false
process = false
Supported filesystem scopes are:
metadata:selectionmetadata:treeread:selectionread:treeread:user-pathwrite:selected-destinationwrite:treewrite:user-pathdelete:selectiondelete:quarantine
Network entries are exact domain names; wildcards are rejected. WebAssembly
plugins cannot request process = true. Native permissions are declarative,
while WebAssembly permissions are enforced by the host.
Package integrity
Release packages contain checksums.toml covering plugin.toml and the runtime
entrypoint. Prebuilt installation and plugin doctor reject missing coverage,
changed files, manifest mismatches, and incompatible API ranges.