How Plugins Work
Plugins are standalone ES modules (.js files) that export a meta object and a setup function.
Loading Process
1
Registry Read
Core reads the plugin registry from localStorage.
2
Plugin Manager Check
If the Plugin Manager is missing or disabled, it’s auto-installed/enabled from its default GitHub URL.
3
Deduplication
Duplicate plugin IDs are removed from the registry.
4
Filter Enabled
Only plugins with
enabled: true are loaded.5
Import
Each plugin is loaded via dynamic
import(). For cross-origin URLs, the code is fetched and loaded via a blob URL (handles CORS).6
Validation
Core checks that the module exports
meta (with id, name, version) and setup (a function).7
Permissions
Permissions are set on the plugin (system plugins get elevated access).
8
Setup
plugin.setup(api) is called with a 5-second timeout.9
Event
plugin:loaded event is emitted. After all plugins load, board:allPluginsLoaded fires.The meta Object
Plugin Management
Installing
Toggling
Deleting
Reloading
Restarting
Unloading
When a plugin is disabled or deleted:plugin.teardown()is called (if exported)- The plugin’s container is removed from the DOM
plugin:unloadedevent is emitted
Plugin Manager
The Plugin Manager is itself a plugin. It provides:- Installed Plugins tab — view, toggle, delete installed plugins
- Community Store tab — browse and install from GitHub
- Manual Install — paste any URL to install a plugin
- Docs link — links to the official documentation
Plugin Manager Features
- Cannot be deleted or paused (system protected)
- Auto-installed on first boot
- Auto-re-enabled if disabled
- Registers its own UI slot system via
api.registerUI()
Security
Trusted Sources
Plugins are checked against allowed sources:
Plugins with unknown sources are blocked from loading.
Permissions
The Plugin Manager gets elevated permissions to manage other plugins. See Permissions for details.Setup Timeout
Each plugin has a 5-second timeout for itssetup() function. If it exceeds this, the plugin is considered failed and an error notification is shown.