Build your own extensions

Stella Ops loads optional plug‑ins at start‑up, so you can inject custom scanners, policy engines and result exporters while the core stays a single auditable binary.

Why bother with a plug‑in SDK?

Where you can plug in

HookPurposeInterfaceLoad mode
SBOM‑EnricherAdd metadata before scan (e.g. licences)ISbomMutatorOn start‑up
Scanner EngineAnalyse a new ecosystem (e.g. Rust Crates)IVulnerabilityProviderStart‑up
Policy EngineCustom pass/fail rulesOPA RegoStart‑up
Result ExporterSend findings to external systemsIResultSinkStart‑up

No hot‑plug yet. Modules are loaded once during service boot; live reloading will be revisited after v1.0.

SDK availability — v0.2 β (Q1 2026)
Early adopters can already browse the stella‑ops‑sdk branch; the binary interface will freeze when v0.2 is tagged.

5‑minute quick‑start (C# /.NET 10 LTS)

  1. Create a class‑library project:
    dotnet new classlib -n HelloWorld.Plugin
  2. Add the SDK NuGet:
    dotnet add package StellaOps.SDK --version 0.2.0-preview
  3. Implement IResultSink or any other interface.
  4. Publish and copy the DLLs into /opt/stella/plugins/HelloWorld/.
  5. Restart the scanner; start‑up logs confirm your module is loaded.

Full tutorial lives in §30 Plug‑in Guide.

Security boundaries

Monolith‑leaning, micro‑service‑ready

Stella Ops ships as a single .NET 10 executable, yet every functional slice (scanner, DB‑merger, pre‑/post hooks) is isolated behind an interface. Extracting a slice into its own container usually takes a day: compile the plug‑in as a self‑contained worker, expose the gRPC contract, point the core at the socket — done.

Architectural deep‑dive: docs/10_ARCHITECTURE_OVERVIEW.md.

Read full Plug‑in guide   See SDK timeline   Air‑gap ready — see Offline Kit