Plugin package format

A .kumbukaplugin file is a bounded ZIP archive validated before Kumbuka exposes any of its contents.

Files

A package can contain:

README.md
plugin.yaml
plugin.wasm        # only when executable modules require WASM
assets/
  ...

README.md and plugin.yaml are required. plugin.wasm is required when the manifest contains an executable renderer-extension, macro, code-highlighter, widget, content-change, exporter, or admin-action. Declarative-only packages do not need WASM.

The packaged README is sanitized and displayed on the plugin detail page in Administration → Plugins.

Only files under assets/ can be added beyond those package-root files. Unsafe paths, duplicate entries, symlinks, special files, and unsupported root entries are rejected. The runtime keeps validated packages in memory and does not extract archives into the host filesystem.

Limits

Item Limit
Archive 16 MiB
Expanded package 32 MiB
WASM module 16 MiB
One asset 8 MiB
Manifest 64 KiB
README 256 KiB
Entries 256

The manifest is strictly decoded and must contain exactly one YAML document.

Building packages

kumbuka-plugin build validates the project, compiles required Go/WASI code, and writes a deterministic package to dist/<plugin-name>.kumbukaplugin.

For executable Go plugins, the build uses the Go version declared by the containing module and targets GOOS=wasip1, GOARCH=wasm.

See Manifest and modules for the manifest schema and Getting started for the normal development workflow.