Skip to content

Extension points

Most of what a plugin declares is about its own service. An extension point is different: a published place where a plugin may add a row to lemonfiber itself. At the revision this site pins there are two extension points, and both belong to the doctor — a check it runs, and the remedy it shows when that check does not pass. Each one below names what a manifest has to declare in [requires] to use it.

  • Namespaced. A contributed id is <plugin-id>:<name>, and may not take an id a bundled row holds, by exact name or inside a family the bundled rows own.
  • A check has a remedy. Every contributed check needs at least one, and a remedy’s for names a check of the same plugin.
  • Rendered, never run. A remedy is text the error renderer shows you. A repair that acts would be a recipe, and recipes are not run by this build.
  • Its own service only. A contributed check asks the plugin’s own service and nothing else.
  • Beside, not instead. A contributed check runs alongside the bundled ones and cannot replace, reorder or silence one.

A contributed check runs with every lemonfiber doctor, and on its own with lemonfiber doctor --only <plugin-id>:<name>. One that does not hold is raised as PLUGIN-1, carrying the plugin’s own remedy. There is no dashboard panel, command or acting repair a plugin can add; those places are fixed.

The contract, with its reasons, is extension points.

Read out of contract/extension-points.json at the revision this site pins, which is also what lemonfiber plugin extension-points prints. The fields a row carries are defined in the manifest.

doctor.check

A check the doctor runs, alongside the bundled ones.

A plugin declares
doctor.contribute
It lands in
the diagnostics register
It is run by
the check engine — independent, bounded, four verdicts, a remedy on anything that does not pass
Every row carries
idtitlecategoryrequestexpectwhyfixture
A row may carry
timeout_sserviceexpected

timeout_s runs from 1 to 30, and is 10 when a row leaves it out

category is one of environmentstoragenetworkvpncredentialsservicesprovidersqueueconfig

Ids the bundled rows already hold
  • config.aggregator-guarded
  • config.credential-permissions
  • config.download-client
  • config.household-telling
  • credentials.
  • credentials.indexer
  • environment.api
  • environment.autostart
  • environment.compose
  • environment.engine
  • network.bindings
  • providers.indexer.
  • providers.indexers
  • providers.usenet
  • providers.usenet.
  • services.decline-key
  • services.quality-guides
  • services.releases
  • services.releases.
  • services.request-gate-record
  • storage.hardlinks
  • storage.mode
  • storage.permissions
  • storage.quality-headroom
  • storage.single-mount
  • storage.space
  • vpn.egress-match
  • vpn.egress-sources
  • vpn.killswitch
  • vpn.port-forward
  • vpn.port-forward-client
  • vpn.tunnel
  • vpn.tunnel-restored
  • vpn.unprotected

doctor.remedy

What to do about a contributed check that did not pass.

A plugin declares
doctor.contribute
It lands in
the remedies a finding carries
It is run by
the error renderer — rendered, never executed
Every row carries
idforactionwhy
A row may carry
detail
Ids the bundled rows already hold

No bundled row holds an id here.