Ciaren

Plugins Overview

Plugins & Extensibility

Ciaren is plugin-first. Almost every capability — the nodes on the canvas, the databases you connect to, the engine your flow runs on, the code it exports — is defined as a versioned provider contract that a plugin can implement. A plugin is a small Python package that depends only on the public plugin API (app.plugin_api), never on Ciaren's internals.

That means the core stays lean and open, while the community can extend it from the outside — without forking.

Ciaren's open core intentionally ships a focused set of built-in capabilities. Long-tail connectors, SaaS-specific integrations, and organization-specific workflow nodes should live as plugins maintained by their authors or community, not as ever-growing core surface area.

In one sentence

If Ciaren doesn't do something you need, you can add it as a plugin — and ship it as a portable, optionally signed package.

What you can extend

Each row below is a real interface in app.plugin_api. A single plugin can implement one or several of them.

Extension pointProvider contractWhat a plugin can add
NodesNodeProviderNew canvas nodes that run end-to-end — preview, run, and Python code export. Sidebar forms render from the node's config_schema
ConnectorsConnectorProviderNew database / API / storage sources and sinks, with runtime behavior: test, list tables/objects, and read/write through the SQL & storage nodes. Connection forms render from the connector's metadata + config_schema
ML model typesModelProviderNew trainable model types that appear inside the core Train nodes' model picker and train/log/export through the core ML pipeline
StorageStorageProviderNew object/file storage backends
Execution enginesExecutionProviderNew dataframe engines beyond the built-in polars and pandas
ExportersExporterProviderNew code/artifact export targets (e.g. notebooks)
ValidatorsValidatorProviderNew data-quality / contract checks
AI capabilitiesAIProviderPipeline builders, debuggers, optimizers
AuthenticationAuthProviderNew authentication methods

Plugin train nodes get first-class ML support too: a node can declare typed model output handles, persist fitted models through the host's MLflow-backed ModelStore, and emit model references that the core Predict / Feature Importance nodes consume — see ML Model Plugins.

Status note. The built-in catalog ships nodes, connectors, storage, the polars / pandas engines, and the ML model catalog; plugins can execute nodes, connectors, and model types end-to-end. The remaining contracts (engines beyond the defaults, custom exporters/validators, AI capabilities, and auth methods) are defined extension points designed for plugins — they are how Ciaren grows without bloating the core. The plugin API is versioned but still alpha: contracts may change between releases until 1.0.0 (a plugin declares the api_version it targets, and the loader rejects incompatible ones before import). Always check the API reference for what the running instance currently exposes.

How a plugin is discovered

Ciaren finds plugins two ways:

  1. Local directory — point CIAREN_PLUGINS_DIR at a folder of plugins (great for development, no install needed).
  2. Installed package — a plugin that declares the ciaren.plugins entry point is discovered automatically once pip install-ed.

Fresh installs also include a small bundled Explore catalog with the Hello Plugin and MLP Classifier example packages. Bundled catalog entries are not loaded automatically: they are shown as installable examples so users can try the install and approval flow. Set CIAREN_MARKETPLACE_INDEX=none to hide Explore, or point it at your own marketplace JSON.

Plugins page — no plugins installed, permissions warning banner, and the Explore catalog showing installable example plugins with trust tier and license

Once installed and approved, plugins show what they contribute — nodes, ML model types, connectors — with trust and signature badges:

Plugins page with the MLP Classifier example installed — Active status and Trusted signature badges

Plugin details — the MLP Classifier plugin's contributed node and ML model type, license, trust tier, compatibility, and install location

# Develop against a local folder
export CIAREN_PLUGINS_DIR=/path/to/your/plugins
ciaren serve

# Inspect what's loaded
ciaren-plugin list

Disabled plugins and plugins with ungranted permissions are not imported until you approve them — code never runs behind your back. See Plugin Security & Permissions.

Packaging & signing

Plugins can be packaged as portable .ciarenplugin files and cryptographically signed (Ed25519). Installing with --trusted refuses any package not signed by a key you trust.

# Publisher: generate a key, package, and sign
ciaren-plugin keygen
ciaren-plugin pack ./my-plugin ./my-plugin.ciarenplugin
ciaren-plugin sign ./my-plugin.ciarenplugin \
  --key <private_hex> --key-id acme-2026 --publisher acme

# Consumer: install only trusted, signed packages
ciaren-plugin install ./my-plugin.ciarenplugin --trusted
ciaren-plugin verify  ./my-plugin.ciarenplugin

See Packaging & Distribution for the full publisher workflow.

Complete, runnable examples

Two example plugins live in the repository, both shipped as pre-built signed packages in examples/plugins/dist/ and bundled into the Explore catalog so a fresh install lists them ready to install:

Reading plain HTTP APIs needs no plugin at all — that's the built-in REST API connector. Build a connector plugin for sources beyond it.

Where this is heading

These contracts are the foundation for a community ecosystem of nodes, connectors, execution engines, exporters, AI assistants, templates, and integrations. The core stays open and useful on its own; extensions install from the outside.

If you want Ciaren to support a new external system, start by building a plugin. If the Plugin API blocks that work, open an issue for the SDK gap rather than a request to add the system directly to core.

Next steps


Built something useful? Open a Discussion to share it with the community.