Skip to main content
The FDO SDK is a TypeScript toolkit for building plugins — called application modules — for the FlexDevOps (FDO) desktop application. You extend the 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 kubectl calls
  • 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() and renderOnLoad() runs inside FDO’s sandboxed iframe. Do not use arbitrary import/require here. Use only host-injected globals documented by FDO (such as Notyf, hljs, ace, Split, and window.* helpers).
Ready to build your first plugin? Head to the Quick Start guide.