Skip to main content

SchulyPlugins documentation

Official plugins for the Schuly backend. Each plugin lives in its own folder under src/, targets .NET 10, and implements ISchulyPlugin from Schuly.Plugin.Abstractions (consumed as a NuGet PackageReference). The backend loads built plugin DLLs at startup and drives their lifecycle (ConfigureServices, ConfigureEndpoints, MigrateAsync) plus any recurring IPluginBackgroundTask. Plugins are built and shipped as DLLs to the repo branch (Aniyomi-style distribution) and dropped into the backend's /app/plugins/ folder by operators.

Repository layout

PathRole
src/Schuly.Plugin.Example/Reference / scaffolding plugin. Minimal ISchulyPlugin with minimal-API endpoints, anonymous + authorized routes, and a per-plugin vault demo.
src/Schuly.Plugin.Schulware/Schulnetz integration via SchulwareAPI. EF Core + Postgres, Kiota-generated client, background sync task, MVC controllers.
src/Schuly.Plugin.OdaOrg/OdaOrg (ICT-BBAG apprenticeship portal) integration. HttpClient + AngleSharp scraper, EF Core + Postgres, background sync task.
.github/workflows/build_push.ymlDiscovers every src/Schuly.Plugin.*/*.csproj, builds, and publishes DLLs + index to the repo branch.
.github/workflows/sync-version-on-release.ymlVersion sync on release.

A Schulware/OdaOrg plugin folder is organised as:

FolderContents
Controllers/ASP.NET MVC controllers — HTTP routes (host registers the assembly as an MVC ApplicationPart, so they are auto-discovered).
Services/Background task (IPluginBackgroundTask) + focused scoped sync/login services.
Dtos/ / Models/One record per file.
Data/EF Core entities, DbContext, design-time factory, and Migrations/.
Infrastructure/External client factories / helpers.
Client/Kiota-generated API client (Schulware only).
config.ymlSample runtime config (Schuly.Plugin.<Name>.yml in the backend's plugins-config dir).

Documents

DocWhat it covers
setup/development.mdPrerequisites, building a plugin, running it against a live backend.
adding-a-plugin.mdScaffolding a new plugin + the ISchulyPlugin lifecycle.
migrations.mdPer-plugin EF Core migrations and the dedicated Postgres DB.
setup/kiota-client.mdRegenerating the Schulware Kiota client.
setup/distribution.mdHow plugins are built and shipped to the repo branch.
contributing.mdThe enforced issue → branch → PR → squash workflow.