FDO_SDK base class, implement FDOInterface, and FDO loads your plugin into its runtime. Plugins can range from simple UI widgets to full-featured operator dashboards for DevOps tooling.
FDO renders your plugin’s render() output inside a sandboxed iframe. Your plugin class, handlers, storage, and logging run in the plugin backend process. The FDO host transforms and mounts your UI inside a React-hosted iframe, injecting browser-side helpers and UI libraries for use in that context. This separation is fundamental to how FDO works.
What you can build
- UI widgets — display metrics, status summaries, or dashboards using DOM helpers and injected libraries
- Docker and container management panels — manage containers, images, and volumes via scoped process execution
- Kubernetes dashboards — inspect clusters, deployments, and pods through host-mediated
kubectlcalls - Helm release managers — deploy and manage Helm charts through scoped operator tooling
- Terraform / infrastructure operator panels — plan, apply, and inspect infrastructure state
- Podman and container-runtime consoles — interact with Podman through scoped execution scopes
- Custom DevOps tooling — wrap any CLI tool (AWS CLI, gcloud, Azure CLI, Vault, Nomad, and more) with a scoped process capability
Key features
Plugin lifecycle hooks
init() runs once when FDO loads your plugin. render() returns the UI string. renderOnLoad() optionally returns a script string to run after the iframe mounts.DOM helper classes
Build HTML with typed helpers —
DOMText, DOMButton, DOMTable, DOMInput, DOMNested, DOMMedia, DOMSemantic, DOMLink, and DOMMisc — instead of concatenating raw strings.Capability-gated privileged actions
Host-granted capabilities control access to filesystem mutations, scoped process execution, and hosts file writes. Every privileged action is auditable and correlation-ID tracked.
Plugin-scoped storage
PluginRegistry.useStore("default") gives you an in-memory store. PluginRegistry.useStore("json") gives you a JSON-backed persistent store, both scoped to your plugin.Structured logging
Built-in logging methods (
this.log, this.info, this.warn, this.error, this.event) write structured log entries with plugin identity and correlation IDs.Operator tool presets
Pre-defined scopes for Docker, kubectl, Helm, Terraform, Ansible, AWS CLI, gcloud, Azure CLI, Podman, Kustomize, GitHub CLI, Git, Vault, and Nomad speed up operator plugin development.
IPC communication
Register named message handlers on the backend. The iframe UI sends messages to handlers via host-injected helpers. Responses flow back to the UI automatically.
Contract validation
Runtime validators (
validatePluginMetadata, validateHostMessageEnvelope, validatePluginInitPayload, and others) let you verify host envelopes and plugin contracts at runtime.Two runtimes
FDO plugins span two separate runtimes. Understanding this boundary is essential before writing any plugin code.
- Backend / plugin runtime — your plugin class,
init(),render(), handlers, storage, and logging run here. You can import and bundle npm packages freely. - Iframe UI runtime — the output of
render()andrenderOnLoad()runs inside FDO’s sandboxed iframe. Do not use arbitraryimport/requirehere. Use only host-injected globals documented by FDO (such asNotyf,hljs,ace,Split, andwindow.*helpers).