Terminology
Shared vocabulary for FeatherFly plugin development.
FeatherFly plugin vocabulary — read this before writing hooks.
| Term | Meaning |
|---|---|
| Plugin | A native .so shared library loaded by the daemon at startup. |
| Host | The running FeatherFly daemon. Passes HostApi to your init. |
| Hook | A callback your plugin registers during init. |
| Event | A lifecycle hook fired at a fixed point (startup, shutdown, config load). |
| Config mutation hook | Rewrites raw config YAML bytes before settings are applied (config.mutate). |
| Request hook | Runs before HTTP handlers — request.intercept (outer) or middleware.inject (inner). |
| Plugin route | A handler registered with route! that serves a new HTTP endpoint. |
| JSON mutation hook | A hook that receives JSON bytes, may rewrite them, and returns output for HTTP responses. |
| CloudPanel command hook | A hook that receives CloudPanel operation metadata and CLI args JSON, then continues, rewrites args, or cancels. |
| Target | What a hook listens to — an event name, config pipeline, route prefix, or JSON target. |
| Pipeline | Ordered chain of hooks for one target. Each hook sees the previous hook's output. |
| Mixin | FeatherFly's model for JSON hooks: multiple plugins stack transformations on the same response, like Minecraft mixins layering behavior. |
| Load order | Alphabetical by .so filename in the plugins directory. Determines pipeline order. |
| Cancel | Lifecycle hooks may call HookResult::cancel() to skip remaining handlers for that event. |
| API version | Integer in PluginEntry. Must match FEATHERFLY_PLUGIN_API_VERSION or the plugin is skipped. |
| Action | A panel step object { id, label, step } returned in API responses for follow-up work. |