Skip to content
Runesmith Hub

Runesmith Hub

The two projects

Every hub plugin is two .NET projects that build two assemblies: a contracts assembly and an implementation assembly.

ContractsImplementation
Name<Root>.Contracts, such as Lumen.Todo.Contracts<Root>, such as Lumen.Todo
HoldsThe public API other plugins may use: interfaces, records, enums, attributes, constantsEverything else: exports, services, views, logic
May referenceThe .NET base library, the Runesmith SDK, and the contracts of plugins you depend onYour contracts, the Runesmith SDK, the contracts of your dependencies, and NuGet packages
Visible to other pluginsYes, to plugins that declare a dependency on yoursNever
VersioningStrict semantic versioning, checked by the hubFree to change in any version

A plugin with nothing to share still has a contracts project. It can be empty.

Rules for the contracts project

  • Do not reference your own implementation or any NuGet package.
  • Do not expose types from third-party libraries. Each plugin has its own load context, so a library type is a different type in every plugin.
  • Do not grant InternalsVisibleTo to anything except your own test project.

Start from the template

The Runesmith plugin template creates both projects, turns on NuGet lock files, adds an empty contracts project, a placeholder icon, a README and a CI workflow that runs the hub check tool. See Create a plugin in the Runesmith documentation.

What the repository needs

PathRequired
plugin.jsonYes
The two projects, each with packages.lock.jsonYes
LICENSE, an OSI-approved licenseYes
README.md, shown on your plugin pageYes
The iconYes
SECURITY.md, or GitHub's private vulnerability reportingFor verified plugins