Skip to content

Categories of Plugins

Aarav Malani edited this page Jun 6, 2026 · 2 revisions

A plugin can be categorised by two aspects - its format and its usage.

Categorisation by Format

There are two types of plugins: external and installable plugins.
TL;DR: external = bundled + fully complete, installable = npm package + abstract class
They are differentiated by their manifest type

External Plugins

External plugins are completely self-contained. When they are built, they are compiled into JS bundles ready to be used in the Conductor framework without any additional steps. On building, they are copied to the dist/ directory.

These plugins only have access to

  1. The Conductor conduit instance
  2. The Conductor channels it attaches to

As such, only plugins which satisfy those conditions can be external plugins. An example is the class from What is a plugin?, which only requires the channel it's attached to

Installable Plugins

Installable plugins are not self-contained. They are meant to be installed as dependencies on the runner and host applications. They are eventually published to npm.

Generally, they are meant to be used when the plugin needs information about the host application or the runner. An example is the @sourceacademy/runner-cse plugin, where the CSE plugin needs to know about the runner's internal execution.

They are developed as an abstract plugin, and the actual implementation is done in the runner or host applications which host their own internal plugin registry.

Categorisation by Usage

Plugins can also be categorised by which environment they are developed to be register in. In the plugin repository, the plugins are categorised into web or runner plugins.

Note: The host environment was separated into web and node (to be added later) since the web plugin could contain the React code for the plugin tabs. This would help separate out plugin code from the frontend.

They are differentiated based on folder name of the parent folder of the plugin. For example,

  • src/runner/test has the runner test plugin
  • src/web/cse has the web test plugin.

Clone this wiki locally