Fluxta

Introduction

What a Fluxta plugin is and what it can add to the app.

A plugin extends Fluxta with capabilities the app does not have on its own — connecting to OBS, reading a file, calling an HTTP API, or reacting to a chat message.

Plugins are written in TypeScript against @fluxta/sdk, distributed as a folder, and loaded by Fluxta at startup.

To see a plugin running before reading further, go to Your first plugin. It takes a few minutes.

What a plugin can add

Everything a plugin offers is declared in its manifest.json. Fluxta reads the manifest to populate its UI, and ignores anything the code registers that the manifest did not declare.

The two halves

A plugin has two independent sides, and Fluxta runs each in its own environment.

The background process

A Node.js script — the manifest's main — that Fluxta starts and keeps running alongside the app. It registers the plugin's Actions, handles their triggers, holds connections to whatever the plugin integrates with, and reads and writes plugin-wide settings.

The editors

An editor is a web page that Fluxta loads inside a sandboxed iframe. There are two kinds:

  • An Action Editor is scoped to a single placed Action. It opens when the user edits the button that Action sits on, and it reads and saves that one placement's settings.
  • A Plugin Editor is scoped to the whole plugin. It opens from the app's settings and holds plugin-wide configuration: an API token, a connection endpoint, a "test connection" button.

Both are optional. An Action with no editor has no settings form.

Build editors with @fluxta/sdk/ui: ready-made React components — fields, rows, dialogs — that already look and behave like the rest of the app, with no styling to write.

How they talk

The two halves are separate processes and share no memory. They communicate in two ways, both provided by the SDK:

  • Settings, persisted by Fluxta and readable from both sides.
  • Messages, arbitrary JSON sent back and forth live. The message format is yours to define — see Messaging.

On this page