packages/docs/plugins/overview.md
Plugins are the primary extension mechanism for elizaOS. Every capability beyond the core runtime — from LLM providers to blockchain interactions — is delivered as a plugin.
A plugin is a self-contained module that registers one or more of:
Plugins are loaded during runtime initialization in this order:
createElizaPlugin()) providing workspace context, session keys, emotes, custom actions, and lifecycle actions. Always first in the plugins array.@elizaos/plugin-sql and @elizaos/plugin-local-inference are pre-registered before runtime.initialize() to prevent race conditions.sql, local-embedding, form, knowledge, trajectory-logger, agent-orchestrator, cron, shell, agent-skills, commands, plugin-manager, and roles (see packages/agent/src/runtime/core-plugins.ts). Additional plugins like pdf, cua, browser, computeruse, obsidian, code, repoprompt, vision, cli, edge-tts, elevenlabs, discord, telegram, and twitch are optional and loaded when their feature flags or environment variables are configured.~/.eliza/plugins/ejected/. When an ejected copy exists, it takes priority over the npm-published version.plugins.installs in eliza.json. Collected before drop-in plugins; any plugin name already present here takes precedence.~/.eliza/plugins/custom/ and any extra paths in plugins.load.paths. Plugins whose names already exist in plugins.installs are skipped (mergeDropInPlugins precedence rule).// eliza.json plugin configuration
{
"plugins": {
"allow": ["@elizaos/plugin-openai", "discord"],
"entries": {
"openai": { "enabled": true }
}
},
"connectors": {
"discord": { "token": "..." }
}
}
Install → Register → Initialize → Active → Shutdown
init() is called with runtime contextcleanup() is called on runtime stopeliza plugins install @elizaos/plugin-openai
eliza plugins list
Enable or disable a plugin by setting its enabled flag in eliza.json:
{
"plugins": {
"entries": {
"plugin-name": { "enabled": false }
}
}
}
Or edit the config file directly (eliza config path shows the file location):
$EDITOR "$(eliza config path)"
Eject a plugin via agent chat to clone its source for local editing:
eject the telegram plugin so I can edit its source
See Plugin Eject for the full eject/sync/reinject workflow.