Skip to content

Developer Guide

Callora is a domain-neutral plugin platform for .NET 10 — "our own Shopware/Symfony, for .NET". The host is a pure platform: authentication and RBAC, user and plugin management, a business-event bus, and the dynamic plugin-routing surface. Everything domain-specific — voice, dialing, contact-center flows, custom UI — lives in plugins.

This guide is for the developer building those plugins.

What you build

A Callora plugin is a normal .NET assembly (plus, optionally, colocated Vue front-end bundles) that ships with a registry.json manifest. It loads into the running host on a collectible AssemblyLoadContext, can be installed and activated without a host restart, and extends the platform through a small set of sanctioned mechanisms.

The extension surface at a glance

SurfaceMechanismMarker / contractGuide
React to platform activityBusiness-event listeners (mutable / cancelable)IBusinessEventListenerEvents & Jobs
Change platform behaviorService decoration (per-call proxy)IServiceDecorator<TService>, [CalloraExtensible(Decoratable)]Backend Extensions
Expose HTTP APIsPlugin controllers on dynamic routesAdminApiController / WorkspaceApiController, [CalloraRoute]Backend Extensions
Own dataCustom EF Core entities in an isolated plugin_<id> schemaIPluginDbContextFactory<TContext>Backend Extensions
Run background workLeased jobs with idempotency and fencingIBackgroundJobHandlerEvents & Jobs
Gate featuresCapabilities and entitlements (provenance-sourced)registry.json capabilities, PluginEntitlementCapabilities & Entitlements
Extend the admin shellSlots, hooks, service overrideswindow.CalloraAdminAdmin Extensions
Extend tenant-facing surfacesVue views into SSR output@callora/surfaceSurface Extensions

For the complete, always-current catalog of every sanctioned extension point — grouped by mode (contribute / decorate / replace) — see the Extension Points Reference. It is verified against the platform source by a build test, so it never falls behind the code.

Trust and governance in one sentence

Plugins run in-process and fully trusted — .NET has no supported in-process sandbox (ADR-013) — so safety comes from provenance (signing + curation) and from compile-time governance (the CAL0001CAL0004 Roslyn analyzers plus a PublicAPI baseline), not from a runtime cage. Read Architecture before writing your first plugin.

Where to start

  1. Build your first plugin — the end-to-end walkthrough: scaffold, add an endpoint, install, activate, call it.
  2. Architecture — the platform model, the ALC runtime, the governance boundary.
  3. Plugin Fundamentals — the entry class, registry.json, the curated context, exporting extensions, configuration, dependencies.
  4. Backend Extensions — events, decoration, controllers, data.
  5. Surface Extensions and Admin Extensions — the two front-end runtimes.
  6. Capabilities & Entitlements and Events & Jobs.
  7. Testing & Publishing — the test stack, the PublicAPI workflow, publishing a signed plugin.

The generated type reference for the host and first-party plugins lives under API Reference.

License model: Callora is Apache-2.0 — the platform, the analyzers, the CLI and the @callora/* packages alike. A plugin you build against it may carry any license you like, including a proprietary one; Apache-2.0 asks nothing of it.