Plugin Architecture
This document describes the plugin system that enables floe’s flexibility.
Overview
Section titled “Overview”floe uses a plugin architecture for all configurable components. The implementation-truth category list is floe_core.plugin_types.PluginType.
| Plugin Type | Alpha-Supported Reference Path | Purpose | ADR |
|---|---|---|---|
| Compute | DuckDB | Where dbt transforms execute | ADR-0010 |
| Orchestrator | Dagster | Job scheduling and execution | ADR-0033 |
| Catalog | Polaris | Iceberg table catalog | ADR-0008 |
| Storage | S3-compatible storage plugin; demo uses MinIO | Object storage for Iceberg data | ADR-0036 |
| TelemetryBackend | Jaeger and console telemetry plugins | OTLP telemetry backend (traces, metrics, logs) | ADR-0035 |
| LineageBackend | Marquez | OpenLineage backend (data lineage) | ADR-0035 |
| DBT | dbt Core | dbt compilation environment | ADR-0043 |
| Semantic Layer | Cube reference implementation | Business intelligence API | ADR-0001 |
| Ingestion | dlt plugin primitive | Data loading from sources | ADR-0020 |
| Quality | dbt expectations and Great Expectations plugin primitives | Data quality validation | ADR-0044 |
| RBAC | Kubernetes RBAC | Namespace and service-account isolation | Epic 7B |
| Alert Channel | Webhook / Slack / email primitives | Contract violation alert delivery | Epic 15 |
| Secrets | Kubernetes Secrets and Infisical plugin primitives | Credential management | ADR-0023/0031 |
| Identity | Keycloak reference implementation | Authentication provider | ADR-0024 |
Total: 14 plugin categories, based on floe_core.plugin_types.PluginType.
Note: PolicyEnforcer and DataContract are now core modules in floe-core, not plugins. Policy enforcement tooling is provided via DBTPlugin, and rules are configured via manifest.yaml. Data contracts use ODCS v3 as an enforced standard.
Canonical Registry: The authoritative implementation-truth reference for plugin category counts and entry points is Plugin Catalog.
Plugin Type History
Section titled “Plugin Type History”| Version | Count | Changes |
|---|---|---|
| current | 14 | Added Quality, RBAC, and Alert Channel categories to PluginType; LINEAGE remains an alias for LINEAGE_BACKEND |
| floe-core 2.1 | 11 | Moved PolicyEnforcer + DataContract to core modules (not plugins) |
| floe-core 2.0 | 13 | Split ObservabilityPlugin -> TelemetryBackendPlugin + LineageBackendPlugin (ADR-0035) |
| floe-core 1.5 | 12 | Added DBTPlugin (ADR-0043) |
| floe-core 1.4 | 11 | Added DataQualityPlugin (ADR-0044) |
| floe-core 1.0 | 11 | Initial plugin architecture |
Plugin Structure
Section titled “Plugin Structure”Each plugin is a self-contained package:
plugins/floe-orchestrator-dagster/├── src/│ ├── __init__.py│ └── plugin.py # DagsterOrchestratorPlugin class├── chart/ # Helm chart (if service deployment needed)│ ├── Chart.yaml│ ├── values.yaml│ └── templates/│ ├── deployment.yaml│ ├── service.yaml│ └── configmap.yaml├── tests/│ ├── test_plugin.py│ └── conftest.py└── pyproject.toml # Entry point registrationDocumentation Index
Section titled “Documentation Index”| Document | Description |
|---|---|
| Discovery and Registry | Plugin discovery via entry points, PluginRegistry implementation |
| Plugin Interfaces | All plugin interface ABCs (ComputePlugin, OrchestratorPlugin, etc.) |
| Lifecycle and Versioning | API versioning, compatibility checks, PluginMetadata |
| Configuration and CLI | CLI commands, creating custom plugins |
| Integration Patterns | Compute-catalog integration, DuckDB example |
Related Documents
Section titled “Related Documents”- ADR-0008: Repository Split - Plugin architecture details
- ADR-0010: Target-Agnostic Compute - ComputePlugin
- ADR-0020: Ingestion Plugins - IngestionPlugin
- ADR-0031: Infisical as Default Secrets Management - SecretsPlugin
- ADR-0032: Semantic Layer Compute Plugin Integration - SemanticLayerPlugin delegation
- ADR-0033: Target Airflow 3.x - OrchestratorPlugin for Airflow
- ADR-0034: dbt-duckdb Iceberg Catalog Workaround - ComputePlugin Iceberg integration
- Interfaces - Full interface definitions