Terminology

Shared vocabulary for FeatherFly plugin development.

FeatherFly plugin vocabulary — read this before writing hooks.

TermMeaning
PluginA native .so shared library loaded by the daemon at startup.
HostThe running FeatherFly daemon. Passes HostApi to your init.
HookA callback your plugin registers during init.
EventA lifecycle hook fired at a fixed point (startup, shutdown, config load).
Config mutation hookRewrites raw config YAML bytes before settings are applied (config.mutate).
Request hookRuns before HTTP handlers — request.intercept (outer) or middleware.inject (inner).
Plugin routeA handler registered with route! that serves a new HTTP endpoint.
JSON mutation hookA hook that receives JSON bytes, may rewrite them, and returns output for HTTP responses.
CloudPanel command hookA hook that receives CloudPanel operation metadata and CLI args JSON, then continues, rewrites args, or cancels.
TargetWhat a hook listens to — an event name, config pipeline, route prefix, or JSON target.
PipelineOrdered chain of hooks for one target. Each hook sees the previous hook's output.
MixinFeatherFly's model for JSON hooks: multiple plugins stack transformations on the same response, like Minecraft mixins layering behavior.
Load orderAlphabetical by .so filename in the plugins directory. Determines pipeline order.
CancelLifecycle hooks may call HookResult::cancel() to skip remaining handlers for that event.
API versionInteger in PluginEntry. Must match FEATHERFLY_PLUGIN_API_VERSION or the plugin is skipped.
ActionA panel step object { id, label, step } returned in API responses for follow-up work.